首页
社区
课程
招聘
[原创]一个软件的脱壳、附加数据处理及破解的过程
发表于: 2010-12-7 14:03 7530

[原创]一个软件的脱壳、附加数据处理及破解的过程

2010-12-7 14:03
7530
    前段时间,下载了一个软件(见附件),是个智能手机的商业计划书,点击运行,看了一段时间后,出现一个对话框,上面提示:

    预览时间结束,您需要 输入密码 才能继续浏览。

    免费获取密码的方式:
    第一步:注册成为论坛用户
    第二步:访问以下地址网页,申请信息认证
    第三步:访问以下地址网页,获取密码

    正准备注册,突然想到,为何不将它破解?于是使用PEID先查壳:
    Upx 0.89.6-1.02/1.05 – 1.24(delphi) stub -> markus & laszlo [overlay]

      于是调入OD,先进行脱壳,脱壳过程不再细说,一直使用F8,碰到向上的跳转则在下个指令处使用F4跳过,最后来到:
    004C1625          61                        popad
      004C1626          8D4424 80                 lea eax,dword ptr ss:[esp-80]
      004C162A          6A 00                     push 0
      004C162C          39C4                      cmp esp,eax
      004C162E        ^ 75 FA                     jnz short 智能手机.004C162A
      004C1630          83EC 80                   sub esp,-80
      004C1633        ^ E9 686CFDFF               jmp 智能手机.004982A0

      004982A0就是OEP了,F8下一步到达:
    004982A0          55                        push ebp
      004982A1          8BEC                      mov ebp,esp
      004982A3          83C4 F0                   add esp,-10
      004982A6          B8 A07F4900               mov eax,智能手机.00497FA0
      004982AB          E8 48E7F6FF               call 智能手机.004069F8
      004982B0          A1 5CB34900               mov eax,dword ptr ds:[49B35C]
      004982B5          8B00                      mov eax,dword ptr ds:[eax]
      004982B7          E8 9C1EFDFF               call 智能手机.0046A158

      熟悉DELPHI的人一看就知道这是DELPHI程序的入口特征了。然后使用LOADPE脱壳,修正文件大小,完整脱壳的步骤不必细说;脱壳完成后,使用importREC_Fix进行修复,这个过程也很顺利,也不详细说描述。修复完成后,运行程序,不妙,提示:“文件已经破坏,无法播放”。

    再回到刚开始用PEID查壳的地方,看到什么:Upx 0.89.6-1.02/1.05 – 1.24(delphi) stub -> markus & laszlo [overlay]------------------ [overlay]已经告诉我们了,有附加数据。再看脱壳后的文件大小:804 KB,原文件大小:905 KB,脱壳后的文件比原文件还小,这清楚不过了,要处理附加数据。

    附加数据的一般处理方法:原程序最后一个区段的ROFFSET+RSIZE就是附加数据的起始地址!使用PEID查看加壳程序的区段:
 
        

    起始地址=0003FC00+00004000=00043C00,使用WINHEX拷贝吧。
    用WINHEX打开加壳的原程序,找到00043C00,从这里最末尾的数据全部复制(要定义块的开始和结束),再用WINHEX打开脱壳修复后的程序,拉到文件的最后,粘贴(WINHEX的用法自己找资料学习哦)!!!然后保存成另外一个名字吧。
    运行最后修复的程序,OK了,用PEID查:Borland Delphi 6.0 - 7.0 [Overlay]。

    最后一步,破解。破解的思路是什么呢?常规的方法是在注册窗口中输入用户名和密码后,根据提示进行跟踪算法或者暴力破解,我这里采用了另外一个方法。因为我注意到运行一段时间后才出现那个注册窗口,也在那个软件压缩包中的一个文件里找到这么一段话:
   “本EXE文档是由 XX设计天下网WWW.XXXX.COM  制作的。用户可预览100s,预览结束后,需要输入密码才能继续浏览。”
    猜想程序里一定有个定时器,定时器的时间一到就会触发一个函数提示注册,那只要找到这个函数的地址,将第一条指令改成C3(RETN),不就达到目的了么?!怎么找到这个函数的地址呢?对于DELPHI程序,亮出DEDE利器吧。

    用DEDE载入脱壳修复后的文件,在过程标签里找到playtimeTIMER事件,如下图:
 
    

    用OD载入脱壳修复后的文件,CTRL+G输入:004962E8,看到:
    004962E8          55                        push ebp
      004962E9          8BEC                      mov ebp,esp
      004962EB          33C9                      xor ecx,ecx

      呵呵,什么也不要再想了,将第一条指令:55 改成 c3吧,保存。

    运行,一切搞定。感谢黑鹰。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 205
活跃值: (49)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
这程序恶心啊。。

把pdf释放到local settings\temp\rartmp\pdf..\里面,然后监视,只要用户打开temp目录,自动给关了~WINHEX搜索功能也给屏蔽了~

刚才试了,还可以这样:
下CreateFileW和WriteFile断点,待其把文件解密完成后,从local settings\temp\rartmp\pdf..\把解密后的PDF拷贝出来,一样用~
2010-12-7 17:43
0
雪    币: 73
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
想请教下,你第一次是怎么发现它把文件释放到local settings\temp\rartmp\pdf..\里面的?
2010-12-8 10:37
0
游客
登录 | 注册 方可回帖
返回
//