手脱PESpin壳【06.exe】

1.查壳

2.LoradPE工具检查

一方面可以用LoradPE工具查看重定位,另一方面也可获取一些详细信息

3.查找OEP

①未发现pushad

开始未发现pushad,进行单步步入,很快就能找到pushad

②使用ESP定律

这里要注意如果是有守护进程的话,需要使用【Crtl+G】,在输入框中输入“CreateMutexA”,点击“OK”,解除双进程守护。我们在函数末尾的Retn 0xC处下断点,因为壳会判断这个函数的头部是否有断点。

发现程序运行起来了,可以确定程序有反硬件断点,而反硬件断点是在异常处理中进行,所以要查看异常处理。

③开启异常处理

点击“选项”,选择“调试选项”,去掉框中所有勾选。

④插件忽略异常

右键导航栏单击“StrongOD”单击“Options”,出现图中界面,取消框中勾选,单击Save。

⑤异常断点

第一次异常0043864A F3:AE repe scas byte ptr es:[edi]//内存访问异常,[0043864D]

第二次异常0043884A F6F3 div bl//整数除0异常,[00438863]

第三次异常0043AFC3 FB sti//特权指令,[0043AF42]

第四次异常是在第三次异常的位置,[0043AF77]

第五次异常0043AF87 D7 xlat byte ptr ds:[ebx+al]//内存访问异常,[0043AF92]

第六次异常00438C00 8918 mov dword ptr ds:[eax],ebx//内存访问异常,[00438863]

⑥确定反调试位置

将③开启异常处理和④插件忽略异常中去除的勾选重新勾上,在OD下侧有一个搜索窗口,再其中输入dd XXXXXXXX,就会在数据窗口出现地址,这时在其上下“硬件执行断定”,如果在反硬件断点的前面,就会成功下断,如果是在反硬件断点的后面,就会完成执行(注:每测试完一个异常就重新开始一次)

次数 执行点 结果
第一次异常 0043864D 成功命中
第二次异常 00438863 成功命中
第三次异常 0043AF42 成功命中
第四次异常 0043AF77 程序执行
第五次异常 0043AF92 程序执行
第六次异常 00438863 程序执行

由表中很明显看出程序在第三次还能中断异常,而在第四次异常的位置会无法中断,所以推出反硬件断点就在第三次和第四次之间,而地址就在0043AF42到0043AF77之间,大胆假设将其中的部分关于寄存器的值nop掉(注:我们只是为人不让寄存器中的值发生修改,所以,关于跳转返回的值应当保留下来,否则程序将无法跳转,提前结束程序)

右键选择“复制到可执行文件”,在新窗口中右键”保存全部修改“,这是关闭OD,选择不保存,用OD打开新生成的文件,在第三次异常和第四次异常重新下断,发现两次异常都生效

⑦再次查找OEP

用查壳工具选择插件“通用壳OEP查询”记录地址为00409486

使用⑥确定反调试位置方法下OEP断点,F9运行两次,成功找到OEP位置

4.查看IAT表(43CFCD=IAT被加密之一)

向下进行单步步过到第一个call的位置,这里就是IAT表,右键单击“数据窗口跟随”选择“”内存地址“,可以很明显发现数值部分标红,很明显被加密了

右键单击“可执行模块”,可以很明显发现部分模块被加密,部分模块未加密

5.脱壳信息查找

记录之前找得的信息:

作用 地址
异常处理函数的入口点 43AF42
OEP 409486
IAT被加密的一个地址 43CFCD

删除之前所下的所有断点,重启OD,在上表地址下断点(注:将异常处理函数中的反硬件断点函数NOP掉),然后运行,在这个期间会多次命中43CFCD的断点,到写入假地址的时候停下

①第一次命中,写入了一个字节,字节数太少,不用看

②第二次命中,写入了四个字节,可以确定这是在给IAT表做修改,这个写入IAT表的地址为:43918C

在此处下软断点,启用RUN跟踪,进行查看,发现寄存器窗口有函数名跳过,可以确认IAT

我们已经知道函数名必然是在76打头段,我们将RUN跟踪的结果复制到TXT文本中,然后通过查找EAX=76进行逐个查找(注:由于操作流程,从后向前遍历,将会更容易找到),找到疑似的后,将前面的地址复制,在OD中,使用快捷键【Ctrl+G】,快速跳转至代码段,向下单步一次,查看寄存器,判断是否已到返回正确函数位置,由下图可以看到,返回正确函数地址:438F9F

6.编写脱壳脚本

设置断点地址:
地址 作用
1 00409486 OEP
2 0043AF59 函数内反硬件断点的位置
3 438F9F 返回正确函数地址的位置
4 43918C 写入IAT的位置
脚本思路:

