• 标 题:让注册码直接显示在输入框里面。给跟我同样是初学者的朋友一点思路~ (4千字)
  • 作 者:nzinzi
  • 时 间:2002-11-20 2:11:52
  • 链 接:http://bbs.pediy.com

Registry Crawler 4.0.0.3
下载:汉化补丁: http://www.hanzify.org/skipli/chinese/HAC-RCrawler4003-Fire.zip
破解工具:TRW2000 HIEW W32DASM RH ULTRAEDIT
我今天从硬盘翻出一个软件Registry Crawler,发现没有注册,但是算法又比较复杂,要跟比较长时间这个软件又是明码比较,所以我就用SetWindowTextA显示出来,这样直接输入注册名按解锁软件自动显示注册码在,注册码的TEXT里面,看起来感觉瞒不错的。又用ULTRAEDIT修改了一下出错以后显示的对话框,哇,赫然一个注册机。注册成功想重新注册请删掉HKEY_LOCAL_MACHINE\Software\4Developers\RCrawler\4D这个键值
就可以重新注册了~

:0040AEDE 6800714400              push 00447100
:0040AEE3 E95AC20300              jmp 00447142    (原本是LEA ECX,DWORD PTR [ESI+00000380])
:0040AEE8 90                      nop            我把把跳转到底下保存句柄的内存的存储地址,以便等下显示使用。
:0040AEE9 E8E02A0200              call 0042D9CE  软件所有设置窗口的标题文字都调用这里,所以我们有现成的。

:0042D9CE 8B4138                  mov eax, dword ptr [ecx+38]
:0042D9D1 85C0                    test eax, eax
:0042D9D3 751D                    jne 0042D9F2
:0042D9D5 FF742404                push [esp+04]
:0042D9D9 FF711C                  push [ecx+1C]

* Reference To: USER32.SetWindowTextA, Ord:025Eh  设置窗口的标题文字或控件的内容的API
                                                 
:0042D9DC FF1524864400            Call dword ptr [00448624] 
:0042D9E2 EB0E                    jmp 0042D9F2
:0042D9E4 8B10                    mov edx, dword ptr [eax]
:0042D9E6 FF742404                push [esp+04]
:0042D9EA 8BC8                    mov ecx, eax
:0042D9EC FF9280000000            call dword ptr [edx+00000080]

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0042D9D3(C), :0042D9E2(U)
|
:0042D9F2 C20400                  ret 0004

:0040AE00 8D442414                lea eax, dword ptr [esp+14]    把注册码移入EAX,D EAX就可以看到正确的注册码
:0040AE04 E909C30300              jmp 00447112            跳转我的代码就是显示出注册码的

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00447133(U)
|
:0040AE09 50                      push eax
:0040AE0A E801570100              call 00420510      这个CALL就是比较注册码的

:00447112 50                      push eax 
:00447113 51                      push ecx
:00447114 52                      push edx          堆栈保存一定要注意不然很容易非法操作
:00447115 50                      push eax          EAX 里面是注册码
:00447116 8B0D708D4500            mov ecx, dword ptr [00458D70]
:0044711C 85C9                    test ecx, ecx      由于注册成功以后每次启动都比较一次注册码所以都要
                                                    运行我们的代码,所以我测试句柄是否存在,来达到不
                                                    运行底下那个CALL,不然如注册成功后运行会出错。
:0044711E 740A                    je 0044712A
:00447120 E8A968FEFF              call 0042D9CE      调用这个CALL 把注册码显示出来
:00447125 E901000000              jmp 0044712B

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0044711E(C)
|
:0044712A 58                      pop eax

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00447125(U)
|
:0044712B 5A                      pop edx
:0044712C 59                      pop ecx
:0044712D 58                      pop eax
:0044712E 6810E64500              push 0045E610
:00447133 E9D13CFCFF              jmp 0040AE09
:00447138 00000000000000000000    BYTE 10 DUP(0)



* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040AEE3(U)
|
:00447142 8D8E80030000            lea ecx, dword ptr [esi+00000380]  保存句柄的内存的存储地址
:00447148 50                      push eax
:00447149 B8708D4500              mov eax, 00458D70
:0044714E 8908                    mov dword ptr [eax], ecx
:00447150 58                      pop eax       
:00447151 E9933DFCFF              jmp 0040AEE9

总的感觉就是对软件DIY,就是堆栈好搞好最重要,其他我不知道。我是初级菜鸟,不敢乱说话。
但是总的感觉有些软件用这样做注册机还是瞒实用的。