首页
社区
课程
招聘
大虾请进来指点一下。
发表于: 2004-7-24 12:11 4134

大虾请进来指点一下。

2004-7-24 12:11
4134
小弟是个大菜鸟,最近喜欢上crack,看了几个看雪的教程就想自己动手实验。
就去中国共享软件中心随便down了一个叫“进程猎手”的软件来练习一下。壳是靠软件傻瓜式的脱了。但我用W32DASM反编译,找不到注册出错语句的提示参考(呵呵,小弟只会这招)。哪位大虾指点指点该怎么破。顺便教教小弟“怎么看程序是在处理用户输入”,比如怎么样的指令是反映我输入的用户名,注册码等。不具体讲,给个思路或者类似的参考文章也可以。先谢谢了。
ps:软件“进程猎手”下载地址:http://www.softreg.com.cn/download.asp?id=/CF087FCF-F975-44A6-BE13-A55C4410F066/

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 2
支持
分享
最新回复 (4)
雪    币: 209
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
本软件有时间限制,30天后将不能再用,所以脱壳后,先将时间向后调30天,再用OD载入,F9----->出现程序界面及NAG,提示30天到期,点“输入注册信息”,输入任意用户名及注册码(先不要点确定),然后返回OD,按ALT+E,在弹出的窗口中双击USER32,再按CTRL+N,在弹出的窗口中下MessageBoxExA断点,然后返回程序,点“确定”,这时OD被断下来,在77D3B031处,并且在右下窗口可看到:

0012E26C   77D3B02E  /CALL 到 MessageBoxExA 来自 USER32.77D3B029
0012E270   00620524  |hOwner = 00620524 ('请输入您的注册信息    ',class='#32770',parent=0025047C)
0012E274   00A88C48  |Text = "您输入的用户名/注册码不正确!"
0012E278   00A83CA0  |Title = "进程猎手 - Process Spy"
0012E27C   00000040  |Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
0012E280   00000000  \LanguageID = 0 (LANG_NEUTRAL)
0012E284   00437350  返回到 unpacked.00437350 来自 USER32.MessageBoxA

注意这里:
0012E284   00437350  返回到 unpacked.00437350 来自 USER32.MessageBoxA
接着ALT+F9------->"您输入的用户名/注册码不正确!"对话框出现,点确定后,程序返回,OD断在00437350处。