硬件断点下好后,首先命中反硬件断点的位置,填充0x1A个nop,去掉反断点,再通过返回正确函数地址的位置获取正确导入表IAT函数并保存,从写入IAT的位置,覆盖壳加密的IAT,完成后,跳转OEP,开始dump操作

脚本实现:
MOV dwSEHAddr,0043AF59
MOV dwGetProcAddress,438F9F
MOV dwWriteIAT,43918C
MOV dwOEP,00409486
MOV dwEAX,0

//清除断点
BPHWCALL//硬件断点
BPMC//内存断点
//异常处理函数,清除硬件断点的位置
BPHWS dwSEHAddr,"x"
//下断点
BPHWS dwGetProcAddress,"x"//GetProcAddress后面,保存EAX
BPHWS dwWriteIAT,"x"//填充IAT后面,将保存的EAX写入到[EDI]
//在OEP处下硬件执行断点
BPHWS dwOEP,"x"//OEP,弹出信息框,成功到达OEP
LOOP0:
  RUN
  CMP eip,dwSEHAddr
  JNZ LOOP0
  FILL dwSEHAddr,1A,90

LOOP1:
  RUN
  CMP eip,dwGetProcAddress
  JNZ JMP1
  MOV dwEAX,eax
  JMP LOOP1

JMP1:
    CMP eip,dwWriteIAT
    JNZ JMP2
    MOV [edi],dwEAX
    JMP LOOP1

JMP2:
    CMP eip,dwOEP
    JNZ LOOP1
    MSG "成功到达OEP!!!"

40

1

MOV dwSEHAddr,0043AF59

2

MOV dwGetProcAddress,438F9F

3

MOV dwWriteIAT,43918C

4

MOV dwOEP,00409486

5

MOV dwEAX,0

6


7

//清除断点

8

BPHWCALL//硬件断点

9

BPMC//内存断点

10

//异常处理函数,清除硬件断点的位置

11

BPHWS dwSEHAddr,"x"

12

//下断点

13

BPHWS dwGetProcAddress,"x"//GetProcAddress后面,保存EAX

14

BPHWS dwWriteIAT,"x"//填充IAT后面,将保存的EAX写入到[EDI]

15

//在OEP处下硬件执行断点

16

BPHWS dwOEP,"x"//OEP,弹出信息框,成功到达OEP

17

LOOP0:

18

  RUN

19

  CMP eip,dwSEHAddr

20

  JNZ LOOP0  

21

  FILL dwSEHAddr,1A,90

22


23

LOOP1:

24

  RUN  

25

  CMP eip,dwGetProcAddress  

26

  JNZ JMP1  

27

  MOV dwEAX,eax  

28

  JMP LOOP1

29


30

JMP1:

31

    CMP eip,dwWriteIAT

32

    JNZ JMP2

33

    MOV [edi],dwEAX

34

    JMP LOOP1

35


36

JMP2:

37

    CMP eip,dwOEP

38

    JNZ LOOP1

39

    MSG "成功到达OEP!!!"
脚本运行:

在这里就可以开始脱壳了

7.修复IAT

我们用Import REC修复IAT,发现无法修复

我们可以很明显看出修复后的IAT表还有问题

转换成“Hex/ASCII”显示后,可以看到每个函数地址后都多了个00,所以我们才看到隔4个地址有1个函数。

Process ID----->所要脱壳的程序进程ID,可在任务管理器中查看,因为ID是十进制,所以取消勾选Hex
Code Start----->代码起始于地址
Code End------->代码终止于地址
New IAT VA----->新的IAT偏移
x

1

Process ID----->所要脱壳的程序进程ID,可在任务管理器中查看,因为ID是十进制,所以取消勾选Hex

2

Code Start----->代码起始于地址

3

Code End------->代码终止于地址

4

New IAT VA----->新的IAT偏移

使用工具【通用导入表修复工具】进行修复导入表

跟踪到新IAT表地址,可以看到完好的导入表

完成脱壳

来自为知笔记(Wiz)

原文地址:https://www.cnblogs.com/HOPEAMOR/p/11992063.html

时间: 2024-10-06 01:37:23

手脱PESpin壳【06.exe】的相关文章

简单脱壳教程笔记(8)---手脱EZIP壳

本笔记是针对ximo早期发的脱壳基础视频教程,整理的笔记.本笔记用到的工具下载地址: http://download.csdn.net/detail/obuyiseng/9466056 EZIP壳 : 当载入到OD中的时候,会发现有一串jmp watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" > 操

简单脱壳教程笔记(10) --- 手脱EXE32PACK壳

