心野的小巢

  IT博客 :: 首页 :: 联系 :: 聚合  :: 管理
  36 Posts :: 51 Stories :: 1305 Comments :: 0 Trackbacks

 本来没想破它的,只是在做另一个程序的破解补丁的时候发现应用程序图标不好看,因此到霏凡下载站去下了一个可编辑ico图标的软件supericon,实际上已经有人破过了,我闲得无聊再来一次。废话少说,简要记录一下破解过程。
 安装好之后启动程序,发现有30天的试用期。用PEID查了一下,是用pecompact加的壳,调出看雪论坛的破解宝典,搜索了一下,可以用简单的用esp定律脱壳。脱壳之后再查,delphi程序,正合我的胃口啊。用DeDe反汇编,一时也没看出啥,再用W32dsm8.93反编译看了一下,字符串列表中有“已注册”字样,爽啊。再在DeDe中找到对应的引用地址,是在对话框的formcreate函数中,再向上一看,瞄出程序有一关键跳转,即判断[eax+114]所指向的值是否为0,不为0则是注册版。接下来的工作就是看这个[eax+114]所指向的注册标志在程序中是何时赋的值。
 用OD调试脱壳后的程序,先在对话框的formcreate函数上下断点,记下[eax+114]代表的内存值,重新载入,在主窗口的formcreate函数处下断(否则就会发现[eax+114]所指向的内存未分配),然后在[eax+114]处下内存访问断点(初始值不为0,因此程序运行的时候肯定修改了它),F9运行,哈哈,没一会程序就断下了,按Alt+F9返回主程序模块,此时可以看出[eax+114]处的值已经变为0了,强制修改为1,运行,OK,程序变为注册版了,由此判断其它地方未修改其值。反复查看给[eax+114]赋值的函数,水平有限没看出啥名堂(初步估计是在类的构造函数中完成的),因此只好另想其它的修改方法,最终我采用的方法:在主程序给[eax+114]赋值后,让其jmp到我写的代码处,重新给其赋值,之后再回到主程序执行。
 以上只是简要破解过程,实际上还是走了不少弯路的。
 备份一下patch代码:
  //005ddc22(对应文件地址:1ddc22)
  jmp 005e763e(对应文件地址:1e763e)

  //5e763e
  mov edx,dword ptr ds:[5EBDA8]
  mov dword ptr ds:[edx],eax
  mov byte ptr ds:[eax+114],1
  jmp 005ddc2a

posted on 2006-04-16 19:00 心野 阅读(348) 评论(0)  编辑 收藏 引用 所属分类: 软件逆向手记
只有注册用户登录后才能发表评论。