1.1
学习首先遇到了Process Monitor不太会用的情况。这里很简单的讲一下Process Monitor的使用。
个人觉得比较方便的是建立一个空文件夹在桌面,这里我建立一个文件夹名为laboratory,之后就把所有的分析文件都放在laboratory中。之后reset filter,选择filter,将laboratory包含在Process Monitor中。文件运行过程的日志便会在显示在其中。(但是若是不在这个文件夹中的进程便看不见。。。所以发现例程创建启动文件夹中的0.exe的进程怎么没有,苦苦找了很久。还是锻炼一下眼力好了。)
查看注册表的话,自启动的几项如下:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run-
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx
1.2
不知道为什么我IDA出来的汇编代码跟书本不一样,难道跟环境有关系?
1.3
终于不用考虑眼力了,Process Monitor在filter中选择Process中输入wsample01b.exe之后apply。这样就可以只看这个进程了。
在虚拟机中调试的话,ollydbg的单步调试快捷键要按Fn+F8或F9,不然就点鼠标到累死了。
2.2
一种初级的反调试技术是IsDebuggerPresent(一种能够检测是否挂载了调试器的API函数)。除此以外还有一些类似的API函数,如CheckRemoteDubuggerPresent。
除了API函数以外,还可以利用popf和SINGLE_STEPYICH异常来检测调试器以及是使用int 2dh。
还可以使用代码混淆(加入一些机器码但不影响其正常运行,但是IDA反汇编后跟正常不同)
最后一种是使用打包器,原理:将可执行文件的代码和数据进行压缩,然后将解压用的代码附加在前面,运行的时候先将原本的可执行数据解压,然后再运行解压缩的数据。