0043725C  /> /55                       push ebp
0043725D  |. |8DAC24 68FFFFFF          lea ebp,dword ptr ss:[esp-98]
00437264  |. |81EC 18010000            sub esp,118
0043726A  |. |A1 50754500              mov eax,dword ptr ds:[457550]
0043726F  |. |53                       push ebx
00437270  |. |56                       push esi
00437271  |. |57                       push edi
00437272  |. |8BF1                     mov esi,ecx
00437274  |. |33FF                     xor edi,edi
00437276  |. |57                       push edi
00437277  |. |8985 94000000            mov dword ptr ss:[ebp+94],eax
0043727D  |. |8975 84                  mov dword ptr ss:[ebp-7C],esi
00437280  |. |E8 0CFFFFFF              call unpacked.00437191
00437285  |. |8D45 8C                  lea eax,dword ptr ss:[ebp-74]
00437288  |. |50                       push eax
00437289  |. |57                       push edi
0043728A  |. |E8 2FFFFFFF              call unpacked.004371BE
0043728F  |. |8BD8                     mov ebx,eax
00437291  |. |3B5D 8C                  cmp ebx,dword ptr ss:[ebp-74]
00437294  |. |895D 80                  mov dword ptr ss:[ebp-80],ebx
00437297  |. |74 09                    je short unpacked.004372A2
00437299  |. |6A 01                    push 1                                   ; /Enable = TRUE
0043729B  |. |53                       push ebx                                 ; |hWnd
0043729C  |. |FF15 E0454400            call dword ptr ds:[<&USER32.EnableWindow>; \EnableWindow
004372A2  |> |85DB                     test ebx,ebx
004372A4  |. |74 18                    je short unpacked.004372BE
004372A6  |. |6A 00                    push 0                                   ; /lParam = 0
004372A8  |. |6A 00                    push 0                                   ; |wParam = 0
004372AA  |. |68 76030000              push 376                                 ; |Message = MSG(376)
004372AF  |. |53                       push ebx                                 ; |hWnd
004372B0  |. |FF15 24464400            call dword ptr ds:[<&USER32.SendMessageA>; \SendMessageA
004372B6  |. |85C0                     test eax,eax
004372B8  |. |74 04                    je short unpacked.004372BE
004372BA  |. |8BF8                     mov edi,eax
004372BC  |. |EB 07                    jmp short unpacked.004372C5
004372BE  |> |85F6                     test esi,esi
004372C0  |. |74 03                    je short unpacked.004372C5
004372C2  |. |8D7E 74                  lea edi,dword ptr ds:[esi+74]
004372C5  |> |8365 88 00               and dword ptr ss:[ebp-78],0
004372C9  |. |85FF                     test edi,edi
004372CB  |. |74 16                    je short unpacked.004372E3
004372CD  |. |8B07                     mov eax,dword ptr ds:[edi]
004372CF  |. |8945 88                  mov dword ptr ss:[ebp-78],eax
004372D2  |. |8B85 A8000000            mov eax,dword ptr ss:[ebp+A8]
004372D8  |. |85C0                     test eax,eax
004372DA  |. |74 07                    je short unpacked.004372E3
004372DC  |. |05 00000300              add eax,30000
004372E1  |. |8907                     mov dword ptr ds:[edi],eax
004372E3  |> |F685 A4000000 F0         test byte ptr ss:[ebp+A4],0F0
004372EA  |. |75 1F                    jnz short unpacked.0043730B
004372EC  |. |8B85 A4000000            mov eax,dword ptr ss:[ebp+A4]
004372F2  |. |83E0 0F                  and eax,0F
004372F5  |. |83F8 01                  cmp eax,1
004372F8  |. |76 0A                    jbe short unpacked.00437304
004372FA  |. |83F8 02                  cmp eax,2
004372FD  |. |76 0C                    jbe short unpacked.0043730B
004372FF  |. |83F8 04                  cmp eax,4
00437302  |. |77 07                    ja short unpacked.0043730B
00437304  |> |838D A4000000 30         or dword ptr ss:[ebp+A4],30
0043730B  |> |85F6                     test esi,esi
0043730D  |. |C645 90 00               mov byte ptr ss:[ebp-70],0
00437311  |. |74 05                    je short unpacked.00437318
00437313  |. |8B5E 4C                  mov ebx,dword ptr ds:[esi+4C]
00437316  |. |EB 22                    jmp short unpacked.0043733A
00437318  |> |8D5D 90                  lea ebx,dword ptr ss:[ebp-70]
0043731B  |. |BE 04010000              mov esi,104
00437320  |. |56                       push esi                                 ; /BufSize => 104 (260.)
00437321  |. |8BC3                     mov eax,ebx                              ; |
00437323  |. |50                       push eax                                 ; |PathBuffer
00437324  |. |6A 00                    push 0                                   ; |hModule = NULL
00437326  |. |FF15 4C424400            call dword ptr ds:[<&KERNEL32.GetModuleF>; \GetModuleFileNameA
0043732C  |. |3BC6                     cmp eax,esi
0043732E  |. |8B75 84                  mov esi,dword ptr ss:[ebp-7C]
00437331  |. |75 07                    jnz short unpacked.0043733A
00437333  |. |C685 93000000 00         mov byte ptr ss:[ebp+93],0
0043733A  |> |FFB5 A4000000            push dword ptr ss:[ebp+A4]               ; /Style
00437340  |. |53                       push ebx                                 ; |Title
00437341  |. |FFB5 A0000000            push dword ptr ss:[ebp+A0]               ; |Text
00437347  |. |FF75 80                  push dword ptr ss:[ebp-80]               ; |hOwner
0043734A  |. |FF15 B0444400            call dword ptr ds:[<&USER32.MessageBoxA>>; \MessageBoxA  =========>看到了吗,就是这里出的对话框
00437350  |. |85FF                     test edi,edi                             ;  unpacked.004585BC
00437352  |. |8BD8                     mov ebx,eax
00437354  |. |74 05                    je short unpacked.0043735B
00437356  |. |8B45 88                  mov eax,dword ptr ss:[ebp-78]
00437359  |. |8907                     mov dword ptr ds:[edi],eax
0043735B  |> |837D 8C 00               cmp dword ptr ss:[ebp-74],0
0043735F  |. |74 0B                    je short unpacked.0043736C
00437361  |. |6A 01                    push 1                                   ; /Enable = TRUE
00437363  |. |FF75 8C                  push dword ptr ss:[ebp-74]               ; |hWnd
00437366  |. |FF15 E0454400            call dword ptr ds:[<&USER32.EnableWindow>; \EnableWindow
0043736C  |> |6A 01                    push 1
0043736E  |. |8BCE                     mov ecx,esi
00437370  |. |E8 1CFEFFFF              call unpacked.00437191
00437375  |. |8B8D 94000000            mov ecx,dword ptr ss:[ebp+94]
0043737B  |. |5F                       pop edi
0043737C  |. |5E                       pop esi
0043737D  |. |8BC3                     mov eax,ebx
0043737F  |. |5B                       pop ebx
00437380  |. |E8 0A19FEFF              call unpacked.00418C8F
00437385  |. |81C5 98000000            add ebp,98
0043738B  |. |C9                       leave
0043738C  |. |C2 0C00                  retn 0C=====>这里返回到00405033
0043738F  |$ |55                       push ebp
00437390  |. |8BEC                     mov ebp,esp
00437392  |. |E8 876A0000              call unpacked.0043DE1E
00437397  |. |8B40 04                  mov eax,dword ptr ds:[eax+4]
0043739A  |. |85C0                     test eax,eax
0043739C  |. |74 0B                    je short unpacked.004373A9
0043739E  |. |8B10                     mov edx,dword ptr ds:[eax]
004373A0  |. |8BC8                     mov ecx,eax
004373A2  |. |5D                       pop ebp
004373A3  |. |FFA2 98000000            jmp dword ptr ds:[edx+98]
004373A9  |> |33C9                     xor ecx,ecx
004373AB  |. |5D                       pop ebp
004373AC  \.^\E9 ABFEFFFF              jmp unpacked.0043725C

接着F8----->到0043738C
0043738C  |.  C2 0C00  retn 0C =====>这里返回到00405033

00404E93   . /0F87 5A030000            ja unpacked.004051F3====>改这里也行,但程序会在右下显示“未注册版”字样。
00404E99   . |57                       push edi
00404E9A   . |FF2485 10524000          jmp dword ptr ds:[eax*4+405210];这里跳了就出注册框,所以要NOP掉!
00404EA1   > |68 E84F4400              push unpacked.00444FE8                   ; /Arg4 = 00444FE8 ASCII "?787j00!))7?{??u"; Case 67 ('g') of switch 00404E42
00404EA6   . |6A 0E                    push 0E                                  ; |Arg3 = 0000000E
00404EA8   . |8D4424 1C                lea eax,dword ptr ss:[esp+1C]            ; |
00404EAC   . |50                       push eax                                 ; |Arg2
00404EAD   . |8D8C24 80000000          lea ecx,dword ptr ss:[esp+80]            ; |
00404EB4   . |51                       push ecx                                 ; |Arg1
00404EB5   . |8BCE                     mov ecx,esi                              ; |
00404EB7   . |E8 64FDFFFF              call unpacked.00404C20                   ; \unpacked.00404C20
00404EBC   . |8B00                     mov eax,dword ptr ds:[eax]
00404EBE   . |6A 00                    push 0
00404EC0   . |6A 00                    push 0
00404EC2   . |50                       push eax
00404EC3   . |C78424 0C010000 00000000 mov dword ptr ss:[esp+10C],0
00404ECE   . |E8 BC240300              call unpacked.0043738F
00404ED3   . |8B4424 74                mov eax,dword ptr ss:[esp+74]
00404ED7   . |83CF FF                  or edi,FFFFFFFF
00404EDA   . |83C0 F0                  add eax,-10
00404EDD   . |89BC24 00010000          mov dword ptr ss:[esp+100],edi
00404EE4   . |8D50 0C                  lea edx,dword ptr ds:[eax+C]
00404EE7   . |8BCF                     mov ecx,edi
00404EE9   . |F0:0FC10A                lock xadd dword ptr ds:[edx],ecx
00404EED   . |49                       dec ecx
00404EEE   . |85C9                     test ecx,ecx
00404EF0   . |7F 08                    jg short unpacked.00404EFA
00404EF2   . |8B08                     mov ecx,dword ptr ds:[eax]
00404EF4   . |8B11                     mov edx,dword ptr ds:[ecx]
00404EF6   . |50                       push eax
00404EF7   . |FF52 04                  call dword ptr ds:[edx+4]
00404EFA   > |68 E84F4400              push unpacked.00444FE8                   ; /Arg4 = 00444FE8 ASCII "?787j00!))7?{??u"
00404EFF   . |6A 07                    push 7                                   ; |Arg3 = 00000007
00404F01   . |8D4424 14                lea eax,dword ptr ss:[esp+14]            ; |
00404F05   . |50                       push eax                                 ; |Arg2
00404F06   . |8D4C24 7C                lea ecx,dword ptr ss:[esp+7C]            ; |
00404F0A   . |51                       push ecx                                 ; |Arg1
00404F0B   . |8BCE                     mov ecx,esi                              ; |
00404F0D   . |E8 0EFDFFFF              call unpacked.00404C20                   ; \unpacked.00404C20
00404F12   . |8D96 CC010000            lea edx,dword ptr ds:[esi+1CC]
00404F18   . |52                       push edx
00404F19   . |50                       push eax
00404F1A   . |8D8424 84000000          lea eax,dword ptr ss:[esp+84]
00404F21   . |50                       push eax
00404F22   . |C78424 0C010000 01000000 mov dword ptr ss:[esp+10C],1
00404F2D   . |E8 5EF5FFFF              call unpacked.00404490
00404F32   . |83C4 0C                  add esp,0C
00404F35   . |8B00                     mov eax,dword ptr ds:[eax]
00404F37   . |6A 01                    push 1
00404F39   . |50                       push eax
00404F3A   . |6A 02                    push 2
00404F3C   . |8D8E 50020000            lea ecx,dword ptr ds:[esi+250]
00404F42   . |C68424 0C010000 02       mov byte ptr ss:[esp+10C],2
00404F4A   . |E8 F3FA0200              call unpacked.00434A42
00404F4F   . |8B4424 7C                mov eax,dword ptr ss:[esp+7C]
00404F53   . |83C0 F0                  add eax,-10
00404F56   . |C68424 00010000 01       mov byte ptr ss:[esp+100],1
00404F5E   . |8D48 0C                  lea ecx,dword ptr ds:[eax+C]
00404F61   . |8BD7                     mov edx,edi
00404F63   . |F0:0FC111                lock xadd dword ptr ds:[ecx],edx
00404F67   . |4A                       dec edx
00404F68   . |85D2                     test edx,edx
00404F6A   . |7F 08                    jg short unpacked.00404F74
00404F6C   . |8B08                     mov ecx,dword ptr ds:[eax]
00404F6E   . |8B11                     mov edx,dword ptr ds:[ecx]
00404F70   . |50                       push eax
00404F71   . |FF52 04                  call dword ptr ds:[edx+4]
00404F74   > |8B4424 70                mov eax,dword ptr ss:[esp+70]
00404F78   . |83C0 F0                  add eax,-10
00404F7B   . |89BC24 00010000          mov dword ptr ss:[esp+100],edi
00404F82   . |8D48 0C                  lea ecx,dword ptr ds:[eax+C]
00404F85   . |F0:0FC139                lock xadd dword ptr ds:[ecx],edi
00404F89   . |4F                       dec edi
00404F8A   . |85FF                     test edi,edi
00404F8C   . |7F 08                    jg short unpacked.00404F96
00404F8E   . |8B08                     mov ecx,dword ptr ds:[eax]
00404F90   . |8B11                     mov edx,dword ptr ds:[ecx]
00404F92   . |50                       push eax
00404F93   . |FF52 04                  call dword ptr ds:[edx+4]
00404F96   > |8B46 1C                  mov eax,dword ptr ds:[esi+1C]
00404F99   . |50                       push eax                                 ; /hWnd
00404F9A   . |FF15 B4454400            call dword ptr ds:[<&USER32.GetMenu>]    ; \GetMenu
00404FA0   . |50                       push eax
00404FA1   . |E8 5C860200              call unpacked.0042D602
00404FA6   . |8B3D BC454400            mov edi,dword ptr ds:[<&USER32.RemoveMen>;  USER32.RemoveMenu
00404FAC   . |6A 00                    push 0                                   ; /Flags = MF_BYCOMMAND|MF_ENABLED|MF_STRING
00404FAE   . |8BF0                     mov esi,eax                              ; |
00404FB0   . |8B4E 04                  mov ecx,dword ptr ds:[esi+4]             ; |
00404FB3   . |68 15800000              push 8015                                ; |ItemID = 8015 (32789.)
00404FB8   . |51                       push ecx                                 ; |hMenu
00404FB9   . |FFD7                     call edi                                 ; \RemoveMenu
00404FBB   . |8B56 04                  mov edx,dword ptr ds:[esi+4]
00404FBE   . |6A 00                    push 0                                   ; /Flags = MF_BYCOMMAND|MF_ENABLED|MF_STRING
00404FC0   . |68 17800000              push 8017                                ; |ItemID = 8017 (32791.)
00404FC5   . |52                       push edx                                 ; |hMenu
00404FC6   . |FFD7                     call edi                                 ; \RemoveMenu
00404FC8   . |8B46 04                  mov eax,dword ptr ds:[esi+4]
00404FCB   . |6A 03                    push 3                                   ; /Pos = 3
00404FCD   . |50                       push eax                                 ; |hMenu
00404FCE   . |FF15 C0454400            call dword ptr ds:[<&USER32.GetSubMenu>] ; \GetSubMenu
00404FD4   . |50                       push eax
00404FD5   . |E8 28860200              call unpacked.0042D602
00404FDA   . |8B48 04                  mov ecx,dword ptr ds:[eax+4]
00404FDD   . |68 00040000              push 400
00404FE2   . |6A 01                    push 1
00404FE4   . |51                       push ecx
00404FE5   . |FFD7                     call edi
00404FE7   . |8B0D 2C854500            mov ecx,dword ptr ds:[45852C]
00404FED   . |85C9                     test ecx,ecx
00404FEF   . |0F84 FD010000            je unpacked.004051F2
00404FF5   . |6A 01                    push 1
00404FF7   . |E8 E77C0200              call unpacked.0042CCE3
00404FFC   . |E9 F1010000              jmp unpacked.004051F2
00405001   > |68 E84F4400              push unpacked.00444FE8                   ; /Arg4 = 00444FE8 ASCII "?787j00!))7?{??u"; Case 68 ('h') of switch 00404E42
00405006   . |6A 1C                    push 1C                                  ; |Arg3 = 0000001C
00405008   . |8D5424 2C                lea edx,dword ptr ss:[esp+2C]            ; |
0040500C   . |52                       push edx                                 ; |Arg2
0040500D   . |8D8424 84000000          lea eax,dword ptr ss:[esp+84]            ; |
00405014   . |50                       push eax                                 ; |Arg1
00405015   . |8BCE                     mov ecx,esi                              ; |
00405017   . |E8 04FCFFFF              call unpacked.00404C20                   ; \unpacked.00404C20
0040501C   . |8B00                     mov eax,dword ptr ds:[eax]
0040501E   . |6A 00                    push 0
00405020   . |6A 40                    push 40
00405022   . |50                       push eax
00405023   . |C78424 0C010000 03000000 mov dword ptr ss:[esp+10C],3
0040502E   . |E8 5C230300              call unpacked.0043738F=====>到这个CALL就出"您输入的用户名/注册码不正确!"对话框了,所以不能让程序来这儿!
00405033   . |8B4424 78                mov eax,dword ptr ss:[esp+78]=====>0043738C处返回到这儿,向上看。
00405037   . |E9 95010000              jmp unpacked.004051D1
0040503C   > |6A 00                    push 0                                   ;  Case 69 ('i') of switch 00404E42
0040503E   . |8D8C24 8C000000          lea ecx,dword ptr ss:[esp+8C]
00405045   . |E8 46E4FFFF              call unpacked.00403490

00404E9A处是一个选择,共用5个分支,当EAX为2时,就是第3个分支,当程序初次运行时,EAX为2,即跳到0040503C处,就是出要求输注册码的窗口,当输完用户名和注册码点确定后,注册码不正确则EAX为1,即跳到00405001处,出出错对话框。
00405210   . \A14E4000                 dd unpacked.00404EA1                     ;  Switch table used at 00404E9A
00405214   .  01504000                 dd unpacked.00405001
00405218   .  3C504000                 dd unpacked.0040503C
0040521C   .  9D504000                 dd unpacked.0040509D
00405220   .  92514000                 dd unpacked.00405192

所以,NOP掉00404E9A处,F9---->程序继续运行,并出“谢谢你的支持!”对话框,但只NOP掉00404E9A处,每次运行程序都会出“谢谢你的支持!”对话框,非常烦人,所以下一步就去掉这个对话框:
还记得这个地方吗:
0043733A  |> \FFB5 A4000000            push dword ptr ss:[ebp+A4]               ; /Style
00437340  |.  53                       push ebx                                 ; |Title
00437341  |.  FFB5 A0000000            push dword ptr ss:[ebp+A0]               ; |Text
00437347  |.  FF75 80                  push dword ptr ss:[ebp-80]               ; |hOwner
0043734A  |.  FF15 B0444400            call dword ptr ds:[<&USER32.MessageBoxA>>; \MessageBoxA

对,这里就是出对话框的地方,当00404E9A处不NOP掉时,注册码不正确,0043734A处就出"您输入的用户名/注册码不正确!",当00404E9A处NOP掉时,就出的“谢谢你的支持!”对话框,所以将0043733A到0043734A全部NOP掉,程序启动时就不再出对话框了,至此暴破完毕。

不过遗憾的是程序启动后右下只显示“注册给:”没有用户名,不过限制总算没有了。
由于我水平有限,所以没能跟到注册码算法,有那位大侠能跟出的能给我讲一讲吗?先谢过了!!!
2004-7-24 16:47
0
雪    币: 3178
活跃值: (2820)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
学习,哈哈。
2004-7-24 16:54
0
雪    币: 209
活跃值: (55)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
同志们在调试时应当注意一点.用户名就在3个字符以上.而注册码应当在7个以上.要不在注册跟踪时会出现异常.也就跟不下去了.
2004-7-24 20:19
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢 二楼兄弟的指点。
2004-7-25 10:40
0
游客
登录 | 注册 方可回帖
返回
//