壳与脱壳
壳
分类
分类:
压缩壳在CTF竞赛中,UPX可能会出现得更多。
脱壳方法:使用脱壳机/手动脱壳
PE文件格式
参考书:《WindowsPE权威指南》
工具:Stud_PE,CFF_Explorer,010Eiditor
查壳工具
壳的加载过程
脱壳过程
寻找OEP
E8+… >> jmp(短距离,如1字节)
E9+… >> 远jmp(操作数有四字节)
找到该指令后下断点,运行后按F8跟过去。
操作:pushad指令处的栈顶设置硬件断点(eg.4字节)
操作:“内存布局”->“upx0”->设置一次性执行断点->运行
前提:OEP在code段。
二次内存断点法:
Dump内存
若在前面找到的OEP指令出调用x32dbg自带的Scylla插件,会发现OEP已经被自动写好了:
再点击"Dump",生成的exe文件就是已经脱了壳的。
IAT修复
上面Dump出来的程序一般无法直接运行,原因:
反调试
SMC动态加解密技术
申请内存空间 -> 写入shellcode的字节码 -> 执行shellcode
例题:天津垓
先拖进ida64
1.过Enumfunc
Patch 改成jmp
2.
Str全局,还有两处调用
VirtualProtect:改变函数内存的属性。0x40:设置为可修改。
静态混淆手段
花指令的识别与去除
更高级
乱序