今天在玩一个小游戏,由于动作的重复感觉有点枯燥了,这时想到了按键精灵!在朋友共享的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
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课