sloth-rbk 发表于 2020-4-5 14:28

看完ximo教程的我又回来了,分享下笔记,接着第二课

刚开始学脱壳破解,先看了一集H大的教程,各种OEP入口点一脸懞逼
然后开始看ximo的脱壳教程
工具是吾爱的虚机,需要的都能找到(lordpe,IR,在工具包的PE工具中,后面等级3修复需要下载ir1.6版本)
学完分享下笔记,主要是ximo大佬的笔记给做一些补充(毕竟环境不一样,复现存在一些问题)
吾爱版的OD还是不会用= =
一些教程中的程序加载后直接到系统领空,返回到用户代码直接跑飞,或者最后一次异常法的时候,一次就跑飞,,不明白什么情况
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1.手脱UPX壳
调试工具:PEID和ollyice(OD入口点不对)
脱壳机-脱upx壳
跳转:
  1. f4
  2. 打断点
OEP (入口点): 大跨度跳转
3种脱壳方式
  1.OD插件,LordPE(需要用importCRE修复)
  2.OD dump方式一
  3.OD dump方式二
UPX壳脱壳方法:
方法1:单步跟踪
        入口点不一样,OD版本不同,吾爱破解的OD入口点设置有问题,切换Main也不行
        程序领空 基址00400000,偏移xxx
        系统领空 7xxxxxxx
方法2:ESP定律法
        关键句的下一句,ESP突变,ESP数据窗口跟踪
        打硬件断点,word/dword(硬件断点及时删)
命令:
  1.dd XXXXX
  2.hr XXXXX
方法3:2次内存镜像法
        Delphi程序的地址段特征
        M:内存(alt+m),区别系统领空
        .rsrc        资源文件
        下断点f2        运行
        UPX0        下断点 运行
方法4:一步直达法
        适用范围:大部分UPX壳和ASPACK壳
        搜索命令,pop,push
2. 手脱ASPACK壳
ASPack 2.12 -> Alexey Solodovnikov
调试工具:PEID和ollyice(OD和教程不对)

6种方法脱
方法1:单步跟踪
        跑飞了
        f7进入call
        popad离oep近了
方法2:ESP定律
方法3:一步直达
方法4:2次内存镜像
        程序段的.rsrc 下断点
        .text 下断点
方法5:模拟跟踪
        内存找SFX,imports,relocations
        命令:
        tc eip<地址
        没有直接找到OEP,跟踪到了系统领空,通过“执行到返回(alt+f9)”/“执行到用户代码(ctrl+f9)”到用户代码
        断续单步跟踪
方法6:SFX模拟跟踪
        菜单栏-选项-调试-SFX
        块方式跟踪
3. 基础脱壳教程3:手脱NSPACK(北斗)
壳:
nSPack 1.3 -> North Star/Liu Xing Ping
NsPacK V3.7 -> LiuXingPing *
方法1:单步跟踪
        离程序形如比较近的call,F7进入
        使用lordPE脱壳
        使用importREC修复
方法2:ESP定律
方法3:SFX模拟跟踪
        找SFX,数据,输入表,资源处跟踪
方法4:2次内存镜像
        PE是从上到下解压的,先解压资源文件,然后解压代码段,
        没有资源文件,直接code段下断点
        Q:如果有资源文件,为什么不直接在代码段下断点?
北斗,直接搜:
at GetVersion
在retn下断点单步(吾爱版OD直接到系统领空然后运行到用户代码直接跑飞,,Ollyice单步后直接到OEP)
适用于北斗3.0以前的壳
北斗2.4加壳
EP区段是nsp0,是nspack,北斗的壳
单步进入jump,ESP定律法搞定
北斗3.7壳
ESP定律法搞定
4.基础脱壳教程4:手脱FSG壳
脱FSG 2.0 -> bart/xt

单步跟踪找OEP
OEP地址一般存在寄存器里面,不直接给出
手动、查找IAT:工具importREC
找任意一个call,在importantREC中定位call的地址
0042500077DA6C17advapi32.RegCloseKey
004252807C838E18kernel32.LCMapStringA

RVA=25000
SIZE=280
SIZE=1000(懒省事,有垃圾指针)

方法1:单步跟踪
方法2:ESP定律
方法3:特殊ESP定律
只适用于FSG 2.0 -> bart/xt
00400154 >8725 04A24700   xchg dword ptr ds:,esp         ; qqspirit.0047A208
0040015A    61            popad
0040015B    94            xchg eax,esp                           ; qqspirit.0047A208
跳到这在堆栈窗口第四行为OEP地址,在反汇编窗口跟随,下硬件断点,直接跳到OEP

5.基础脱壳教程5:手脱PECompact2.X的壳
1。单步
进入系统领空后继续跟踪
OD载入脱壳后的程序直接到OEP
VC6:OEP
0040A86D >55            push    ebp

