【新手必看!】对某CM的深度分析
本帖最后由 吾爱扣扣 于 2013-10-5 09:36 编辑由于CM是网上找的。。动画过程中可能会出现CM作者的QQ(并非扣扣的QQ),看在我录了这么久的份上,请管理见谅!需要教程中的工具话,点我传送!
教程内容:爆破+追码+追算法
【文章标题】: 对某CM的深度分析
【文章作者】: 吾爱扣扣
【下载地址】: 见帖子附件
【加壳方式】: 无
【编写语言】: Delphi
【使用工具】: OD,PEID,SPY
【操作平台】: Win7 32
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
大家好,今天我给大家带来一个教程。。算是对知识的一个巩固吧!
好,首先查壳。 无壳,会发现界面没有注册按钮之类的。。根据原帖的作者的话,注册成功会有提示。
但是注册失败不会有任何提示。我们发现用户名可以是字母和数字的任意组合(也可以是标点)
但是注册码只能是数字。。这点我们就要想到,会不会是由各种字符编码的运算来构成注册码的?
载入OD。没有有用的字符串。。我们F9 转到00401000搜索字符串。拉到最后发现可以字符串!
双进跟进可以明显的发现关键跳。。。这种方法太简单了。。我们先来爆破。直接nop掉!
我们不追求这种。。追码才是王道。。我们换种方法。如果作者把提示成功的字符串隐藏了或加密了呢?
第二种:
重载OD,运行脚本。F9。断下OK!F7。顺利来到段首!。。抱歉,刚刚去吃了中饭。。
现在继续!我们在关键call处下断F9。F7。所以ESI是我们的假码,EAX则是真码咯。
我们来试试!不对?转换成十进制!OK!
现在我们知道ESI的值就是真码!那么我们只需要找出算法即可制作注册机!
我们在关键call中F8 寻找寄存器中出现0001232B的时候!
重新来下。。我们看看注册码是怎么算出来的!
重载一下
004B3C2B 83E8 04 sub eax,0x4 //此处是关键仔细看!
我们可以看到EBX的值正是用户名第一个字符的十六进制ASCII值!!! 我们现在来验证一下EAX是否用来存放用户名长度
此时是长度是3,我们增加到4,增加到9时地址的值刚好是9!
所以此处一定是用来存放用户名长度的!
由此得知此CM的算法(用伪代码表示):
注册码=到十进制(用户名第一个字符的十六进制ASCII值 与 0x12345异或 + 用户名长度)
此公式中所有的常量和变量均为十六禁止格式,所以最后得出注册码要转换到十进制!
OK! 这样一来就可以做算法注册机和内存注册机了。。由于易语言本身有BUG,在进行编码转换时会有问题,所以我就不做了!
内存注册机的教程我之前出过,大家可以去我的空间找!
还有就是打补丁。。我来示范下
004B3AB5 /75 1A jnz short 小试牛刀.004B3AD1 ; 关键跳,改为je就不跳了
打开试试!OK! 完美!
那么教程到此结束!
--------------------------------------------------------------------------------
【版权声明】: 本文原创于吾爱扣扣, 转载请注明作者并保持文章的完整, 谢谢!
2013年10月04日 12:56:56
CM+脚本
教程下载地址:http://pan.baidu.com/s/19om2m
貌似那个SPY工具用不着了。。 沙发自己的!哼!这么好的帖子不评分木有小XX,你懂得! 前排支持..膜拜算法分析. 进入膜拜模式{:1_930:}{:1_931:}{:1_932:}{:1_928:} 我是第一个 第一个啊!!!这么近距离膜拜大牛!!! 额 我貌似被插楼了好遗憾的赶脚.... 我有小JJ~ 膜拜算法分析!