版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/brunomarss/article/details/50714586
以
Visual Studio编译的
Hello World程序为例:
1、字符串分析法
搜索字符串Hello World并进入,跳转到上层函数(信息窗口),寻找标志:函数参数(main函数后两个参数是指针),exit等。
2、API下断栈回溯法
找到main函数中的Hello World并进入,在函数入口处下断,F9运行,查看堆栈情况,找到离断点最近的return,单击回车,便回到上一个栈帧。
查找关键函数,下断
根据字符串找到此处,并在入口处下断
F9运行,查看堆栈
找到离断点最近的return,单击回车,回到上一个栈帧
栈回溯结果:
3、单步跟踪法(最靠谱、适应性最强)
以JMP和Call为单位逐个跟进,根据main函数的特征判断main函数的位置(参数个数,参数类型,临近exit)
注:逐层查找
4、若是窗口程序,可通过查找 窗口回调函数(Spy++)进行分析
经验之谈:
a.OD上 E 键调出模块信息,找到用户模块,可跳转到main函数,同时得到模块基址;
b.一般情况下,条件分支不走的分支,设置为新的EIP,直接运行过去;