-
-
[旧帖] [原创]多层次破解某象棋软件 0.00雪花
-
发表于: 2011-1-20 18:31 5282
-
多层次破解某象棋软件(申请邀请码)
中国象棋V2.0
软件大小:908KB
软件语言:中文
软件类别:国内/共享版
运行环境:win9x/me/NT/XP/2003
Download:网上搜索
首先说明,本人刚学破解几个月的菜鸟,感觉破解这门学问太深了,也想通过论去继续学习,模访网上的文章写的,个人感觉内容还是很丰富的,希望大家不要见笑。
方法一:清除软件使用次数限制(两种途径)
首先查壳,运行PEID,载入中国象棋V2.0,无壳,如下图:
运行软件,启动时有注册提示窗口和30天试用信息,如下图:
点击现在注册,注册软件,发现有错误提示窗口,如下图:
点击开始—运行,输入regedit,打开注册表,点击编辑—查找,输入chess:
点击查找下一个,F3继续,来到下图处:
观察DayOfUsed键的数据似乎与时间有关,将时间修改为2011.1.9试一下,在DayOfUsed键上单击鼠标右键—修改,2011.1.19修改为2011.1.9:
重新运行软件,发现软件使用天数变为11天,
可以肯定,该键值的数据就是计算使用天数的基准日期,将2011.1.19改为3011.1.19,可以达到永久试用的目的。
还有一种思路也可达到永久试用的目的,既然软件有计算试用天数的程序,我们只要跳过这部分不就可以达到永久试用的目的吗?
OD载入软件,既然计算试用天数要用到注册表中的基准时间,可下bp RegOpenKeyExA断点,按F9运行,观察堆栈,F9继续运行,直到出现GZ_POWER_CHESS注册表项,如图:
Alt+F9执行到用户代码,
00408BAA 8B4424 10 mov eax,dword ptr ss:[esp+10] ,返回到此处
00408BAE 3BC3 cmp eax,ebx
00408BB0 0F84 FB000000 je ChineseC.00408CB1 ,关键跳,修改此处正好跳过计算试用天数
00408BB6 8D4C24 14 lea ecx,dword ptr ss:[esp+14]
00408BBA 51 push ecx
00408BBB 68 3F000F00 push 0F003F
00408BC0 53 push ebx
00408BC1 68 20054400 push ChineseC.00440520 ; set
00408BC6 50 push eax
00408BC7 FFD6 call esi
00408BC9 8B4424 14 mov eax,dword ptr ss:[esp+14]
00408BCD 3BC3 cmp eax,ebx
00408BCF 0F84 DA010000 je ChineseC.00408DAF
00408BD5 8D5424 2C lea edx,dword ptr ss:[esp+2C]
00408BD9 8D4C24 48 lea ecx,dword ptr ss:[esp+48]
00408BDD 52 push edx
00408BDE 51 push ecx
00408BDF 53 push ebx
00408BE0 53 push ebx
00408BE1 68 14054400 push ChineseC.00440514 ; dayofused
00408BE6 50 push eax
00408BE7 C74424 48 00020>mov dword ptr ss:[esp+48],200
00408BEF C74424 44 1E000>mov dword ptr ss:[esp+44],1E
00408BF7 FFD5 call ebp
00408BF9 85C0 test eax,eax
00408BFB 75 1A jnz short ChineseC.00408C17
00408BFD 51 push ecx
00408BFE 8D5424 4C lea edx,dword ptr ss:[esp+4C]
00408C02 8BCC mov ecx,esp
00408C04 896424 38 mov dword ptr ss:[esp+38],esp
00408C08 52 push edx
00408C09 E8 9CB30200 call <jmp.&MFC42.#537>
00408C0E 8B4C24 20 mov ecx,dword ptr ss:[esp+20]
00408C12 E8 F9080000 call ChineseC.00409510
00408C17 8B5424 14 mov edx,dword ptr ss:[esp+14]
00408C1B 8D4424 2C lea eax,dword ptr ss:[esp+2C]
00408C1F 8D4C24 48 lea ecx,dword ptr ss:[esp+48]
00408C23 50 push eax
00408C24 51 push ecx
00408C25 53 push ebx
00408C26 53 push ebx
00408C27 68 08054400 push ChineseC.00440508 ; chesscount
00408C2C 52 push edx
00408C2D FFD5 call ebp
00408C2F 85C0 test eax,eax
00408C31 75 18 jnz short ChineseC.00408C4B
00408C33 8D4424 48 lea eax,dword ptr ss:[esp+48]
00408C37 50 push eax
00408C38 FF15 2C874300 call dword ptr ds:[<&MSVCRT.atol>] ; msvcrt.atol
00408C3E 8B4C24 20 mov ecx,dword ptr ss:[esp+20]
00408C42 83C4 04 add esp,4
00408C45 8981 C4000000 mov dword ptr ds:[ecx+C4],eax
00408C4B 8B4C24 14 mov ecx,dword ptr ss:[esp+14]
00408C4F 8D5424 30 lea edx,dword ptr ss:[esp+30]
00408C53 8D8424 68020000 lea eax,dword ptr ss:[esp+268]
00408C5A 52 push edx
00408C5B 50 push eax
00408C5C 53 push ebx
00408C5D 53 push ebx
00408C5E 68 FC044400 push ChineseC.004404FC ; registernum
00408C63 51 push ecx
00408C64 FFD5 call ebp
00408C66 3BC3 cmp eax,ebx
00408C68 74 14 je short ChineseC.00408C7E
00408C6A 8B5424 10 mov edx,dword ptr ss:[esp+10]
00408C6E 8B35 14804300 mov esi,dword ptr ds:[<&ADVAPI32.RegCloseKey>] ; ADVAPI32.RegCloseKey
00408C74 52 push edx
00408C75 FFD6 call esi
00408C77 8B4424 14 mov eax,dword ptr ss:[esp+14]
00408C7B 50 push eax
00408C7C EB 31 jmp short ChineseC.00408CAF
00408C7E 8B4424 14 mov eax,dword ptr ss:[esp+14]
00408C82 8D4C24 28 lea ecx,dword ptr ss:[esp+28]
00408C86 8D9424 68010000 lea edx,dword ptr ss:[esp+168]
00408C8D 51 push ecx
00408C8E 52 push edx
00408C8F 53 push ebx
00408C90 53 push ebx
00408C91 68 F0044400 push ChineseC.004404F0 ; username
00408C96 50 push eax
00408C97 FFD5 call ebp
00408C99 3BC3 cmp eax,ebx
00408C9B 74 2D je short ChineseC.00408CCA
00408C9D 8B4C24 10 mov ecx,dword ptr ss:[esp+10]
00408CA1 8B35 14804300 mov esi,dword ptr ds:[<&ADVAPI32.RegCloseKey>] ; ADVAPI32.RegCloseKey
00408CA7 51 push ecx
00408CA8 FFD6 call esi
00408CAA 8B5424 14 mov edx,dword ptr ss:[esp+14]
00408CAE 52 push edx
00408CAF FFD6 call esi
00408CB1 8D4C24 18 lea ecx,dword ptr ss:[esp+18]
00408CB5 C78424 70040000>mov dword ptr ss:[esp+470],-1
在00408BB0这行单击鼠标右键,选择汇编,将je修改为jmp,
在汇编窗口单击鼠标右键,选择复制到可执行文件—所有修改,然后选择全部复制,
单击鼠标右键,选择保存文件,OK!软件可以永久试用,不信的话可以修改注册表DayOfUsed项的数据,发现试用天数不变。
方法二:爆破
既然注册时有错误提示,可以通过查找字符串来查找按钮事件,OD载入软件
在汇编窗口单击鼠标右键,选择Ultra字符串参考—1.查找ASCII,
双击“姓名和注册码不匹配,注册不成功!”这一行,来到主程序窗口,
往上观察,发现了一些关键东西:
00430B67 E8 24E9FFFF call ChineseC.0042F490 关键CALL
00430B6C 84C0 test al,al 关键比较
00430B6E 6A 40 push 40
00430B70 68 90044400 push ChineseC.00440490 ; gzpower chess
00430B75 75 21 jnz short ChineseC.00430B98 关键跳
00430B77 68 9C1A4400 push ChineseC.00441A9C ; 姓名和注册码不匹配,注册不成功!
00430B7C 8BCE mov ecx,esi
在00430B70这行单击鼠标右键,选择汇编,将jnz修改为jz,在汇编窗口单击鼠标右键,选择复制到可执行文件—所有修改,然后选择全部复制,
单击鼠标右键,选择保存文件。
重启中国象棋V2.0,仍有注册提示窗口,但可以注册成功,
重启后仍然是未注册版,因些必须去掉提示注册的NAG窗口中。
OD载入软件,用F12暂停法去掉NAG窗口,F9运行软件,然后到反汇编窗口,按F12键,Alt+F9执行到用户代码,
00408499 这一行是调用注册提示的NAG窗口, 往上查找,发现00408461这一行正好跳过调用注册提示的NAG窗口,在00408461这一行单击鼠标右键,选择汇编,将jnz改为jmp,
在汇编窗口单击鼠标右键,选择复制到可执行文件—所有修改,然后选择全部复制,然后单击鼠标右键,选择保存文件。
重启中国象棋V2.0,没有注册提示窗口,直接进入软件,如下图:
仍然有未注册字样,但不影响使用,也可将未注册字样去掉,OD重新载入修改后中国象棋V2.0,在汇编窗口单击鼠标右键,选择Ultra字符串参考—1.查找ASCII,
双击“(未注册)”这一行,来到主程序窗口,
从004086C6这一行往上观察,发现004086C4这一行跳转正好跳过“未注册”字样这一行,在004086C4这一行单击鼠标右键,选择汇编,将jnz改为jmp,
在汇编窗口单击鼠标右键,选择复制到可执行文件—所有修改,然后选择全部复制,然后单击鼠标右键,选择保存文件。
重启中国象棋V2.0,直接进入软件,且没有“未注册”字样。OK!现在就是正式用户了!
方法三:追踪注册码,制作内存注册机
根据前文分析,00430B67这一行是关键CALL,用OD载入中国象棋V2.0,Ctrl+G输入00430B67
点击确定,来到00430B67这一行,F2下断点,
F9运行软件,输入注册名和注册码,
点击“注册”,软件被OD断下来, F8单步,观察堆栈窗口,
正在进行真假码对照,复制"9eb9a33259ad034db8b0a8462dac9aee"字符串进行注册,注册成功。
下面制作内存注册机,见上面分析,软件被OD断在00430B67这一行,F7单步进入,F8单步走,来到0042F4A0这一行,观察寄存器窗口,
EAX寄存器中就是真的注册码,打开keymake注册机,选择其它—内存注册机,浏览选择中国象棋ChineseChess应用程序,点击添加,在是中断位置填写0042F4A0,中断次数位置填写1,第一字节位置填写FF,指令长度位置填写6,
选中“保存下列信息为注册码”,选中内存方式,寄存器方式选择EAX,然后点击添加,关闭添加窗口,点击生成按钮,
选择界面三,点击确定,保存注册机。运行内存注册机,注册码会自动出现,OK!
方法四:算法分析,写注册机
目前正在学习中,有点难度。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)