【文章标题】: 脱ASPack 2.12壳遇到的问题
【文章作者】: iawen
【作者邮箱】: 913221@163.com
【作者QQ号】: 160193626
【软件名称】: QQ聊天记录偷看器2007第二版
【软件大小】: 452KB
【下载地址】: 自己搜索下载
【加壳方式】: ASPack 2.12 -> Alexey Solodovnikov
【软件介绍】: 自己搜索一下
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
具体的流程如下:
1、查壳
拿起PEid,一看:ASPack 2.12 -> Alexey Solodovnikov
心想简单,不是那些变态的加密壳,呵!
2、用OD载入:
00532001 > 60 pushad
00532002 E8 03000000 call QQ聊天记.0053200A
00532007 - E9 EB045D45 jmp 45B024F7
0053200C 55 push ebp
0053200D C3 retn
0053200E E8 01000000 call QQ聊天记.00532014
00532013 EB 5D jmp short QQ聊天记.00532072
只是一般的加壳,没有变形,采用ESP定律法:
F8单步,查看ESP值:
ESP 0012FFA4
呵呵,下断:hr 0012FFA4,然后Shift+F9运行到此:
005323B0 /75 08 jnz short QQ聊天记.005323BA
005323B2 |B8 01000000 mov eax,1
005323B7 |C2 0C00 retn 0C
005323BA \68 2EAD4000 push QQ聊天记.0040AD2E //真实OEP
005323BF C3 retn
出来啦,push QQ聊天记.0040AD2E //真实OEP
单步来到OEP:
0040AD2E 55 push ebp ; (initial cpu selection)
0040AD2F 8BEC mov ebp,esp
0040AD31 6A FF push -1
0040AD33 68 306C4E00 push QQ聊天记.004E6C30
0040AD38 68 B4AE4000 push QQ聊天记.0040AEB4 ; jmp 到
0040AD3D 64:A1 00000000 mov eax,dword ptr fs:[0]
0040AD43 50 push eax
见此,猜测应该是VC写[不敢确认,经验太少]。可以脱了,先后用OD自带插件和LordPE分别脱了一下,然后用ImportREC_Fix修复,不知为什么,两个脱后的文件都无法运行!!
不知道是不是还有什么暗桩,哪位老大帮忙分析下??
注:同主程序还有一个DLL文件,也是加的同样的壳,但将之删除后或者脱壳,都对程序的运行没有什么影响!
看了看雪老大提供的帖子,我又将破解继续到底了:
采用了帖子的第3种方法,先用PEid的插件KANAL查看了一下:
CRC32 :: 0010A728 :: 0050A728
Referenced at 0040967F
MD5 :: 00006749 :: 00406749
The reference is above.
TEAN [16 rounds] :: 0000118E :: 0040118E
The reference is above.
此处,我们只关心CRC32,不知道为什么我向上跟时,没有跳转提示,所以我是Ctrl+G,跳转到参考点0040967F:
00409679 C1E8 08 shr eax,8
0040967C 8B1495 28A75000 mov edx,dword ptr ds:[edx*4+50A728]
00409683 33C2 xor eax,edx
00409685 41 inc ecx
00409686 3BCE cmp ecx,esi
00409688 ^ 7C E0 jl short 11.0040966A
0040968A 5F pop edi
0040968B 5B pop ebx
0040968C 5E pop esi
0040968D C3 retn
从函数返回,我向下跟踪:
00409714 8B9424 20010000 mov edx,dword ptr ss:[esp+120]
0040971B 83C4 08 add esp,8
0040971E 5F pop edi
0040971F 5E pop esi
00409720 5D pop ebp
00409721 8902 mov dword ptr ds:[edx],eax
00409723 5B pop ebx
00409724 81C4 00010000 add esp,100
0040972A C3 retn
继续到:
00405F16 8B15 28FC5000 mov edx,dword ptr ds:[50FC28]
00405F1C 8B4424 3C mov eax,dword ptr ss:[esp+3C]
00405F20 83C4 14 add esp,14
00405F23 3BD0 cmp edx,eax
00405F25 75 0A jnz short 11.00405F31
00405F27 C705 24FC5000 0>mov dword ptr ds:[50FC24],1
……
这一段代码里有很多CALL调用,我是同时在可疑的CALL上下断,然后按F9,看是否会跑飞!重点在两个之间的CMP等比较的语句和跳转语句,我在跑飞了几次之后,找到了这里:
00406075 E8 D8490000 call <jmp.&mfc42.#3790_CFile::GetStatus>
0040607A A1 2C004000 mov eax,dword ptr ds:[40002C]
0040607F 8B8C24 78020000 mov ecx,dword ptr ss:[esp+278]
00406086 5F pop edi
00406087 3BC1 cmp eax,ecx //关键点
00406089 5B pop ebx
0040608A 75 2A jnz short 11.004060B6
0040608C 8B4E 74 mov ecx,dword ptr ds:[esi+74]
0040608F 68 40A55000 push 11.0050A540 ; ASCII "-hide"
00406094 51 push ecx
00406095 FF15 08424E00 call dword ptr ds:[<&kernel32.lstrcmpi>] ; kernel32.lstrcmpiA
哈,就是这个:
00406087 3BC1 cmp eax,ecx //关键点
我将之改成:cmp eax,eax
保存,运行,OK了!!
没有什么技巧,简单的问题也花了一个下午的时间,^@^,主要是靠调试时留意的一些信息。
软件的注册码是利用硬盘的ID来生成的,其实可以在比较的位置爆破,运行成功后就会在注册表生成正确的注册码,那时再运行原程序一样OK,没有提示了!
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2007年09月01日 18:57:44
[课程]FART 脱壳王!加量不加价!FART作者讲授!