本笔记是针对ximo早期发的脱壳基础视频教程,整理的笔记.本笔记用到的工具下载地址: http://download.csdn.net/detail/obuyiseng/9466056 EXE32PACK 1.ESP定律 1.将程序加载到OD中,发现有大段的加密指令,我们先单步走,到达关键指令,push ebp 2.单步运行到cmp eax,eax处,在寄存器窗口的esp处,右键在数据窗口跟随,并在数据窗口中进行设置硬件断点. 3.按运行,并删除硬件断点 4.然后单步,就会到达OEP 2.下断:

<Crack> 手脱UPX

2016-4-19(YPP) <此篇为脱壳入门教程> UPX简介 http://baike.baidu.com/link?url=h_P3r-L0icvZoSNO-HUwY4RE3ptQ9r6d8H1ZFsgGlCOqyv6Q68N95BHIvNY2nCs0IUdYt0xy6LYQ_pDF-Gg6Na               ①UPX加壳压缩               ②寻找OEP               ③Dump内存映像               ④重建IAT         

简单脱壳教程笔记(7)---手脱PECompact2.X壳

本笔记是针对ximo早期发的脱壳基础视频教程,整理的笔记.本笔记用到的工具下载地址: http://download.csdn.net/detail/obuyiseng/9466056 简介: FSG壳是一款压缩壳.我们这里使用9种方式来进行脱壳 工具:ExeinfoPE或PEid.OD.LordPE.ImportREConstructor 脱壳文件:05.手脱PECompact2.X壳.rar 1 单步 我们发现有两处call会跑飞,那么我们需要在跑飞处进入,然后在跟即可. 第一个跑飞的cal

手动脱RLPack壳实战--吾爱破解培训第一课选修作业七

作者:Fly2015 吾爱破解论坛培训第一课选修作业练习的第7题.这个壳没听说过,但是脱起来比较简单,根据ESP定律即可直达光明,Dump出原来的程序. 老规矩,首先对需要脱壳的程序进行查壳处理. 使用DIE查壳的结果,程序加的是RLPack壳并且原程序是用微软编译器编译的. OD载入加壳程序进行调试分析,入口点代码反汇编快照. 看到PUSHAD指令想都不要想,直接ESP定律脱壳.F8单走一步在ESP寄存器上设置硬件写入断点,然后F9运行程序,程序自然断在刚才设置的硬件断点处. 显然JMP指令的

手动脱WinUpack 壳实战--吾爱破解培训第一课选修作业六

作者:Fly2015 吾爱破解培训第一课选修作业第6个练习示例程序.不得不重复那句话,没见过这种壳,该壳是压缩壳的一种,相对于压缩壳,加密壳的难度要大一些,特别是IAT表的修复问题上. 首先分别使用DIE和Exeinfo PE对该加壳程序进行查壳的处理. OD载入加WinUpack 壳的程序进行动态调试分析,加壳程序入口点反汇编快照. 想都不用想,看到PUSHAD直接ESP定律脱壳F8单步一步,ESP寄存器右键设置硬件写入断点.F9运行程序,程序自然的断在设置的硬件断点处,如图. 有点惊呆了,硬

手动脱NsPacK壳实战--吾爱破解培训第一课作业2

作者:Fly2015 这里脱壳的程序是吾爱破解培训的作业2,相较于作业1稍微要强一点,但是只要掌握了脱壳的ESP定律,脱这个Nspack壳并不难,不过还是蛮有意思的. 1.使用查壳软件对加壳的程序进行查壳. 使用PE Detective查壳的结果: 使用DIE查壳的结果: 2.OD载入程序进行脱壳操作 OD载入以后,被加壳程序的入口点的汇编代码,如图.很显然,加壳程序载入OD以后,发现有3个pushad指令,因此在进行程序脱壳的时候,根据ESP定律需要下3个硬件断点. 根据该加壳程序载入OD的汇

简单脱壳教程笔记(9) --- 手脱TELock0.98b1壳

本笔记是针对ximo早期发的脱壳基础视频教程,整理的笔记.本笔记用到的工具下载地址: http://download.csdn.net/detail/obuyiseng/9466056 TELock 操作 1.最后一次异常法 1.选项--->调试设置--->异常------取消所有异常. 在OD插件--StrongOD--Options--Skip Some Exceptions选项取消,重启OD再试试. 2.然后将程序重新载入 3.按shift+f9 ,发现17次shift+f9 就会让程序

手动脱FSG壳实战

作者:Fly2015 对于FSG壳.之前没有接触过是第一次接触.这次拿来脱壳的程序仍然是吾爱破解论坛破解培训的作业3的程序.对于这个壳折腾了一会儿,后来还是被搞定了. 1.查壳 首先对该程序(吾爱破解培训第一课作业三.exe)进行查壳: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" > 非常遗憾.这次