文件和注册访问:对于最基本的分析,SysInternals的工具很有用。
对于基本网络访问分析,Wireshark很有帮助。
但接下来你仍需查看内部。
第一步是查看使用的是OS的API哪个函数,标准库是什么。
如果我们对指定文本调用MessageBox()的细节感兴趣,我们可以在数据段中查找这个文本,定位文本引用处,以及控制权交给我们感兴趣的MessageBox()的地方。
如果我们在谈论电子游戏,并且对里面的事件的随机性感兴趣,那么我们可以查找rand()函数或者类似函数(比如马特赛特旋转演算法),然后定位调用这些函数的地方,更重要的是,函数执行结果如何被使用。
但如果不是一个游戏,并且仍然使用了rand()函数,找出原因也很有意思。这里有一些关于在数据压缩算法中意外出现rand()函数调用的例子(模仿加密):blog.yurichev.com
下面这些函数可能会被导入。值得注意的是并不是每个函数都在代码中使用。许多函数可能被库函数和CRT代码调用。
- .ini-file访问(kernel32.dll): GetPrivateProfileString
- 资源访问(68.2.8): (user32.dll): LoadMen
- 文件访问(kernel32.dll): CreateFile, ReadFile, ReadFileEx, WriteFile, WriteFileEx
- Internet高级访问(wininet.dll): WinHttpOpen
- 标准MSVC库(如果是动态链接的) (msvcr*.dll): assert, itoa, ltoa, open, printf, read, strcmp, atol, atoi, fopen, fread, fwrite, memcmp, rand, strlen, strstr, strchr
56.2 tracer:拦截所有函数特殊模块
我们给所有前缀是xml的函数设置INT3断点吧:
另一方面,这样的断点只会触发一次。
Tracer会在函数调用发生时显示调用情况,但只有一次。但查看函数参数是不可能的。
尽管如此,在你知道这个程序使用了一个DLL,但不知道实际上使用了哪个函数并且有许多的函数的情况下,这个特性还是很有用的。
我们可以看见所有的至少调用了一次的cygwin1.dll库函数,以及位置: