首页
社区
课程
招聘
[原创]脱按键精灵6.31.1602版UPX+PEBundle的壳
发表于: 2008-9-30 22:31 6510

[原创]脱按键精灵6.31.1602版UPX+PEBundle的壳

2008-9-30 22:31
6510
今天在玩一个小游戏,由于动作的重复感觉有点枯燥了,这时想到了按键精灵!在朋友共享的QQ网络硬盘里面下载了按键精灵6.31.1602版(好像是公开版的最新版)!打开后提示要更新,由于个人比较喜欢用新版本的,就确定了更新,点击了在线更新!不点还好,一点居然提示我为注册不能使用这个功能,然后出来一个注册对话框!!~~~而且还把程序退出了,闷又得让我再进一次!

    就在我正准备重新打开的时候,突然萌发出一个想破了他的想法(O(∩_∩)O哈哈~),想到后立刻就动手!

(不太会说明,请谅解)

~首先第一部当然是查壳了,拿出peid看了下,是PEBundle 2.0x - 2.4x-> Jeremy Collake的壳!

    然后就请OD载入他了

载入后提示:

---------------------------
压缩代码?
---------------------------
模块 '按键精灵' 的快速统计报告表明其代码段可能被压缩, 加密, 或包含大量的嵌入数据. 代码分析将是非常不可靠或完全错误的. 您仍要继续分析吗?
---------------------------
是(Y)   否(N)  
---------------------------

这里选择否,

进入后停在了:

 

00692000 >  9C              pushfd             ;停在了这里
00692001    60              pushad
00692002    E8 02000000     call    00692009   ;这里F7
 

 

首先隐藏OD,忽略所有异常,接着F8单步走

这里F8单步的话会发生错误,所以这里用F7跟进

00692002    E8 02000000     call    00692009   ;这里F7

跳到了这里>>

 

00692009    8BC4            mov     eax, esp       ;跳到了这里,继续F8
0069200B    83C0 04         add     eax, 4
0069200E    93              xchg    eax, ebx
 

 

 

然后继续F8走,遇到循环或者回跳就F4运行到下一条

然后一直到这里>>

 

00685000    9C              pushfd                 ;这里跟入口点一样00685001    60              pushad
00685002    E8 02000000     call    00685009       ;F7跟进
 

 

发现这里跟入口点一样,所以也同上,F8到

00685002    E8 02000000     call    00685009       ;F7跟进

这里的时候,F7跟进,跳到了这里>>

 

00685009    8BC4            mov     eax, esp         ;同上 继续F8单步走
0068500B    83C0 04         add     eax, 4
0068500E    93              xchg    eax, ebx
0068500F    8BE3            mov     esp, ebx
 

 

 

然后继续F8单步走,跟上面一样的,一直走到>>

 

006853A9    E8 B70A0000     call    00685E65      ;这里F7 F8都没影响
006853AE    0F83 A8000000   jnb     0068545C
 

 

这里我是按F8步过的,然后继续F8单步走>>

 

0068545C    C785 3D294000 0>mov     dword ptr [ebp+40293D], 1
00685466    61              popad           ;看到这一句说明离oep不远了
00685467    9D              popfd
00685468    68 F0876600     push    006687F0
0068546D    C3              retn
 

 

这里看到了popad,根据经验得知离oep不远了,在

0068546D    C3              retn

这一句返回后应该就是oep了。

返回到了>>

 

006687F0    60              pushad              ;返回到这里了,在这里脱壳就干掉了PEBundle
006687F1    BE 00105900     mov     esi, 00591000
006687F6    8DBE 0000E7FF   lea     edi, dword ptr [esi+FFE70000]
 

 

这里可以看出是UPX的入口点,我在这里脱了下壳,然后查壳,提示是UPX的壳,试着运行下,程序正常运行!既然PEBundle的壳搞定了,那么UPX的壳就容易了。用ESP定律,或者用前辈总结出来的经验一下就搞定了!

    接着,我就使用前辈的方法按Ctrl+F,输入命令popad→回车到了>>

 

00668967    61              popad             ;到了这里,我在这里下断点
00668968  - E9 FB67DFFF     jmp     0045F168
0066896D    0000            add     byte ptr [eax], al
0066896F    0000            add     byte ptr [eax], al
 

 

在00668967    61              popad 这里下断点F9运行后取消断点,然后F8再F8

 

0045F168    55              push    ebp          ;这里就是程序的oep了
0045F169    8BEC            mov     ebp, esp
0045F16B    6A FF           push    -1
 

 

就到了程序的oep了,之后在这里dump!

脱壳后检查,显示的Microsoft Visual C++ 6.0,脱壳成功,我再试了下运行,发现错误!

马上打开importREC1.6。运行importREC后在进程里面选择按键精灵6.exe的进程!再输入oep的地址,

这里的oep是0045F168,不过输入的时候只要输入5F168!然后点击 自动搜索IAT 再点击获取输入表,显示出来的输入表有一两个地方的为假,再点击显示非法函数,再右击已找到输入表函数里面被选定的地方右击,选择追踪层次1(分解) 提示没有处理的指示器,,。。不管了,我直接选择修复抓取文件,居然提示IAT依然是无效的,晕了,运行下刚修复的文件,还是提示错误。。。。不知道哪里错了!

      然后我又回到OD,在oep再试dump,不过这次选择的是下面那个Method2:Search DLL & API name string in dumped file(图中框出来的)



图片地址:upload/attach/200809/167872_67d71e23541530be.jpg

脱掉后再查壳,Microsoft Visual C++ 6.0 成功!!~

运行程序,= =||双击没反应,再次请出Import REConstructor修复,跟上面的方法一样(居然连提示也还是跟上面的一样,O_O )不管了,再次修复抓取文件,选择后面这次脱壳的程序,仍然提示IAT无效!修复后运行修复好的的程序,程序正常运行!

 
http://blog.sina.com.cn/s/blog_4d69d64d0100au7p.html

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 1564
活跃值: (3572)
能力值: ( LV13,RANK:420 )
在线值:
发帖
回帖
粉丝
2
好东西啊!正为这个壳烦恼呢!我顶了!
2008-9-30 22:53
0
雪    币: 346
活跃值: (1953)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
3
不错啊,一脱壳就能运行了吗?
2008-9-30 23:23
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4

脱第二层壳的时候要修复, 而且遇到了点麻烦   还望知道的指点下
2008-10-1 07:29
0
雪    币: 317
活跃值: (93)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
5
按键精灵第二层属于捆绑壳,如果用脱掉的话,那也就等于程序报废啦!而分离的过程至目前没有一篇讲解的!
2008-10-1 09:28
0
雪    币: 231
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
支持lz很详细,这个是比较麻烦。。。
2008-10-19 00:11
0
雪    币: 337
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
不行。不成功
2008-12-9 03:22
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
为什么我到现在都是一用OD载入就会自动关闭呢??
2009-2-12 19:33
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
我用peid v0.95检测按键精灵6.50.1937发现壳也是PEBundle 2.0x - 2.4x-> Jeremy Collake,直接用peid插件peid通用脱壳器脱壳成功,并自动使用imprec重建输入表成功,脱壳出来再用peid查看为Microsoft Visual C++ 6.0,运行正常,不知道这算脱壳成功了没有?  但是当我用od载入时却提示“模块'按键精灵'入口点超出代码范围(在PE文件头中指定),可能这是一个自解压或自修改文件,请在设置断点时记住这一点!” 按确定进去载入后,F9运行,地址71A26AAE    66:8916         MOV WORD PTR DS:[ESI],DX

处提示访问违规:正在写人到[00000000]-使用shift+F7/f8/f9来护理程序异常。不知道是怎么回事,新手啊,期待指点。谢谢
2009-3-25 17:02
0
雪    币: 31
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
看了第二层壳作了修改过的
2009-3-28 09:43
0
游客
登录 | 注册 方可回帖
返回
//