天书笔记(1)---逆向C基础

来源:互联网 发布:张国荣好看吗 知乎 编辑:程序博客网 时间:2024/04/28 07:49
 

 还有两个星期去学校了,在剩下的几天时间边玩边看书,争取能把天书夜读给看完吧,有点逆向跟驱动基础,希望可以完成任务。CSDN上做做笔记,会的也当复习下。

1.VS编译器查看反汇编代码:F9下断,F5调试程序,“调试”--“窗口”--“反汇编”或是直接ALT+8

2.

mov ecx,30hmov eax,0CCCCCCCChrep  stos dword ptr es:[edi]

stos是串存储指令,功能是将eax中得数据放入edi所指的地址中。同时edi增加4字节,rep重复执行ecx中填写的次数

stos对应的是stosd,其他的还有stosb,stosw,分别对应处理4、1、2个字节,这里是对对堆栈中30h*4(0c0h)个字节初始化为0CCh,也就是int 3指令,这样发生意外时执行堆栈里面的内容会引发调试中断。vc debug版本特有的操作

3.反汇编指令的还原方法

   第一步:把指令分为几类,并实际的把它们区分开

                   首先是函数调用相关代码,这些代码用于调用函数或者作为一个函数被调用。几乎凡是堆栈操作(备份寄存器或者压入参数)可全部归入此类。此外还有CALL指令、堆栈恢复,这类代码很容易识别,,把它们标识为F,成为F指令。

                   然后是流程控制代码,设计判断和跳转指令,以级对循环变量操作的指令。这些应用于循环、判断语句,比较容易看出,标记为C,C指令。

                   剩余的是数据处理,应该不含有函数调用,多半不含有堆栈操作,也不会含有跳转。对于复杂的数据处理代码,只能逐横翻译,然后多行组合,标记为D,D指令

   第二步:取出其中标记为D的代码进行逐行翻译。首先标记为F的语句基本不需要翻译,它们本身就是简单的函数调用,其次标记为C的指令,将它们翻译为IF,for、do、或者switch。

   第三步:表达式的合并与控制流程的结合。

原创粉丝点击