TA的每日心情 | 开心 2015-8-23 23:49 |
---|
签到天数: 27 天 [LV.4]偶尔看看III
|
发表于 2010-7-14 10:55:50
|
显示全部楼层
本帖最后由 GGLHY 于 2010-7-14 14:21 编辑
CRC校验失败,有调试服务存在
005182B1 48 dec eax
005182B2 75 08 jnz short 005182BC
005182B4 FFB5 56D34000 push dword ptr [ebp+40D356]
005182BA EB 1C jmp short 005182D8
005182BC 40 inc eax
005182BD 75 08 jnz short 005182C7
005182BF FFB5 3ED34000 push dword ptr [ebp+40D33E]
005182C5 EB 11 jmp short 005182D8
005182C7 40 inc eax
005182C8 75 08 jnz short 005182D2
005182CA FFB5 4ED34000 push dword ptr [ebp+40D34E]
005182D0 EB 06 jmp short 005182D8
005182D2 FFB5 52D34000 push dword ptr [ebp+40D352]
005182D8 6A 00 push 0
005182DA FF95 E8D24000 call dword ptr [ebp+40D2E8]
005182E0 8B85 F2BA4000 mov eax, dword ptr [ebp+40BAF2] ; kernel32.ExitProcess
用脱壳机脱掉。
一、去注册NAG:
用F12的方法,可以来到:
0048697C . 803D 64A64800>cmp byte ptr [48A664], 0 ***这里的变量很可疑。经观察发现下面跳的话就不会出现注册NAG
00486983 . 74 16 je short 0048699B
00486985 . C605 64A64800>mov byte ptr [48A664], 0
0048698C . A1 14AA4800 mov eax, dword ptr [48AA14]
00486991 . 8B00 mov eax, dword ptr [eax]
00486993 . 8B10 mov edx, dword ptr [eax]
00486995 . FF92 D8000000 call dword ptr [edx+D8]
0048699B > C3 retn
所以,改动方法为:
(1)cmp byte ptr [48A664], 0
改为
cmp byte ptr [48A664], 1
(2)00486983 . 74 16 je short 0048699B
改为
00486983 . 74 16 jmp short 0048699B
OK,经测试,去注册NAG成功!
参考位于 CrazyTet:.WWPACK 于 0048A664
地址 反汇编 注释
0048697C cmp byte ptr [48A664], 0 (初始 CPU 选择)
00486985 mov byte ptr [48A664], 0 ds:[0048A664]=01
二、去启动时tip的NAG
同样用F12,在段首下断点,会停在:
0044A900 /$ 55 push ebp ***ebp=0012F430
本地调用来自 0044AAED, 00477D23, 00477DB3, 00477F60, 0047805C, 00478DA4, 004797D0, 00479833, 00479864, 00479931, 0047BD86,
0047C143, 0048184C, 00481E45, 00482FF1, 00485DA2, 00486107, 004863E9, 00486A68, <模块入口点>+13D
同时看堆栈:
0012F410 0047BD8B 返回到 CrazyTet.0047BD8B 来自 CrazyTet.0044A900
0047BD28 |. 8B12 mov edx, dword ptr [edx]
0047BD2A |. 3A42 64 cmp al, byte ptr [edx+64]
0047BD2D |. 75 6C jnz short 0047BD9B ; ***这里看看,改为JMP可以去掉提示未注册版本的NAG
0047BD2F |. 8B83 E0020000 mov eax, dword ptr [ebx+2E0]
0047BD35 |. 8B10 mov edx, dword ptr [eax]
0047BD37 |. FF92 B4000000 call dword ptr [edx+B4]
0047BD3D |. 84C0 test al, al
0047BD3F |. 75 5A jnz short 0047BD9B ; ***还有这里
0047BD41 |. 6A 00 push 0
0047BD43 |. 8D4D FC lea ecx, dword ptr [ebp-4]
0047BD46 |. A1 60AA4800 mov eax, dword ptr [48AA60]
0047BD4B |. 8B00 mov eax, dword ptr [eax]
0047BD4D |. BA CCBD4700 mov edx, 0047BDCC ; ASCII "r12"
0047BD52 |. E8 8D38F9FF call 0040F5E4
0047BD57 |. 8B45 FC mov eax, dword ptr [ebp-4]
0047BD5A |. E8 7181F8FF call 00403ED0
0047BD5F |. 50 push eax
0047BD60 |. 8D4D F8 lea ecx, dword ptr [ebp-8]
0047BD63 |. A1 60AA4800 mov eax, dword ptr [48AA60]
0047BD68 |. 8B00 mov eax, dword ptr [eax]
0047BD6A |. BA D8BD4700 mov edx, 0047BDD8 ; ASCII "m10"
0047BD6F |. E8 7038F9FF call 0040F5E4
0047BD74 |. 8B45 F8 mov eax, dword ptr [ebp-8]
0047BD77 |. E8 5481F8FF call 00403ED0
0047BD7C |. 8BD0 mov edx, eax
0047BD7E |. A1 74AA4800 mov eax, dword ptr [48AA74]
0047BD83 |. 8B00 mov eax, dword ptr [eax]
0047BD85 |. 59 pop ecx
0047BD86 |. E8 75EBFCFF call 0044A900
0047BD8B |. B2 01 mov dl, 1 ; ***返回到这
0047BD8D |. 8B83 E0020000 mov eax, dword ptr [ebx+2E0]
0047BD93 |. 8B08 mov ecx, dword ptr [eax]
0047BD95 |. FF91 B8000000 call dword ptr [ecx+B8]
0047BD9B |> 33C0 xor eax, eax
方法:
0047BD2D |. 75 6C jnz short 0047BD9B
将jnz改为JMP
可以去掉提示未注册版本的NAG
不过这样仅仅是把启动时候的NAG给去掉了,如果在程序的界面上点“tip”,人人会弹出NAG的。好,我们接着看:0047BD2A处的cmp al, byte ptr [edx+64],这显然是对变量的值进行比较。我们右键,查找所有命令,全部将其F2,(我这里找到了3个)运行,将下面的条件跳跳转全部改为JMP。经试验,成功!
三:文件名校验:
用API插件断下,看堆栈:
0012FF4C 00403A36 /CALL 到 ExitProcess 来自 CrazyTet.00403A31
继续回溯到:
00403A2C /75 08 jnz short 00403A36
00403A2E |. |8B06 |mov eax, dword ptr [esi]
00403A30 |. |50 |push eax ; /ExitCode
00403A31 |. |E8 5AD8FFFF |call <jmp.&kernel32.ExitProcess> ; \ExitProcess
接着回溯:
00403954 /$ 53 push ebx ***本地调用/跳转来自 00403A7A, <模块入口点>+0DB, <模块入口点
>+142
00403955 |. 56 push esi ; CrazyTet.0048B7D4
继续,一直来到:
00487204 |. A1 74A94800 mov eax, dword ptr [48A974]
00487209 |. 8B00 mov eax, dword ptr [eax]
0048720B |. BA 74774800 mov edx, 00487774 ; crazytet.exe
00487210 |. E8 07CCF7FF call 00403E1C
00487215 |. 74 05 je short 0048721C ***众里寻他千百度。。。
00487217 |. E8 38C7F7FF call 00403954
0048721C |> 33C0 xor eax, eax
0048721E |. E8 5D6EFFFF call 0047E080
00487223 |. 8B0D BCA64800 mov ecx, dword ptr [48A6BC] ; CrazyTet.004996C0
00487215 |. 74 05 je short 0048721C
把je改为jmp即可。
四:标题栏后的(unregistered)
004817D1 . 3A0411 cmp al, byte ptr [ecx+edx]
004817D4 . 75 14 jnz short 004817EA ;跳吧
004817D6 . A1 CCA74800 mov eax, dword ptr [48A7CC]
004817DB . BA 081A4800 mov edx, 00481A08 ; (unregistered)
004817D4 的jnz short 004817EA
改为JMP
右键,查找所有命令 cmp al, byte ptr [ecx+edx],全部将其F2
找到的命令
地址 反汇编 注释
00477CC7 cmp al, byte ptr [ecx+edx]
00477D57 cmp al, byte ptr [ecx+edx]
00477F04 cmp al, byte ptr [ecx+edx]
00478000 cmp al, byte ptr [ecx+edx]
0047877D cmp al, byte ptr [ecx+edx]
00478D48 cmp al, byte ptr [ecx+edx]
0047C0EA cmp al, byte ptr [ecx+edx]
0047C4D2 cmp al, byte ptr [ecx+edx]
0047F307 cmp al, byte ptr [ecx+edx]
00480193 cmp al, byte ptr [ecx+edx]
00480BB5 cmp al, byte ptr [ecx+edx]
00480BE1 cmp al, byte ptr [ecx+edx]
004814FE cmp al, byte ptr [ecx+edx]
004817D1 cmp al, byte ptr [ecx+edx] (初始 CPU 选择)
00481DB2 cmp al, byte ptr [ecx+edx]
00483530 cmp al, byte ptr [ecx+edx]
004857F4 cmp al, byte ptr [ecx+edx]
00486393 cmp al, byte ptr [ecx+edx]
0048762D cmp al, byte ptr [ecx+edx]
初步判断,[ecx+edx]这个变量时判断是否注册的。
004857F4 . 3A0411 cmp al, byte ptr [ecx+edx] ; ***点注册,停在这里
004857F7 . 74 10 je short 00485809
这里je可以nop掉即可。
五、功能限制:
快速保存:
00483530 |. 3A0411 cmp al, byte ptr [ecx+edx] ; ***快速保存
00483533 E9 AD000000 jmp 004835E5 ; ***改成jmp
00483538 90 nop
去游戏框中的unregistered水印:
00480193 |. 3A0411 cmp al, byte ptr [ecx+edx] ; ***水印
00480196 E9 AD000000 jmp 00480248 ; ***改成jmp
0048019B 90 nop
游戏载入:
00486393 |. 3A0411 cmp al, byte ptr [ecx+edx] ; ***游戏载入
00486396 EB 5B jmp short 004863F3
暂停后的继续:
004814FE |. 3A0411 cmp al, byte ptr [ecx+edx] ; ***暂停后的继续
00481501 EB 25 jmp short 00481528 ; ***改为jmp
00481503 |. A1 D8AA4800 mov eax, dword ptr [48AAD8]
游戏等级选择:
00477F04 |. 3A0411 cmp al, byte ptr [ecx+edx] ; ***游戏等级选择
00477F07 |. 75 69 jnz short 00477F72 ; ***改为jmp
颠倒选项、练习模式:
00478000 |. 3A0411 cmp al, byte ptr [ecx+edx] ; ***颠倒选项,练习模式都在这里
00478003 |. 75 6C jnz short 00478071 ; ***改为jmp
新建游戏选项ok按钮:
00477CC7 |. 3A0411 cmp al, byte ptr [ecx+edx] ; ***新建游戏选项ok按钮
00477CCA EB 69 jmp short 00477D35 ; ***改为jmp
这里还有:
00477D57 |. 3A0411 cmp al, byte ptr [ecx+edx] ; ***新建游戏选项ok按钮
00477D5A |. 75 6C jnz short 00477DC8 ; ***改为jmp
消行:
0047F307 |. 3A0411 cmp al, byte ptr [ecx+edx] ; ***消行
0047F30A |. 0F85 AC000000 jnz 0047F3BC ; ***jmp
选人物肖像:
0047C0EA |. 3A0411 cmp al, byte ptr [ecx+edx] ; ***选人物肖像
0047C0ED |. 75 6B jnz short 0047C15A ; ***改为jmp
和这里:
0047C4D2 . 3A0411 cmp al, byte ptr [ecx+edx] ; ***选人物肖像
0047C4D5 . 75 13 jnz short 0047C4EA ; ***改为jmp
还有这里:
0047877D . 3A0411 cmp al, byte ptr [ecx+edx] ; ***选人物肖像
00478780 . 75 53 jnz short 004787D5 ; ***改为jmp
(上班抽空搞的)待续... |
|