xx_学脱壳 -- 脱壳总结小思路


   还有些关于学习OD的日志就不贴过来了。放个连接记录下。
安全

http://hi.baidu.com/xx375/archive/tag/xx_%E5%9C%A8%E5%AD%A6%E4%B9%A0:%E8%84%B1%E5%A3%B3-%E7%A0%B4%E8%A7%A3-%E9%80%86%E5%90%91 ide


wKiom1MFcdLivkFQAABPSAyKKis375.jpg

最近学习脱壳 好多事知其然不知其因此然.、、、、函数

脱壳只是一个小过程、很多的加壳软件已经有了相对应的脱壳机、、学习

也有固定的脱壳方法知道怎么脱便可、其中脱壳的方法我感受有一下几个(我接触到的)加密


首先说一下壳好文章有一切从”壳”开始、壳的做用有压缩程序和保护程序等等、指针

因此分压缩壳和加密壳调试

区分两种壳:日志

OD载入时有入口警告或询问是压缩程序吗?普通压缩壳OD调试时候没有异常code

加密壳所有有反跟踪代码,会有许多SEH陷阱使OD调试时产生异常。blog


脱壳的根本目的是找到程序真正的OEP、

对于压缩壳来讲简单点有一些固定格式:

PUSHAD PUSHFD  POPAD POPFD    RETN  JMP EAX(跨断跳跃到一地址)


单步跟踪这种壳有几个注意:

F7(步入)  F8(步过)  F4(运行到鼠标处)  F2(下/取消访问断点)

寻找OEP的路上必定要一往无前不能回头、、使劲一切方法跳出其循环、他想回头就F4他、也有好多例外不过总会有解决的办法越过他去、、继续前行、

注意一下几点:

JMP的时候看一下地址的差距很远F8便可很近就得F7进去不然程序会飞、

CALL有的时候就是变形的JMP比较地址差选择F7 F8便可

F7是很安全的不过就是浪费时间

F8步过对压缩壳用的不少,F7步过加密壳用的不少

其余的脱壳方法(这里只说怎么作):

1简单常见有名的壳能够去下载其脱壳机脱之、

2 ESP定律(堆栈平衡定律)(颇有用能够脱去大部分压缩壳和少许的加密壳)

3内存镜像法 在rcsc这里断  F9第二次在code断F9差很少到OEP了就。。

4最后一次异常法不忽略全部异常shift+f9一路下去数着次数知道程序运行

从新加载再shift+f9一路下去次数比运行时的次数少一次、而后查看堆栈窗口处查看

下边找一实例

0012FFBC   0012FFE0  指向下一个SEH记录的指针

0012FFC0   0040CCD7  SE处理程序  //CTRL+G到这个地址处 下断   Shit+F9运行

0012FFC4   7C817077  返回到kernel32.7C817077

0012FFC8   7C930228  ntdll.7C930228

而后单步走便可、、、找OEP去、、嘎嘎、、

5懒方法(好像能够脱好多壳)、设置OD以下

 一、忽略全部的异常

二、“调试选项”--“SFX”--“字节模式跟踪实际入口”

 等着OEP本身出来、、、

6模拟跟踪法打开内存找到   00405000   SFX,数据这地

直接这样下断tc eip< 00405000等OEP出现、等等


脱壳完后还有重要的一步修复。

有的程序脱完壳就不能运行了、、

1    直接ImportREC获取源程序(加壳的那个)的导入表而后DUMP咱脱完壳的程序

2    若是碰到有无效的函数指针、将其修复先尝试使用右击设置跟踪级别为1 2 3什么的 若是还有的话 直接右击反汇编进去找到那个函数复制

    其名字而后双击这个无效的函数指针将这个函数名复制进去肯定便可 最后没有了无效的DUMP、、

3    有的时候是PE损坏了 用LOADPE的重建PE功能便可

4    我遇见过几次先LOADPE  再ImportREC修复就好了、、、


一点小笔记先记下接下来就是无限的去脱壳、、、总结经验、、