首页
社区
课程
招聘
[求助]脱ASPack 2.12壳遇到的问题
发表于: 2007-9-1 18:58 4899

[求助]脱ASPack 2.12壳遇到的问题

2007-9-1 18:58
4899
【文章标题】: 脱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

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 44229
活跃值: (19965)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
如果脱壳没问题,先判断一下是不是自校验。
参考文章:
标 题: 【原创】常见自校检分析实例
作 者: laomms
时 间: 2006-07-01,17:54
链 接: http://bbs.pediy.com/showthread.php?t=28298
2007-9-1 20:19
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
哇,我也刚入门啊!
用了好几种方法了脱不到!
使出了我学的东西也修复不到啊....啊书到用时方恨少!!!
加我QQ:大家交流一下!
2007-9-1 20:34
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
忘记了写QQ了~~~495163836
2007-9-1 20:39
0
雪    币: 359
活跃值: (430)
能力值: ( LV9,RANK:150 )
在线值:
发帖
回帖
粉丝
5
老大,谢谢啦,终于解决了,就是自校验问题。
没有先在论坛搜索,给你添麻烦了,^@^……

另,按第2种方法测试了一下,不合,我是用PEid的插件确认的!
2007-9-1 21:11
0
游客
登录 | 注册 方可回帖
返回
//