【图解】QQ金牌网吧奖励算法分析 + delphi算法注册机,送给想要学习算法分析的朋友
本帖最后由 西域小车 于 2011-2-15 01:48 编辑【文章标题】: 【图解】QQ金牌网吧奖励算法分析 + delphi算法注册机,送给想要学习算法分析的朋友
【文章作者】: 西域小车
【软件名称】: QQ金牌网吧奖励
【下载地址】: 最好还是去下载作者所谓的正版。http://good.gd/959041.htm 报毒问题,自己判断
【加壳方式】: 无壳
【编写语言】: Microsoft Visual C++ 6.0
【使用工具】: OllyDbg、算法辅助计算工具
【软件介绍】: 能够在玩QQ游戏时获得金牌网吧的奖励。
【说 明】: 最近论坛的QQ金牌网吧奖励这个工具很火爆啊,于是分析下算法,算法不难,希望能够带领想学习算法而不知从何入手的朋
友们入门。我也是从这两篇帖子发现这个工具蛮火爆,呵呵
http://www.52pojie.cn/thread-79395-1-2.html
http://www.52pojie.cn/thread-78120-1-1.html
开始之前,先说几句。。
为什么要图解。。因为本文是送给想要学习算法分析却不知道该从哪里下手的朋友们的。。
希望能够成为一篇带领朋友们入门算法分析的文章。
所以既然是送给新手朋友们的。。所以高手飞过啦~
不过还是欢迎高手们点评一二。。
话不多说,咱们开始。。
===========================================================
算法很简单,如果会爆破追码的同学。。看完了应该就学会了。。
一、看懂本文所需要了解的知识
(1)浮点寄存器
看图,用箭头指出的ST0...ST7就是浮点寄存器,本文只用到了ST0.
(2)汇编指令
fld操作数 //将操作数装入到浮点寄存器ST(0),另外一个理解就是把操作数转换为浮点型。(浮点型数就可以理解为小数吧。。)
fild 操作数 //也是将操作数装入到浮点寄存器ST(0)
fstp 操作数//将操作数从寄存器放入到内存地址中。
fmul 操作数 //将浮点寄存器ST(0)的数字乘以操作数,并将结果保存于ST0中
fadd 操作数 //将浮点寄存器ST(0)的数字加上操作数,并将结果保存于ST0中
fsub是相减。。fdiv是相除。。用法与上面相同本文未涉及到,仅作了解。
二、正式开张
(1)用OD载入程序,搜索ASCII,找到“对不起,注册码错误”,如图:
(2)双击,来到反汇编窗口,注意箭头指的地方,那个“>”表示从一个跳转跳到这里,
单击一下,如图所示:
注意箭头所指“跳转来自004011B9”,这个信息窗口是分析算法比较重要的一个地方,要始终注意这里。我们到004011B9来看一下,
这个应该就是关键跳转了吧。
向上走,来到段首"push ebp"下断,F9运行。
在弹出的程序窗口中随便输入个注册码,点击注册,程序被断下。
我的机器码:-2141975866,我们可以追下注册码,是-686866693625
向下单步,来到这里。发现了没?我们刚才讲的那些算法的汇编指令出现了,那这一块应该就是算法部分了吧,仔细看信息窗口,机器码出现,像这些指令是浮点型的运算指令,因而这是浮点运算。
接下来就可以对照着我刚才讲的汇编指令进行运算了,我来带着大家算一遍。
00401121|.DB45 F4 fild ;机器码放入ST0寄存器,如图:看箭头
00401124|.DD5D F4 fstp qword ptr ss: ;将机器码放到0012F234
00401127|.DD45 F4 fld qword ptr ss: ;再次装入ST0寄存器
0040112A|.DC0D 75A94700 fmul qword ptr ds: ;
到这里了,fmul是浮点相乘怎么判断这个机器码是与哪个数字相乘呢?看信息窗口(箭头所指),找到0047A975中的数字:
看见了吧,这里是与321相乘。来算一下,-2141975866×321=-687574252986
继续单步
00401130|.DD5D EC fstp qword ptr ss: ;将结果弹出
00401133|.DD45 EC fld qword ptr ss: ;再将结果压入
00401136|.DC05 7DA94700 fadd qword ptr ds:
这是加法算法,同样看信息窗口:
很明白,是加上707559361。在计算下,-687574252986+707559361=-686866693625
结果存入了ST0寄存器,如图:
细心的朋友应该发现了,这个数值就是我们刚才追出的注册码。好了,分析结束。
三、算法总结
算法分析完了,咱们来总结一下算法。
注册码=机器码×321+707559361
四、Delphi算法注册机
var s:real; //注意这里的数据类型是real,有的朋友会问,不是int吗?不行,因为我们计算出来的结果是超出了整型的范围的,因此要用实型,因而下面应是浮点运算。
begin
s:=strTofloat (edt_jqm.Text); //将编辑框的字符型转换为浮点型
s:=s*321+707559361; //执行算法
edt_zcm.Text:=FloatToStr (s); //将注册码的编辑框的内容改为字符型的s
五、声明
终于写完了,文章仅供技术交流使用,不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。
作者:西域小车。转载时请注明出自吾爱破解论坛。鄙视复制+粘贴=原创的人。。第一次写文,如有哪里出错,敬请见谅。
希望想要学习算法分析的朋友能够通过本文入门。
不错 收藏慢慢研究 {:1_918:}真的和不错 学习一下!!!浮点算法 高手啊,學習下,很詳細 不错啊,这种写作的模式很好的,通俗易懂。 学习浮点算法,完全不懂~ 不错啊。支持下。 {:1_919:}支持楼主哦,等我学会我也要发帖 向楼主学习算法。。