注册HyperSnap-DX ver. 3.63.01算法 (10千字)
注册HyperSnap-DX ver. 3.63.01算法软件名称:HyperSnap-DX ver. 3.63.01
软件主页:http://www.hyperionics.com
主要功能:好像是抓图用的
主要目的:寻找自己的注册码
破解难度:中等难度(算码部分稍微复杂了一点)
不说废话了,直接进入正题。输入大名zombieys和注册码1212-1212-1212-1212-1212-1212(为什么不填78?我的内存里到处都是78,找不到啦,所以换换),下s 30:0 l ffffffff '1212',bpm搜到的地址。点注册,按几次f12和f10来到这里:
算NAME的CALL
:004096DB 55 push ebp
:004096DC 8BEC mov ebp, esp
:004096DE 81EC04010000 sub esp, 00000104
:004096E4 8B4D08 mov ecx, dword ptr [ebp+08]
:004096E7 33D2 xor edx, edx
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00409705(U)
|
:004096E9 8A01 mov al, byte ptr [ecx] //读取输入的注册码
:004096EB 84C0 test al, al //在A-Z之间才要
:004096ED 7418 je 00409707
:004096EF 3C41 cmp al, 41 //过滤掉-(2dhex)
:004096F1 7C0F jl 00409702
:004096F3 8A01 mov al, byte ptr [ecx]
:004096F5 3C5A cmp al, 5A
:004096F7 7F09 jg 00409702
:004096F9 888415FCFEFFFF mov byte ptr [ebp+edx-00000104], al //将过滤后掉-后的24个注册码->[ebp+edx-00000104]
:00409700 EB01 jmp 00409703
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004096F1(C), :004096F7(C)
|
:00409702 4A dec edx
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00409700(U)
|
:00409703 41 inc ecx
:00409704 42 inc edx
:00409705 EBE2 jmp 004096E9
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004096ED(C)
|
:00409707 80A415FCFEFFFF00 and byte ptr [ebp+edx-00000104], 00
:0040970F 53 push ebx
:00409710 56 push esi
:00409711 8D85FCFEFFFF lea eax, dword ptr [ebp+FFFFFEFC]
:00409717 57 push edi
:00409718 50 push eax
:00409719 E812A20200 call 00433930
:0040971E 8BD0 mov edx, eax
:00409720 59 pop ecx
:00409721 81FA80000000 cmp edx, 00000080
:00409727 8955FC mov dword ptr [ebp-04], edx
:0040972A 0F8DC5000000 jnl 004097F5
:00409730 A170504800 mov eax, dword ptr [00485070]
:00409735 3BD0 cmp edx, eax
:00409737 0F8EB8000000 jle 004097F5
:0040973D 0FBEB405FBFEFFFF movsx esi, byte ptr [ebp+eax-00000105] //取注册码第5位
:00409745 83EE41 sub esi, 00000041 //让后-A(41HEX)->ESI
:00409748 33FF xor edi, edi
:0040974A 33C9 xor ecx, ecx
:0040974C 893578304900 mov dword ptr [00493078], esi
:00409752 85D2 test edx, edx
:00409754 894D08 mov dword ptr [ebp+08], ecx
:00409757 7E5D jle 004097B6
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004097B4(C)
|
:00409759 80BC0DFCFEFFFF41 cmp byte ptr [ebp+ecx-00000104], 41 //注册码要在A-Z之间
:00409761 8D9C0DFCFEFFFF lea ebx, dword ptr [ebp+ecx-00000104]
:00409768 0F8C87000000 jl 004097F5
:0040976E 80BC3DFCFEFFFF5A cmp byte ptr [ebp+edi-00000104], 5A
:00409776 7F7D jg 004097F5
:00409778 8D50FF lea edx, dword ptr [eax-01]
:0040977B 3BCA cmp ecx, edx //是第5位的话不计算
:0040977D 7503 jne 00409782
:0040977F 4F dec edi
:00409780 EB2A jmp 004097AC
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040977D(C)
|
:00409782 0FBE03 movsx eax, byte ptr [ebx] //取注册码
:00409785 50 push eax
:00409786 E8C5000000 call 00409850 //根据密码表算位数
:0040978B 2BC6 sub eax, esi //减去上个字母ASCII值与41的差->EAX
:0040978D 59 pop ecx
:0040978E 0FBE33 movsx esi, byte ptr [ebx] //当前字母ASCII值->ESI
:00409791 48 dec eax
:00409792 83EE41 sub esi, 00000041
:00409795 85C0 test eax, eax //小于0的话+1A
:00409797 7D03 jge 0040979C
:00409799 83C01A add eax, 0000001A
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00409797(C)
|
:0040979C 8B4D08 mov ecx, dword ptr [ebp+08]
:0040979F 0441 add al, 41 //AL+41->AL
:004097A1 88877C304900 mov byte ptr [edi+0049307C], al //把结果->[EDI+49307C]
:004097A7 A170504800 mov eax, dword ptr [00485070]
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00409780(U)
|
:004097AC 47 inc edi
:004097AD 41 inc ecx
:004097AE 3B4DFC cmp ecx, dword ptr [ebp-04]
:004097B1 894D08 mov dword ptr [ebp+08], ecx
:004097B4 7CA3 jl 00409759 //接着计算
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00409757(C)
|
:004097B6 0FBEB77B304900 movsx esi, byte ptr [edi+0049307B]
:004097BD 83057830490041 add dword ptr [00493078], 00000041
:004097C4 80A77B30490000 and byte ptr [edi+0049307B], 00
:004097CB 8D877B304900 lea eax, dword ptr [edi+0049307B] //算得结果的最后一位->EAX
:004097D1 BF7C304900 mov edi, 0049307C
:004097D6 57 push edi
:004097D7 83EE41 sub esi, 00000041 //算得结果的最后一位ASCII值-41->ESI
:004097DA E81D000000 call 004097FC
:004097DF 3BF0 cmp esi, eax //算完后要和EAX值相同
:004097E1 59 pop ecx
:004097E2 7511 jne 004097F5 //不同就死了
:004097E4 0FBE057C304900 movsx eax, byte ptr [0049307C]
:004097EB 310578304900 xor dword ptr [00493078], eax
:004097F1 8BC7 mov eax, edi
:004097F3 EB02 jmp 004097F7
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0040972A(C), :00409737(C), :00409768(C), :00409776(C), :004097E2(C)
|
:004097F5 33C0 xor eax, eax
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004097F3(U)
|
:004097F7 5F pop edi
:004097F8 5E pop esi
:004097F9 5B pop ebx
:004097FA C9 leave
:004097FB C3 ret
.
.
.
:004348F0 8B542404 mov edx, dword ptr [esp+04] //用你的名字算的数的地址->EDX
:004348F4 8B4C2408 mov ecx, dword ptr [esp+08] //用注册码算的名字的地址->ECX
:004348F8 F7C203000000 test edx, 00000003
:004348FE 753C jne 0043493C
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0043492C(C), :00434956(C), :00434972(U)
|
:00434900 8B02 mov eax, dword ptr [edx] //以下是计算相不相同
:00434902 3A01 cmp al, byte ptr [ecx]
:00434904 752E jne 00434934
:00434906 0AC0 or al, al
:00434908 7426 je 00434930
:0043490A 3A6101 cmp ah, byte ptr [ecx+01]
:0043490D 7525 jne 00434934
:0043490F 0AE4 or ah, ah
:00434911 741D je 00434930
:00434913 C1E810 shr eax, 10
:00434916 3A4102 cmp al, byte ptr [ecx+02]
:00434919 7519 jne 00434934
:0043491B 0AC0 or al, al
:0043491D 7411 je 00434930
:0043491F 3A6103 cmp ah, byte ptr [ecx+03]
:00434922 7510 jne 00434934
:00434924 83C104 add ecx, 00000004
:00434927 83C204 add edx, 00000004
:0043492A 0AE4 or ah, ah
:0043492C 75D2 jne 00434900
:0043492E 8BFF mov edi, edi //要都相同才行
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00434908(C), :00434911(C), :0043491D(C), :0043494E(C), :00434964(C)
|:0043496D(C)
|
:00434930 33C0 xor eax, eax
:00434932 C3 ret
计算方法:
第几位:1 2 3 4 5 6 7 8 9 A B C D E F 10 11 12 13 14 15 16 17 18 19 1A
密码表:X C F N A K S H I P Z U J L D O R G V Q T E W Y B M
ASCII :514B4650574C444E465659484A494346 54 53 54 46 5A 42 54 45
与41差:10A 5 F 16B 3 D 5 15187 9 8 2 F 13 12 13 5 19 1 13
注册码:Q K F P W L D N F V Y H J I C F T S T F Z B T E
生成码:W O R D X C Z O M B I E Y S Z O M B I E Y S B
|___________|
|
无限制的世界范围授权 //前6位跟授权方式有关,也可能只有第5位有关是W才行
你的名字的生成码: Z O M B I E Y S Z O M B I E Y S B
计算公式:(注册码在密码表中的位置-1)-(上一位注册码ASCII值-41)-1+41=生成码
注:当生成码小于41时要+1A
当你输入NAME后你可以得到生成码的第7-22位,因为是无限制的世界范围授权所以前6位固定,而最后一位可以由从4097B6的计算确定所以很容易等到生成码,然后反推注册码。
这个玩艺确实不太好表达,自己跟踪一下就知道了。我的表达能力差,还可能有笔误,原谅我 哈哈.......
完活:)
这是我算的注册码:
名称:zombieys
授权类型:无限制的世界范围授权
代码:QKFP-WLDN-FVYH-JICF-TSTF-ZBTE
———————————————————————————————>
.-" "-. Cracked by zombieys >
/ \ My oicq is 1789655 >
| | My hp is zombieys.yeah.net>
|, .-. .-. ,| My hp is zombieys.126.com >
|)(__/ \__)(| >
|/ /\ \| Thanks for your supports >
(@_@) (_ ^^ _) >
_ )\_______\__|IIIIII|__/_____ >
_)@8@8{}<________|-\IIIIII/-|____zombieys_____________________>
