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表地址,可以看到完好的导入表
完成脱壳




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

  1. 简单脱壳教程笔记(2)---手脱UPX壳(1)

    本笔记是针对ximo早期发的脱壳基础视频教程,整理的笔记. ximo早期发的脱壳基础视频教程 下载地址如下: http://down.52pojie.cn/%E5%90%BE%E7%88%B1%E7% ...

  2. 【个人笔记】ximo早期发的脱壳教程——手脱UPX壳

    [个人笔记]ximo早期发的脱壳教程--手脱UPX壳   壳分为两种:压缩壳和加密壳,UPX是一种很简单的压缩壳.   手脱UPX壳: 工具:ExeinfoPE.OD 对象:rmvbfix 方法1:单 ...

  3. 填坑专记-手脱FSG壳

      妈呀,脱FGS壳真的是坎坷颇多,多亏吾爱破解前辈们的帮忙.我一定要记录下来,省的以后再无法解决.   已经查看是FSG壳了.找到入口也容易了.重点就是脱壳并修复好它. 脱壳   OEP为:   使 ...

  4. 手脱NsPacK壳

    1.查壳 使用PEiD未能检测到壳信息,这时,我们更换其他工具 从图中可以看到壳的信息为[NsPacK(3.x)[-]] 2.百度壳信息 北斗程序压缩(Nspack)是一款压缩壳.主要的选项是:压缩资 ...

  5. 深入底层逆向分析TDC‘s keygenme(手脱压缩壳)

    系统 : Windows xp 程序 : TDC‘s keygenme 程序下载地址 :http://pan.baidu.com/s/1gdWyt6z 要求 : 脱壳 & 注册机编写 使用工具 ...

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

    本笔记是针对ximo早期发的脱壳基础视频教程,整理的笔记.本笔记用到的工具下载地址: http://download.csdn.net/detail/obuyiseng/9466056 EZIP壳 : ...

  7. 手脱UPX壳的方法

    0X00    了解 upx UPX作为一款元老级PE加密壳,在以前的那个年代盛行,著名病毒[熊猫烧香]就是使用这款加密壳. 0X01    单步跟踪法 就是使用ollydbg加载程序后,按F8进行单 ...

  8. 手脱无名壳tslgame_rl

    1.使用Detect It Easy查壳,该壳未显示出壳信息,至于为何有壳,我们使用IDA打开,查看其的导入表,其中没有太多函数使用: 2.我们使用x32dbg打开,运行至入口点,此处没有pushad ...

  9. 手脱Aspack变形壳1

    1.载入PEID Aspack v2.12 -> www.aspack.com 2.载入OD,不管是看查壳信息还是看入口特征都跟我上一次发的一个手脱Aspack v2.12的帖子相同http:/ ...

随机推荐

  1. Eclipse创建Spring XML配置文件插件

    引用:https://www.cnblogs.com/lideqiang/p/9067219.html 第一步:在 Eclipse Marketplace仓库中,搜索sts 第二步:安装Spring ...

  2. sleep 方法和 wait 方法有什么区别?

    这个问题常问,sleep 方法和 wait 方法都可以用来放弃 CPU 一定的时间,不同点 在于如果线程持有某个对象的监视器,sleep 方法不会放弃这个对象的监视器, wait 方法会放弃这个对象的 ...

  3. BUG战斗史 —— 日期格式与字符串之间的转换

    说在前面 最近在公司实习,接触了一个中小型的后台管理系统,不得不说,项目的目录结构比我平时做的"课程设计"要来得复杂,于是我先去看了Github上一些后台管理系统的模板项目 在gu ...

  4. Netty之非阻塞处理

    Netty 是一个异步的.基于事件驱动的网络应用框架,用以快速开发高性能.高可靠性的网络 IO 程序. 一.异步模型 同步I/O : 需要进程去真正的去操作I/O: 异步I/O:内核在I/O操作完成后 ...

  5. 『现学现忘』Docker基础 — 37、ONBUILD指令介绍

    目录 1.ONBUILD指令说明 2.演示ONBUILD指令的使用 3.补充:crul命令解释 1.ONBUILD指令说明 ONBUILD是一个特殊的指令,它后面跟的是其它指令,比如 RUN, COP ...

  6. NE555脉冲模块电路

  7. 【译】HTML表单高级样式

    系列文章说明 原文 在本文中,我们将了解如何在HTML表单上使用CSS,为那些难于自定义的表单组件加以样式.如前文所述,文本框和按钮很适合使用CSS,而现在我们得来探索HTML表单样式的那些坑了. 在 ...

  8. javascript 判断变量是否是数组(Array)

    过完春节又有好多人寻找新的机会,旁边的人面试完就会分享一些问题,明明会的但是面试的时候,想不全,面试官不满意...这个懊恼的行为,今天的文章跟大家分享下:javascript如何判断便是是数组. 1. ...

  9. 使用Egret插件压缩代码包体积,减少请求数量的实战教程

    在白鹭引擎发布了5.2.7版本中新增加了命令行,增加自动合图插件TextureMergerPlugin功能.今天,我们以一个EUI案例来展示自动合图插件的具体使用方法和注意事项. 此外,我们在本文还融 ...

  10. h5 在全屏iphonex中的适配

    iphonex 已经上线有一段时间了,作为业界刘海屏幕第一款机型,导致全屏不能正常的全屏显示了,,所以需要对iphonx 适配,下面就详细说说如何适配 先看一张适配前后的图: iphonex 提供的 ...