- UID
- 26066
注册时间2006-10-6
阅读权限50
最后登录1970-1-1
感悟天道
TA的每日心情 | 开心 2016-4-11 20:07 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
发表于 2007-4-26 18:49:51
|
显示全部楼层
看了你们的讨论两遍,都不知是否要收录此文。/:05
我手动压缩了此文
颜色就顾不上了
Armadillo程序脱壳 去校验 区段化减肥
【文章标题】: Armadillo脱壳+去自校验+优化
【文章作者】: glts
【作者邮箱】: [email protected]
【软件名称】: PowerPoint to Flash
【下载地址】: http://www.dreamingsoft.com/order.htm?ref=pptFlash2
【保护方式】: Armadillo 1.xx - 2.xx -> Silicon Realms
【编写语言】: C++
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
————————————————————————————————————————————————————
▲图1 ▲图2(标准版)****应该和平时的(专业版)有所不同
▲图3
——————————————————————————————————————————————————
一、PEID查壳得知是:Armadillo 1.xx - 2.xx -> Silicon Realms Toolworks
(图1↑)。为了更好的方便脱壳还是用穿山甲专用工具查清楚些(图2↑)在这里显示出来就只有“屏蔽调试器“。
看上去还是有点不放心于是反程序运行起来,打开LordPE一看还是双进程的(图3↑),这样我们就清楚了!接下来我们就脱壳
1、OD载入为求保险还是隐藏调试器,首先我们得把双进程转换成单进程,方法有很多种,在这里我就用脚本如图:
运行完脚本后进程转换成了单进程,如果不放行的话,可以再次打开LorPE看看就知道了,双转单后我们第一步就是要找Magic jump
2、CTRL+G 输入:GetModuleHandleA如下图所示
按确定来到下图↓:
我们在JE SHORT KERNEL32.7C80B6C4这一行下“硬件执行断点” ↓
下好硬件断点后SHIFT+f9断下之后看看情况如图↓:
跳转是没有实现的,因为这里用的是“标准版”的保护而并非“专业版”所以找Magic JUMP的返回时间肯定会有所不同(我是这样理解的)于是再SHIFT+f9 6次之后返回↓
▲ 上图所示跳转已实现,当然在之前也有出现跳转实现的时候,但返回是在系统的DLL,而这次是返回到了程序领空,所以在这里就是返回时机返回之后我们看一下代码↓:
分析得知第一个JE SHORT 00C56565 就是Magic JUMP 我们改它为JMP,改好之后ALT+M打开内存映像在00401000段F2下断↓
下好断后SHIFT+F9(记得把前面的断点全部删除)来到OEP↓
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
接下来就是dumped和修复了
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
3、dumped和修复(打开LordPE)
先修正一下(习惯)然后再“完整转存”这样就可以关闭LordPE
4、打开ImportRec我们分几步慢慢来如下图↓:
先用OD插件↓
这两步的目的是懒人不想去算OEP(因为在修复的时候在ImportREC里填的地址得减去基址)我们用插界就可以自动识别出来了这里是:42B52 接下来打开ImportREC图↓
填好之后点“自动搜索IAT”再点“获得输入信息”如下图↓
再点一下“无效函数”发现全部都是有效的(如果显示有无效的在穿山甲壳修复中可以直接CUT掉)接下来点“修复抓取文件”如下图选择我们完整转存后的那个文件↓
这样就完成了脱壳的过程接下来就看一下我们修复好的文件是否能运行
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
二、去校验(其实也就是一个脱壳后的错误提示,因为程序检测到壳被俺们脱掉了)↓
一运行程序就出了这么一个框,看来我们上面的脱壳工具是OK的如果是错误的话程序就不是这样的提示了,好我们OD载入来搞掉这鬼玩意。方法有很多种因为这是一个提示
框那么我们就可以想到MessageBoxA断点,然后找调用出错的地方,也可以查找一下出错的这窜字符(此例中是可以找到字符窜的,但并不是所有的程序都能找到字符窜哦)
在这里我就直接用断点插件下MessageBoxA断点,当然也可以在命令行输入BP MessageBoxA:↓
打开API断点工具在MessageBoxA前面点上点上勾确定这样就下好断点了,下好断之后运行程序这样就断下来了↓
看堆栈里就是我们之前运行程序出现的那窜提示了!我们ALT+f9返回找调用出错的地方(再次说明一下此例中可以查找到字符窜)当我们返回到这里的时候如下图↓:
这里返回到程序领空了我们CTRL+G输入0043B268处,经分析这里也不是关键的地方,如果修改跳转让其跳过的话程序会退出↓
再次向上返回经过几次跟踪返回后到来下图所示↓
这里就是关键的地方了上面的跳转是没有跳的,我们只要让这个跳转实现程序就可以正常运行了,当然你可以直接把JNZ改为JMP,我这里跟进上面的CALL进行修改↓
看上图代码红色的MOV EAX,ECX是我进行修改过的原来未修改的是mov eax,ebx,为什么要这样改呢这就是和标志位爆破程序原理一样,再看看寄存器ebx值为0接着下面
RENT 4返回难怪JNZ不会跳所以会有出错提示,我们改这里的目的就是为了让程序返回后的值不为零这样跳转就会跳了,至于为什么要MOV EAX,ECX而不用MOV EAX,1
当然这样付值也是可以的,破解方法很多的嘛,如果这里是破解程序而不是去校验的话,在SMC破解程序时mov eax,1这样修改的字节就太多了,而MOV EAX,ECX则只有一个
字节,这样可想而知了,而为什么不直接改那个JNZ跳转呢?如果这是一个有重启验证的程序破解,可能有一半的失败可能,这里只是一种良好的习惯的养成。修改完毕后另存一份
程序就可以正常运行了~~因为程序采用的是穿山甲的注册机制,壳脱掉了程序也就破解成功了。
―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
三、优化区段
为什么要优化区段呢?因为程序脱壳后有些区段是用不着的,这样会造成程序运行速度慢,占用系统内存和资源所以我们要进行优化打开区段优化工具载入脱壳及去校验后的程序↓
当然也可以LordPE工具来把这些区段删除也是一样的,在用LordPE优化清除区段后,要用它再行“重建PE”即可,优化区段后的如下图↓
至此工作全部结束,上图是清除无用区段后的图,这里我用另一个工具和用LordPE分别进行了比较,从上图所示用LordPE清除区段后再重建PE程序可以正常运行
但和原版的程序大小一样,最下面的那个由原来的大小变成了1.32M程序运行“飞速”呵呵
――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――
【版权声明】: 本文原创于PYG技术论坛, 转载请注明作者并保持文章的完整, 谢谢! 2007年04月25日 上午 09:25:13 |
|