- UID
- 57376
注册时间2008-11-1
阅读权限8
最后登录1970-1-1
初入江湖
该用户从未签到
|
【破文标题】一个游戏软件的算法分析
【破文作者】canyun
【作者邮箱】[email protected]
【作者主页】[email protected]
【破解工具】OD ,Peid
【破解平台】WINXP
【软件名称】笨笨鸟简体中文版
【软件大小】15.8M
【原版下载】http://www.onlinedown.net/soft/3886.htm
【保护方式】注册码
【软件简介】一个很好玩的桌面宠物!!有兴趣的可以下载看看
【破解声明】新年第一篇破文,希望大家支持
------------------------------------------------------------------------
【破解过程】
1,查壳ASPack 2.12 -> Alexey Solodovnikov,esp定律简单脱之,脱完发现是Borland Delphi 6.0 - 7.0
试着用dede,但老卡住,没办法,放弃dede
2,运行软件试注册,发现没任何提示
3,OD载入,用查看字符串法找到“感谢您注册笨笨鸟!”
明人一看就知道该怎么做了,
4,运行软件,试注册,断在如下代码,单步走会发现
0057F255 E8 3A3FEDFF call Unpack.00453194 判断注册码是否溢出
0057F25A E8 9D55E8FF call Unpack.004047FC ; 将假码转换成16进制
0057F25F 8B45 F8 mov eax,dword ptr ss:[ebp-8] ;段在这里,观查dword ptr ss:[ebp-8]的值,正是假码的16进制
0057F262 B9 BB050000 mov ecx,5BB
0057F267 99 cdq
0057F268 F7F9 idiv ecx ; 转换成16进制的假码除以5BB(1467)
0057F26A 81FA E6020000 cmp edx,2E6 ; edx存放的是上面那句除后的余数,然后和2E6(742)比较
0057F270 75 16 jnz short Unpack.0057F288 ; 不相等就没有任何反应
0057F272 A1 9C506600 mov eax,dword ptr ds:[66509C]
0057F277 E8 78EEF0FF call Unpack.0048E0F4
0057F27C B8 00F35700 mov eax,Unpack.0057F300 ; 感谢您注册笨笨鸟!
0057F281 E8 0E3FEDFF call Unpack.00453194
0057F286 EB 1B jmp short Unpack.0057F2A3
0057F288 8D85 E8FEFFFF lea eax,dword ptr ss:[ebp-118]
通过上面的分析,可得到注册码算法如下sn=x*1467+742 x为整数
本以为到这里就结束了,虽然提示感谢您注册笨笨鸟!,但还是没有注册成功
这时就要用到另一个字符串了“您已经注册了本软件,感谢您的大力支持!”,来到代码处
0057F349 E8 C6ECF0FF call Unpack.0048E014
0057F34E 8B45 FC mov eax,dword ptr ss:[ebp-4]
0057F351 E8 4EB1E8FF call Unpack.0040A4A4
0057F356 8BC8 mov ecx,eax
0057F358 8BC1 mov eax,ecx
0057F35A B9 D7040000 mov ecx,4D7
0057F35F 99 cdq
0057F360 F7F9 idiv ecx
0057F362 81FA E6020000 cmp edx,2E6
0057F368 75 47 jnz short Unpack.0057F3B1
0057F36A BA DCF35700 mov edx,Unpack.0057F3DC ; 您已经注册了本软件,感谢您的大力支持!
这个结构和上面那段代码是不是很像,唯一不一样的就是5BB换成了4D7(1239)
分析到这里,他的注册机制大致如下
sn=x*1467+742 sn=y*1239+742 (x,y为任意整数)
sn要满足着两个条件才行
所以注册码的算法转换为sn=m*1467*1239+742
VB注册机算法代码如下:
Private Sub Command1_Click()
Dim a, b As Long
a = Int(Rnd * 1180 + 1)
b = 1467*1239 * a + 742
Text1.Text = Trim(Str(b))
End Sub
------------------------------------------------------------------------
【破解总结】关于找按钮事件我还没发现什么方法,此方法有点笨,请高手指点
注册信息存放在config.ini里面的userid,将后面的值改为0即可反复研究
------------------------------------------------------------------------
【版权声明】破文是学习的手记,兴趣是成功的源泉;本破文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢! |
评分
-
查看全部评分
|