吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 11805|回复: 4
收起左侧

[原创] 一个特别的CM破解

[复制链接]
sunflover 发表于 2013-5-26 22:15
      
【文章标题】: 一个特别的CM破解
      
【文章作者】: sunflover
      
【作者邮箱】: sunflover454@gmail.com
            
【编写语言】: MFC
      
【使用工具】: OllyDbg
      
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
      
--------------------------------------------------------------------------------
      
【详细过程】
      
  拿到CM,看图标是MFC的默认图标,除了exe还有一个HardwareID.dll,运行如下,输入假码,点击验证,无错误提示。

11.jpg
      
关掉,载入ollydbg,查找ascii,结果如下:

222.png
      
也没有看到成功相关的字符串,但是我们发现有 c:\ ,dll,LoginDLL 字符串,一个CM有这些字符串就比较可疑了,双击倒数第三行,转到00401874 处,看看附近代码,

333.png
看到MFC字样了,“c:\”上面依次是FindResourceA,LoadResource,SizeofResource函数,
      
下面是 CreateFileA,WriteFile函数,已经很明显了,dll内容是以资源形式包含在exe中的,
      
运行的时候,释放到C:\,具体这个dll什么作用,我们还无法知道。
      
      
我们F9运行程序,弹出注册框,既然没有其他可用字符串作为参考,那么我们只能另想办法定位关键验证位置。
      
我首选想到的是GetDlgItemTextA和GetWindowTextA,对这2个API下断点,然后输入假码1234,点击验证按钮,程序在GetWindowTextA函数上断下,我们删除所有断点。
      
ALT+F9执行到用户代码,返回到00401327 处,我们发现此时ECX指向机器码。F8单步根,步过下面第一个call时,发现ECX指向机器码,继续F8单步,到系统领空的话就ALT+F9,跟不了几步就发现在取刚才获取的机器码,然后循环运算,堆栈出现可疑字符串。

444.png
      
在循环尾部下F2断点,即004016A3 处。然后F9运行,断下后,发现堆栈窗口的可疑字符串,我们记录一下
      
0012F898  04A90058  ASCII "429133863429133856429133904429133861429133887429133861429133860429133908429133856429133887429133858429133857429133859429133862429133887429133857429133860429133907429133908"
      
经测试,以上字符串为本机真码,下面我们继续,看看能否爆破。
      
      
我们继续F8单步跟踪,跟到004016B1 处,发现EAX指向可以字符串,ESI指向假码“1234”。
      
紧跟着就是假码与真码的比较了,
555.png

      
通过上面注释的分析,爆破的关键点就是运行到004016E1 时,修改eax为0,我们在此F2下断,F9运行,仍然没有正确提示。
      
      
看到下面的LoadLibraryA,GetProcAddress,FreeLibrary,DeleteFileA,我想到可能是临时生成的dll又进行了验证,好了,我们重新载入。F9运行到004016E1 时,修改eax为0,乘dll还没有被删除,我们再开一个ollydbg将它载入。查找ASCII,
      
Ultra String Reference
      
Address    Disassembly                               Text String
      
10001010   MOV EAX,z9dH8.10002138                    ¤
      
10001022   PUSH z9dH8.100017D8                       肛"
      
10001079   PUSH z9dH8.1000302C                       %d
      
100010FF   PUSH z9dH8.10003020                       Success!!!
      
100011D0   PUSH z9dH8.100011E0                       垢0
      
10001649   PUSH EBP                                  (Initial CPU selection)
      
看见Success!!!,我们双击那行转到,向上滚动,发现代码很像exe主程序:

666.png
      
      
貌似是一样的,不再作分析,
      
看到这里,我想爆破的方法就很多了,
      
我这样改的
      
004016DE       83D8 FF          SBB EAX,-1                  ;  eax=1
      
主程序这里,修改为sbb eax,eax;这样一来eax始终为0;
      
因为dll文件是资源,在主程序的.rsrc段搜索特征码1B C0 83 D8 FF 5E 5B 85 C0
      
,找到之后反汇编显示,ctrl+E,输入1B C0 90作同样处理,即sbb eax,eax
      
然后保存所有修改到crack.exe,发现运行后依然不成功,因为od保存,不同段它一次不能全部保存,显然我们修改的2个地方,一个是代码段,一个是资源段,我们需要分2次保存。即先修改一个地方,然后保存,再载入修改过的,再次修改,然后保存为cracked.exe,运行后,直接点验证,弹出成功对话框。
      
Cracked
      
---------------------------
      
Success!!!
      
---------------------------
      
确定   
      
---------------------------
      
      
【经验总结】: exe与dll两次验证是很不错的验证方法,如果验证方法不一样,那么就比较麻烦了。一个软件如果dll很多,可以考虑这张验证方法,但是对于CM,这个就暴露了。最重要的是CM作者@Rookietp的思想传达到了。  
      
--------------------------------------------------------------------------------
      
【版权声明】: 本文原创于逆缘论坛, 转载请注明作者并保持文章的完整, 谢谢!
      
      
                                                       2013年05月26日 PM
   

点评

同时希望楼主有其他好文章再次转来提供大家学习1  发表于 2013-5-26 23:06
标题是原创,落款是转帖,到底是什么...? 不过文章不错!  发表于 2013-5-26 22:53

免费评分

参与人数 2热心值 +2 收起 理由
Shark恒 + 1 不管怎样,只要能帮助他人就OK!
Smallhorse + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

混小子 发表于 2013-5-26 22:39
我还以为只要改主程序就可以的~
19nuclear91 发表于 2013-5-26 22:39
 楼主| sunflover 发表于 2013-5-26 22:45
19nuclear91 发表于 2013-5-26 22:39
火钳留名 感谢大牛分享

19少,收了我吧
小雨细无声 发表于 2013-5-26 22:47
高手呐,谢谢分享!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 15:26

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表