标题:某抓书狂破解分析
链接:http://www.unpack.cn/viewthread.php?tid=16306
贴者:dsmall
日期:2007-8-17 16:03
用Odbg载入程序
00551014 B> B8 00000000 mov eax,0
00551019 60 pushad
0055101A 0BC0 or eax,eax
0055101C 74 58 je short 00551076 ; BookDown.00551076
0055101E E8 00000000 call 00551023 ; BookDown.00551023
00551023 58 pop eax ; kernel32.7C816FF7
00551024 05 43000000 add eax,43
00551029 8038 E9 cmp byte ptr ds:[eax],0E9
0055102C 75 03 jnz short 00551031 ; BookDown.00551031
0055102E 61 popad
0055102F EB 35 jmp short 00551066 ; BookDown.00551066
00551031 E8 00000000 call 00551036 ; BookDown.00551036
00551036 58 pop eax ; kernel32.7C816FF7
00551037 25 00F0FFFF and eax,FFFFF000
0055103C 33FF xor edi,edi ; ntdll.7C930738
0055103E 66:BB 195A mov bx,5A19
执行a__p大侠脚本Themida & WinLicen.V1.1.X-1.8.X.By.oSc后暂停在406980处,我的天,有stolen,算了,带壳分析吧。
00406980 53 push ebx ; (Initial CPU selection)
00406981 8BD8 mov ebx,eax ; BookDown.004FD1A4
00406983 33C0 xor eax,eax ; BookDown.004FD1A4
00406985 A3 9CE04F00 mov dword ptr ds:[4FE09C],eax ; BookDown.004FD1A4
0040698A 6A 00 push 0
0040698C E8 2BFFFFFF call 004068BC ; jmp to kernel32.GetModuleHandleA
00406991 A3 68665000 mov dword ptr ds:[506668],eax ; BookDown.004FD1A4
00406996 A1 68665000 mov eax,dword ptr ds:[506668]
0040699B A3 A8E04F00 mov dword ptr ds:[4FE0A8],eax ; BookDown.004FD1A4
004069A0 33C0 xor eax,eax ; BookDown.004FD1A4
004069A2 A3 ACE04F00 mov dword ptr ds:[4FE0AC],eax ; BookDown.004FD1A4
004069A7 33C0 xor eax,eax ; BookDown.004FD1A4
004069A9 A3 B0E04F00 mov dword ptr ds:[4FE0B0],eax ; BookDown.004FD1A4
004069AE E8 C1FFFFFF call 00406974 ; BookDown.00406974
004069B3 BA A4E04F00 mov edx,4FE0A4
004069B8 8BC3 mov eax,ebx
004069BA E8 15D8FFFF call 004041D4 ; BookDown.004041D4
004069BF 5B pop ebx ; BookDown.007BFFBB
004069C0 C3 retn
搜索字符串“谢谢您的注册,现在您使用的是无任何功能限制的版本了!”来到4ed8c0
004ED897 8B55 E8 mov edx,dword ptr ss:[ebp-18] ; BookDown.00406980
004ED89A 8B45 FC mov eax,dword ptr ss:[ebp-4]
004ED89D 59 pop ecx ; BookDown.007BFFBB
004ED89E E8 65F9FFFF call 004ED208 ; BookDown.004ED208
004ED8A3 84C0 test al,al
004ED8A5 0F84 EB000000 je 004ED996 ; BookDown.004ED996
004ED8AB A1 A44F5000 mov eax,dword ptr ds:[504FA4]
004ED8B0 8B00 mov eax,dword ptr ds:[eax]
004ED8B2 C680 A0030000 01 mov byte ptr ds:[eax+3A0],1
004ED8B9 A1 A44F5000 mov eax,dword ptr ds:[504FA4]
004ED8BE 8B00 mov eax,dword ptr ds:[eax]
004ED8C0 BA 04DA4E00 mov edx,4EDA04 ; 谢谢您的注册,现在您使用的是无任何功能限制的版本了!
004ED8C5 E8 1AEE0000 call 004FC6E4 ; BookDown.004FC6E4
004ED8CA 33C0 xor eax,eax ; BookDown.004FD1A4
004ED8CC 55 push ebp
004ED8CD 68 85D94E00 push 4ED985
004ED8D2 64:FF30 push dword ptr fs:[eax]
004ED8D5 64:8920 mov dword ptr fs:[eax],esp
004ED8D8 8D55 DC lea edx,dword ptr ss:[ebp-24]
004ED8DB 8B45 FC mov eax,dword ptr ss:[ebp-4]
往上看,知4ed208为关键call,在004ED89E处下断,F9执行程序。点击注册,任意输入注册码,确定,中断在004ED89E,F7进入。
004ED208 55 push ebp
004ED209 8BEC mov ebp,esp
004ED20B 83C4 C8 add esp,-38
004ED20E 53 push ebx ; BookDown.00409857
004ED20F 33DB xor ebx,ebx ; BookDown.00409857
004ED211 895D CC mov dword ptr ss:[ebp-34],ebx ; BookDown.00409857
004ED214 895D C8 mov dword ptr ss:[ebp-38],ebx ; BookDown.00409857
004ED217 895D D0 mov dword ptr ss:[ebp-30],ebx ; BookDown.00409857
004ED21A 895D EC mov dword ptr ss:[ebp-14],ebx ; BookDown.00409857
004ED21D 895D E8 mov dword ptr ss:[ebp-18],ebx ; BookDown.00409857
004ED220 894D F4 mov dword ptr ss:[ebp-C],ecx
004ED223 8955 F8 mov dword ptr ss:[ebp-8],edx
004ED226 8945 FC mov dword ptr ss:[ebp-4],eax ; FastMM_F.02BF4D01
004ED229 8B45 F8 mov eax,dword ptr ss:[ebp-8]
004ED22C E8 CB77F1FF call 004049FC ; BookDown.004049FC
004ED231 8B45 F4 mov eax,dword ptr ss:[ebp-C]
004ED234 E8 C377F1FF call 004049FC ; BookDown.004049FC
004ED239 33C0 xor eax,eax ; FastMM_F.02BF4D01
004ED23B 55 push ebp
004ED23C 68 F8D34E00 push 4ED3F8
004ED241 64:FF30 push dword ptr fs:[eax]
004ED244 64:8920 mov dword ptr fs:[eax],esp
004ED247 8B45 F8 mov eax,dword ptr ss:[ebp-8]
004ED24A E8 BD75F1FF call 0040480C ; BookDown.0040480C
004ED24F 83F8 32 cmp eax,32 : 注册码长度必须大于50位。
004ED252 7D 09 jge short 004ED25D ; BookDown.004ED25D
004ED254 C645 F3 00 mov byte ptr ss:[ebp-D],0
004ED258 E9 66010000 jmp 004ED3C3 ; BookDown.004ED3C3
004ED25D 8D55 D4 lea edx,dword ptr ss:[ebp-2C]
004ED260 8B45 F4 mov eax,dword ptr ss:[ebp-C]
004ED263 E8 38FBFFFF call 004ECDA0 ; BookDown.004ECDA0
004ED268 8D45 D4 lea eax,dword ptr ss:[ebp-2C]
004ED26B 8D55 E8 lea edx,dword ptr ss:[ebp-18]
004ED26E E8 A1FBFFFF call 004ECE14 ; BookDown.004ECE14
004ED273 8D4D EC lea ecx,dword ptr ss:[ebp-14]
004ED276 8B55 F8 mov edx,dword ptr ss:[ebp-8]
004ED279 8B45 FC mov eax,dword ptr ss:[ebp-4]
004ED27C E8 83040000 call 004ED704 ; BookDown.004ED704
004ED281 8B45 EC mov eax,dword ptr ss:[ebp-14]
004ED284 8B55 E8 mov edx,dword ptr ss:[ebp-18] ; BookDown.00409783
004ED287 E8 CC76F1FF call 00404958 ; 关键call,不想分析算法,略过。
004ED28C 75 09 jnz short 004ED297 ; 关键跳,经测试nop掉此处指令即可无需注册,重启验证也是此函数,在此处做内存补丁。
004ED28E C645 F3 01 mov byte ptr ss:[ebp-D],1 : 标志位
004ED292 E9 2C010000 jmp 004ED3C3 ; BookDown.004ED3C3
004ED297 E8 E09AF1FF call 00406D7C ; jmp to kernel32.GetTickCount
004ED29C 8945 E4 mov dword ptr ss:[ebp-1C],eax ; FastMM_F.02BF4D01
004ED29F E9 C5000000 jmp 004ED369 ; BookDown.004ED369
004ED2A4 8D55 D0 lea edx,dword ptr ss:[ebp-30]
004ED2A7 8B45 FC mov eax,dword ptr ss:[ebp-4]
004ED2AA E8 95010000 call 004ED444 ; BookDown.004ED444
004ED2AF 8B45 D0 mov eax,dword ptr ss:[ebp-30]
004ED2B2 8D55 D4 lea edx,dword ptr ss:[ebp-2C]
004ED2B5 E8 E6FAFFFF call 004ECDA0 ; BookDown.004ECDA0
004ED2BA 8D45 D4 lea eax,dword ptr ss:[ebp-2C]
004ED2BD 8D55 E8 lea edx,dword ptr ss:[ebp-18]
004ED2C0 E8 4FFBFFFF call 004ECE14 ; BookDown.004ECE14
004ED2C5 8B45 EC mov eax,dword ptr ss:[ebp-14]
004ED2C8 8B55 E8 mov edx,dword ptr ss:[ebp-18] ; BookDown.00409783
004ED2CB E8 8876F1FF call 00404958 ; BookDown.00404958
004ED2D0 75 35 jnz short 004ED307 ; BookDown.004ED307
004ED2D2 C645 F3 01 mov byte ptr ss:[ebp-D],1
004ED2D6 A1 38515000 mov eax,dword ptr ds:[505138]
004ED2DB 8B00 mov eax,dword ptr ds:[eax]
004ED2DD BA 10D44E00 mov edx,4ED410 ; ASCII "FrmRegister"
004ED2E2 E8 65C5F3FF call 0042984C ; BookDown.0042984C
004ED2E7 85C0 test eax,eax ; FastMM_F.02BF4D01
004ED2E9 0F84 D4000000 je 004ED3C3 ; BookDown.004ED3C3
004ED2EF BA 24D44E00 mov edx,4ED424 ; 注册码
004ED2F4 8B45 FC mov eax,dword ptr ss:[ebp-4]
004ED2F7 8B80 08030000 mov eax,dword ptr ds:[eax+308]
004ED2FD E8 B25FF7FF call 004632B4 ; BookDown.004632B4
004ED302 E9 BC000000 jmp 004ED3C3 ; BookDown.004ED3C3
004ED307 A1 38515000 mov eax,dword ptr ds:[505138]
004ED30C 8B00 mov eax,dword ptr ds:[eax]
004ED30E E8 A95FF9FF call 004832BC ; BookDown.004832BC
004ED313 A1 38515000 mov eax,dword ptr ds:[505138]
004ED318 8B00 mov eax,dword ptr ds:[eax]
004ED31A BA 10D44E00 mov edx,4ED410 ; ASCII "FrmRegister"
004ED31F E8 28C5F3FF call 0042984C ; BookDown.0042984C
004ED324 85C0 test eax,eax ; FastMM_F.02BF4D01
004ED326 74 41 je short 004ED369 ; BookDown.004ED369
004ED328 E8 4F9AF1FF call 00406D7C ; jmp to kernel32.GetTickCount
004ED32D 33D2 xor edx,edx
004ED32F 52 push edx
004ED330 50 push eax ; FastMM_F.02BF4D01
004ED331 8B45 E4 mov eax,dword ptr ss:[ebp-1C]
004ED334 99 cdq
004ED335 290424 sub dword ptr ss:[esp],eax ; FastMM_F.02BF4D01
004ED338 195424 04 sbb dword ptr ss:[esp+4],edx
004ED33C 58 pop eax ; kernel32.7C80B9DD
004ED33D 5A pop edx ; kernel32.7C80B9DD
004ED33E 52 push edx
004ED33F 50 push eax ; FastMM_F.02BF4D01
004ED340 8D45 C8 lea eax,dword ptr ss:[ebp-38]
004ED343 E8 50F7F1FF call 0040CA98 ; BookDown.0040CA98
004ED348 8B4D C8 mov ecx,dword ptr ss:[ebp-38]
004ED34B 8D45 CC lea eax,dword ptr ss:[ebp-34]
004ED34E BA 34D44E00 mov edx,4ED434 ; 注册码验证中
004ED353 E8 0075F1FF call 00404858 ; BookDown.00404858
004ED358 8B55 CC mov edx,dword ptr ss:[ebp-34]
004ED35B 8B45 FC mov eax,dword ptr ss:[ebp-4]
004ED35E 8B80 08030000 mov eax,dword ptr ds:[eax+308]
004ED364 E8 4B5FF7FF call 004632B4 ; BookDown.004632B4
004ED369 E8 0E9AF1FF call 00406D7C ; jmp to kernel32.GetTickCount
004ED36E 33D2 xor edx,edx
004ED370 52 push edx
004ED371 50 push eax ; FastMM_F.02BF4D01
004ED372 8B45 E4 mov eax,dword ptr ss:[ebp-1C]
004ED375 99 cdq
004ED376 290424 sub dword ptr ss:[esp],eax ; FastMM_F.02BF4D01
004ED379 195424 04 sbb dword ptr ss:[esp+4],edx
004ED37D 58 pop eax ; kernel32.7C80B9DD
004ED37E 5A pop edx ; kernel32.7C80B9DD
004ED37F 83FA 00 cmp edx,0
004ED382 75 0D jnz short 004ED391 ; BookDown.004ED391
004ED384 3D 60EA0000 cmp eax,0EA60
004ED389 ^ 0F82 15FFFFFF jb 004ED2A4 ; BookDown.004ED2A4
004ED38F EB 06 jmp short 004ED397 ; BookDown.004ED397
004ED391 ^ 0F8C 0DFFFFFF jl 004ED2A4 ; BookDown.004ED2A4
004ED397 A1 38515000 mov eax,dword ptr ds:[505138]
004ED39C 8B00 mov eax,dword ptr ds:[eax]
004ED39E BA 10D44E00 mov edx,4ED410 ; ASCII "FrmRegister"
004ED3A3 E8 A4C4F3FF call 0042984C ; BookDown.0042984C
004ED3A8 85C0 test eax,eax ; FastMM_F.02BF4D01
004ED3AA 74 13 je short 004ED3BF ; BookDown.004ED3BF
004ED3AC BA 24D44E00 mov edx,4ED424 ; 注册码
004ED3B1 8B45 FC mov eax,dword ptr ss:[ebp-4]
004ED3B4 8B80 08030000 mov eax,dword ptr ds:[eax+308]
004ED3BA E8 F55EF7FF call 004632B4 ; BookDown.004632B4
004ED3BF C645 F3 00 mov byte ptr ss:[ebp-D],0
004ED3C3 33C0 xor eax,eax ; FastMM_F.02BF4D01
004ED3C5 5A pop edx ; kernel32.7C80B9DD
004ED3C6 59 pop ecx ; kernel32.7C80B9DD
004ED3C7 59 pop ecx ; kernel32.7C80B9DD
004ED3C8 64:8910 mov dword ptr fs:[eax],edx
004ED3CB 68 FFD34E00 push 4ED3FF
004ED3D0 8D45 C8 lea eax,dword ptr ss:[ebp-38]
004ED3D3 BA 03000000 mov edx,3
004ED3D8 E8 9371F1FF call 00404570 ; BookDown.00404570
004ED3DD 8D45 E8 lea eax,dword ptr ss:[ebp-18]
004ED3E0 BA 02000000 mov edx,2
004ED3E5 E8 8671F1FF call 00404570 ; BookDown.00404570
004ED3EA 8D45 F4 lea eax,dword ptr ss:[ebp-C]
004ED3ED BA 02000000 mov edx,2
004ED3F2 E8 7971F1FF call 00404570 ; BookDown.00404570
004ED3F7 C3 retn
004ED3F8 ^ E9 936AF1FF jmp 00403E90 ; BookDown.00403E90
004ED3FD ^ EB D1 jmp short 004ED3D0 ; BookDown.004ED3D0
004ED3FF 8A45 F3 mov al,byte ptr ss:[ebp-D]
004ED402 5B pop ebx ; kernel32.7C80B9DD
004ED403 8BE5 mov esp,ebp
004ED405 5D pop ebp ; kernel32.7C80B9DD
004ED406 C3 retn
004ED407 00FF add bh,bh
--------------------------------------------------------------------------------
【经验总结】
load制作:
修改地址:004ED28C
修改长度:2
原始指令:7509
修改指令:9090
Load程序生成后,还需将SysCfg.ini文件中Regcode=后面输入输入任意50位以上数字并保存。
|