首页
社区
课程
招聘
[原创]Enigma6.8脱壳+修复(上)
发表于: 2021-8-8 23:03 38779

[原创]Enigma6.8脱壳+修复(上)

2021-8-8 23:03
38779

最近在研究壳,去试了试最新的Enigma脱壳,虽然也脱了但是还是有一些勉强,修复IAT并不完美需要手工处理掉一些不同语言所必带的函数才能完全修复掉IAT,有完美方法的朋友可以回帖告诉我。


平台:windows XP 32位

工具:OD、REC

加壳对象:VC6.0程序

OEP的寻找比较简单,我没有让入口虚拟化,水平有限,只勾选了输入表的保护,其他的默认。

寻找OEP我使用的是语言特有的特征码定位的方法,这种方法很快啊,单步跟OEP比较难这个壳对断点的检测也很严,对于F8单步跟踪也有对应的检测手段,例如步过某个CALL计算出来的返回地址会变成错误的值无法正常返回上一层。我们也要尽量避免使用CC断点和内存断点,只用硬件断点来调试程序。


我们可以自己在网上找一个VC++6.0无壳程序找到OEP头部的CALL(前几个都行,别太远,也别太近),各种语言例子程序我也会打包给大家一份供参考。

我寻找的特征码是33 C0 6A 00 39 44 24 08 68 00 10 00 00 0F 94 C0 50 FF 15 ?? ?? ?? ?? 85 C0

我们先让程序跑起来,毕竟几乎所以的加密壳都会填充原始代码段数据,运行程序会让程序把代码段解码方便我们用特征码定位OEP

在这里下硬件执行断点即可,重新载入程序F9让程序执行过去会断在我们的执行断点处,我们看堆栈窗口直接返回到上一层的调用就行OEP


OEP的寻找到这里就结束了,不难,这种方法除了入口直接虚拟化效果不好以外其他的一些处理OEP头部的方法都能定位出OEP,例如stolen code也可以有效处理找回头部代码或者可以定位接近头部的代码来进行下一步分析找回头部代码。

我先来介绍下EG壳处理IAT有几种手法吧

模拟函数执行

单纯加密

加密+模拟函数

还有一种特殊情况下才会有,但也是一种单纯的加密,难度属于最低的那种,我下面也会简单说一下


模拟函数执行的IAT函数就是上面截图0111开头的IAT函数就全部是模拟类型的IAT,我们随便选一个右键查找参考找到调用的call看看


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 8
支持
分享
最新回复 (13)
雪    币: 6704
活跃值: (4682)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
2
感谢分享,如果有vm  OEP的处理更好了,补区段那种
2021-8-9 08:49
0
雪    币: 12520
活跃值: (5263)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3

高大上,学习了
2021-8-9 10:14
0
雪    币: 1857
活跃值: (3201)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
感谢楼主分享 
2021-8-9 10:32
0
雪    币: 3832
活跃值: (4397)
能力值: (RANK:215 )
在线值:
发帖
回帖
粉丝
5
感谢楼主分享!
2021-8-9 14:04
0
雪    币: 2014
活跃值: (582)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
感谢分享! 正遇到这种加壳的程序, 希望能够成功脱壳
2021-8-9 17:49
0
雪    币: 8401
活跃值: (4976)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
最近家里电压有问题,没得更新下篇。恢复了立马更新,看大家的情况,到时候我再写Obsidium1.7最新的脱文,感谢大家支持
2021-8-11 01:12
0
雪    币: 238
活跃值: (1095)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
支持一下~
看了你这教程,我本来想看看这个壳对于.net程序的强度,出个姐妹篇教程,谁知道,能勾的全勾了,加密强度依旧近乎于0。。。
2021-8-11 19:26
0
雪    币: 2089
活跃值: (3933)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
不错,这个是外层壳的部分,内存抓出来剩下的和upx一样处理了,如果有vmp部分处理就更好了
2021-8-11 22:23
0
雪    币: 8401
活跃值: (4976)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
10
零下八度 支持一下~ 看了你这教程,我本来想看看这个壳对于.net程序的强度,出个姐妹篇教程,谁知道,能勾的全勾了,加密强度依旧近乎于0。。。
和之前老版本差不多,处理IAT的方式还是比较老式的
2021-8-12 16:50
0
雪    币: 14
活跃值: (206)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
我有一个文件是加的6.0,载入x64dbg弹出检测调试
2022-8-10 13:14
0
雪    币: 297
活跃值: (1647)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
感谢分享。
代码被加花指令分段执行了。我们在这个IAT函数地址下硬件写入断点看看哪里写入这个地址的----哪个地址下断,怎么我断不下来???
我们可以看到EDX寄存器的内容就是壳申请的内存段的地址0111开头,我们可以往上看edx的来源,往上跟看看0111地址到底是在哪里生成产生的
2022-11-27 17:42
0
雪    币: 7
活跃值: (340)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
wx_一叶_733 感谢分享。 代码被加花指令分段执行了。我们在这个IAT函数地址下硬件写入断点看看哪里写入这个地址的----哪个地址下断,怎么我断不下来??? 我们可以看到EDX寄存器的内容就是壳申请的内存段的地址 ...
应该是 数据窗口4254F8地址 下硬件断点
2023-10-26 02:58
0
雪    币: 297
活跃值: (1647)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14

我们一直跟踪EBP堆栈里面的模拟地址最后跟到-------------这个是怎样跟踪EBP堆栈到下面这个语句的,看不懂.为什么要跟踪EBP?

005C3D67    8B00            MOV EAX,DWORD PTR DS:[EAX]

最后于 2024-10-27 18:07 被wx_一叶_733编辑 ,原因:
2024-10-27 17:11
0
游客
登录 | 注册 方可回帖
返回
//