为了学习逆向等知识,先简单学习一下汇编
常见指令
- 数据传送指令:MOV/XCHG,PUSH/POP,LEA
- 算数运算类指令:ADD/ADC/INC,SUB/SBB/DEC/CMP/NEG,MUL/IMUL,DIV/IDIV
- 位操作类指令:AND/OR/XOR/NOT/TEST
- 控制转移类指令:JMP/JCC/LOOP,CALL/RET,INT n
- 处理机控制类指令:NOP
脱壳
壳是软件逆向分析学的常见主题。为了理解好它,需要掌握有关PE文件格式、操作系统的基本知识(进程、内存、DLL等),同时也要了解有关压缩/解压缩算法的基本内容。
windows上常见的有三类壳:
压缩壳:为了减小可执行文件的体积,需要对可执行文件进行压缩,可执行文件经过压缩后成为另一个可执行文件
内部含有解压缩代码,文件在运行瞬间于内存中解压缩后执行,程序的功能完全一致
压缩是为了缩减PE文件的大小以及隐藏PE文件内部代码与资源(解压缩后可以通过内存的Dump窗口查看)
分类:
单纯用于压缩普通PE文件的压缩壳:UPX、ASPack
对源文件进行较大变形、严重破坏PE头的压缩壳:UPack.PESpin、NSAnti
加密壳:应用了多种防止代码逆向分析的技术(反调试、反模拟、代码混乱、多态代码、垃圾代码、调试器监视等)来保护PE文件免受代码逆向分析的实用程序
不仅可以保护PE文件本身,还可在文件运行时保护进程内存,防止程序所使用的资源通过内存被dump
分类:
商用保护壳:ASProtect、Themida、SVKP等
公用保护壳:UItraProtect、Morphine等
- VMP壳
脱壳(压缩壳和部分加密壳)
- 脱壳工具
- ESP定律:ESP硬件断点
- 单步跟踪法
- 内存镜像法:两个内存访问断点
- 找PUSHAD对应的POPAD