1 / 21

—— 张森

小谈反汇编. —— 张森. ■ 反汇编用处. ■ 如何反汇编. ■ 硬件知识. ■ 反汇编知识. ■ 指令压缩. ■ 反汇编: 把目标代码转为汇编代码的过程,常用于软件破解、外挂技术、病毒分析、逆向工程、软件汉化等领域。学习和理解反汇编语言对软件调试、漏洞分析、 OS 的内核原理及理解高级语言代码都有相当大的帮助,在此过程中我们可以领悟到软件作者的编程思想。. ■ Samba : 一个允许非 Windows 系统与 Windows 系统共享文件的开源项目。 ■ Wine : 对 Windows API 做了同样的工作。

booker
Download Presentation

—— 张森

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 小谈反汇编 ——张森

  2. ■ 反汇编用处 ■ 如何反汇编 ■ 硬件知识 ■ 反汇编知识 ■ 指令压缩

  3. 反汇编:把目标代码转为汇编代码的过程,常用于软件破解、外挂技术、病毒分析、逆向工程、软件汉化等领域。学习和理解反汇编语言对软件调试、漏洞分析、OS的内核原理及理解高级语言代码都有相当大的帮助,在此过程中我们可以领悟到软件作者的编程思想。 ■ Samba:一个允许非Windows系统与Windows系统共享文件的开源项目。 ■ Wine:对Windows API做了同样的工作。 ■ OpenOffice.org:对Microsoft Office文件格式作逆向工程。 ■ ReactOS:竭力在ABI及API上,兼容NT系Windows系统。以便让为Windows所编写的软件和驱动程序可以在其上运行。 ■ WindowsSCOPE:用来监测及分析Windows系统内存的实况内容。

  4. 由于大多数近代体系结构区分开代码和数据,因此你可能倾向于认为该阶段工作无足轻重。事实并非如此,因为体系结构可以强迫数据段不包含代码,但不保证代码段不包含数据。当然,由于代码段是写保护的,所以代码段中的数据只能是常数。虽然如此,在代码段中可以有数据,或者只是无用信息。 参考:http://www.pediy.com/kssd/pediy08/pediy8-794.htm

  5. 1:反汇编的通常方法,即所谓线性扫描方法。1:反汇编的通常方法,即所谓线性扫描方法。 2:递归下降,克服了某些缺点(Schwarz和Debray,第9届关于逆向工程的工作会议,2002年)。 下面分别说下两种优点与缺点 参考:http://www.pediy.com/kssd/pediy08/pediy8-794.htm 参考:http://www.docin.com/p-97854086.html

  6. ■ IA-32下寄存器,当然常用的没这么多

  7. ■许多指令默认指定具体寄存器,例如字符串指令默认使用ECX,ESI,EDI;用段内存模型,一些指令假设指针和特殊段相关,例如:一些指令假设EBX内存位置指针与DS段关联. ■ESP不能被当作索引寄存器 ESP,EBP当基址时候,SS作为默认段;其他时候DS作为默认段 ■EIP不能被软件修改,被隐式转移指令控制(比如JMP,JCC,CALL,RET),中断和异常.唯一读EIP的方法是执行一个CALL,读桟里返回值.EIP被RET或者IER间接修改

  8. ■ ESP不能被当作索引寄存器 ■ LEA

  9. ■Prefixes 锁定\重复\段改写\跳转条件\操作数大小\地址大小 ■MODR/W说明32可能值:8个寄存器和24个寻址模式,指定寄存器或者3字节以上指令信息 ■SIB基址变址和比例变址需要 ■Dislacement说明偏移大小 ■Immediate说明立即数大小

  10. ■mov word ptr es:[eax + ecx * 8 + 0x11223344], 0x12345678■mov word ptr es:[eax + ecx * 8 + 0x11223344], 0x12345678 目标操作数是 mem,源操作数是 imme.对应的机器编码是:26 66 C7 84 C8 44 33 22 11 78 56 ■解释一下: 26:在指令序列里是:prefix部分,作用是调整内存操作数的段选择子66:在指令序列里是:prefix 部分,作用是调整操作数的缺省大小C7:在指令序列里是:Opcode部分,是mov指令是操作码84:在指令序列里是:ModRM值,定义操作数的方式C8:在指令序列里:SIB值定义内存操作数的方式44 33 22 11:在指令序列里是: displacement值78 56:在指令序列里是:immediate值

  11. ■调用约定 当参数个数多于一个时,按照什么顺序把参数压入堆栈。函数调用后,由谁来把堆栈恢复。在高级语言中,通过函数调用约定来说明这两个问题。常见的调用约定有: ■奇怪的mov edi,edi 不采用NOP 因为指令周期

  12. ■我们来看一个示例

  13. ■返回值 主要有如下形式:1)通过寄存器返回函数值;2)通过参数按引用方式返回函数值;3)通过全局变量返回函数值;4)通过处理器标志返回函数值; ■一般用EAX,EAX不够放EDX。如果返回一个含有几百个字节的结构或者对象,编译器会在不告诉程序的情况下,给函数传递一个隐式参数,这个指针指向保存的返回结果。

  14. ■PE文件格式 文件偏移地址(File Offset)PE文件在磁盘上储存时,各数据的地址。用十六进制工具显示的地址就是文件偏移地址。 虚拟地址(Virtual Address,VA)由于Windows程序是运行在386保护模式下,在保护模式下,程序访问存储器所使用的逻辑地址称为虚拟地址。 基地址(ImageBase)文件执行时将被映像到指定内存地址中,这个初始内存地址称为基址。 相对虚拟地址(Relative Virual Address,RVA)相对虚拟地址表示此段代码在内存中相对于基地址的偏移。RVA = VA - ImageBase

  15. ■RVA = FO - 段FO + 段RVA

  16. ■Ollydbg: OLLYDBG是一个新的动态追踪工具,将IDA与SoftICE结合起来的思想,Ring 3级调试器,非常容易上手,己代替SoftICE成为当今最为流行的调试解密工具了。同时还支持插件扩展功能,是目前最强大的调试工具。 ■IDA Pro: DA Pro是DataRescue开发的专业反汇编工具, 它是一款专业的反汇编工具,己成为Reverse engineerer的必备工具。

  17. F2:软断点 F4,F8:硬断点 F7:TF=1 ■ 软件断点CC(int3):当程序运行到int3的时候就会产生一个异常 硬件断点主要通过调试寄存器来设置。 内存断点对所设的地址设为不可访问/不可写属性,这样当访问/写入的时候就会产生异常.

  18. ■ 基于JCC CALL等指令操作数是偏移 ■ 下面操作看看

  19. 感谢!

More Related