2。ESP定律
第一个ESP突变不对,跟踪后进入系统领空
第二个成功
3。BP VirtualFree
F9运行后
F2取消断点
ALT+F9回到用户代码
查找 push 8000(特征码)
F4运行到这
然后单步跟到OEP
4。BP VirtualFree
两次F9运行
中断后取消断点,Alt+F9返回
单步走到OEP
5.0040A86D >B8 74DE4500   mov eax,qqspirit.0045DE74
上来就是MOV命令,参数后面跟0045de74这种
运行命令:
bp 0045de74

045DE74    B8 F9CB45F0   mov eax,F045CBF9

0045DE79    8D88 9E120010   lea ecx,dword ptr ds:
0045DE7F    8941 01         mov dword ptr ds:,eax
0045DE82    8B5424 04       mov edx,dword ptr ss:
0045DE86    8B52 0C         mov edx,dword ptr ds:
0045DE89    C602 E9         mov byte ptr ds:,0E9
0045DE8C    83C2 05         add edx,5
0045DE8F    2BCA            sub ecx,edx
0045DE91    894A FC         mov dword ptr ds:,ecx
0045DE94    33C0            xor eax,eax
0045DE96    C3            retn
0045DE97    B8 78563412   mov eax,12345678//下断
Q:F4!=断点F2+F9?
F4跑飞,F2+F9不会
6。bp VirtualAllocSHIFT+F9运行
取消断点
ALT+F9
向下拉,看到JMP。运行到这

7.最后一次异常法;
取消所有异常。
2次跑飞。
在堆栈窗口找SE句柄
crtl+g转到:SE xxxx处

8。两次内存
9。at GetVersion
C++程序的程序的方法,OEP最终在上面

6.基础脱壳教程6:手脱EZIP 壳
开始遇到jmp直接F8
1。单步
脱壳后无法运行,可能入口点找错了。以用重建PE的方法。
2。ESP定律

7.基础脱壳教程7:手脱tElock 0.98b1壳

1。最后一次异常法
Ctrl+F9 运行至ret
Alt+F9 运行至上层调用的下句
Shift+F9 忽略异常运行
f4!=f2+f9

取消所有异常。
n次跑飞。
运行n-1次在堆栈窗口找SE句柄
crtl+g转到:SE xxxx处
1.7汉化不能修复
https://www.52pojie.cn/thread-618899-1-1.html
解决方法:需要用ImportREC_fix.exe 1.6版本
先打开原程序,然后再打开ire等级3跟踪修复,后打开原程序不能跟踪
剩余5个剪切掉OK,修复完毕!

2.模拟跟踪
使用前提,程序没有SEH安装
跳过16次异常后,没有SEH安装,可以使用模拟跟踪
16次之后,在堆栈窗口找SE句柄
crtl+g转到:SE 0042D7FD处
下断点,运行到这,然后直接模板跟踪到OEP

3。两次内存镜像
调试设置-》异常勾选
shift+f9运行
第一次断点在程序段的.rsrc
第二次在.text代码段

8.基础脱壳教程8:手脱exe32pack壳

1。ESP定律
入栈是重要语句
重要语句可以用ESP定律法
Q:为什么OD会自动跑?我都到OEP了,还没脱壳就跑到下面代码了
用ODdump插件脱壳有问题,需要使用lordPE+importCre脱壳
lord+impCRE脱壳OK,lordPE脱壳后,壳没有脱干净,peid查壳后,发现仍然有壳,不能运行
ollyICE原版脱壳失败
OD吾爱版脱壳成功

2。下断:BP IsDebuggerPresent
运行,取消断点
ALT+F9,
计算ss+edi
转到OEP!

9.基础脱壳教程9:脱WinUpack加的壳

加条件断点的方法。

加壳后,什么也没发现,可以看.ep区段:.Upack
汇编:test eax,eax
循环,加载输入表后,跳转OEP
也可以长久单步跟踪
----------------------------------------------------------------------------------------------------------------------------
后面太多代码,就不复制了,避免流水贴嫌疑:lol

Fa1c0n 发表于 2020-5-20 14:12

感谢分享笔记内容! 受教了!

giohoo 发表于 2020-6-3 17:31

很受启发,继续学习{:1_937:}

wusheng 发表于 2020-6-4 09:44

感谢分享,{:1_921:}

wuaibaozi 发表于 2020-7-18 14:35

有可能是和ximo OD版本不同。每次跳转都和他不一样。就这跳转郁闷了我一个小时。本来就不好学还一直被误导这走。。。

hacker-v 发表于 2020-7-21 22:28

感谢分享

dongfanfeng 发表于 2021-2-6 10:24

厉害了   也去学习一下
页: [1]
查看完整版本: 看完ximo教程的我又回来了,分享下笔记,接着第二课