* Referenced by a CALL at Address:
|:004F57A2
|
:004F545A 8B442404 mov eax, dword ptr [esp+04]
====>EAX=AE315678-ABCD-EFGHIJK4 试炼码
:004F545E 8A4812 mov cl, byte ptr [eax+12]
====>CL=49 取试炼码第19位字符的HEX值
:004F5461 8A500C mov dl, byte ptr [eax+0C]
====>DL=44 取试炼码第13位字符的HEX值
:004F5464 03CA add ecx, edx
====>ECX=0082F149 + 00000044=0082F18D
:004F5466 83E10F and ecx, 0000000F
====>ECX=0082F18D AND 0000000F=D
:004F5469 8A8144905000 mov al, byte ptr [ecx+00509044]
====>根据ECX值从[00509044]的表中取值!
====>AL=44 将和试炼码的第21位比较!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
[00509044]内存中是一张表:
00509044 30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46 0123456789ABCDEF
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
:004F546F C3 ret
小结:取第13、19位试炼码的HEX值,同上进行低位相加,再从表中取值。
4+9=D [00509044 + D]处是44,44和第21位比较,所以第21位是 D
—————————————————————————————————
两次进入CALL⑤、⑥:004F57C6 call 004F53A6
* Referenced by a CALL at Addresses:
|:004F57C6 , :004F57D3
|
:004F53A6 8B442404 mov eax, dword ptr [esp+04]
====>EAX=4E
====>EAX=53
:004F53AA 25FF000000 and eax, 000000FF
:004F53AF 83F841 cmp eax, 00000041
:004F53B2 7C05 jl 004F53B9
:004F53B4 83F85A cmp eax, 0000005A
:004F53B7 7E0D jle 004F53C6
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004F53B2(C)
|
:004F53B9 83F861 cmp eax, 00000061
:004F53BC 7C05 jl 004F53C3
:004F53BE 83F87A cmp eax, 0000007A
:004F53C1 7E03 jle 004F53C6
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004F53BC(C)
|
:004F53C3 32C0 xor al, al
:004F53C5 C3 ret
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004F53B7(C), :004F53C1(C)
|
:004F53C6 83F841 cmp eax, 00000041
:004F53C9 7C0F jl 004F53DA
:004F53CB 83F85A cmp eax, 0000005A
:004F53CE 7F0A jg 004F53DA
:004F53D0 83C0BF add eax, FFFFFFBF
====>EAX=4E - 41=D
====>EAX=53 - 41=12
:004F53D3 8A8028905000 mov al, byte ptr [eax+00509028]
====>根据EAX值从[00509028]的表中取值!
====>AL=01
====>AL=01
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
[00509028]内存中是一张表:
00509028 01 01 00 01 01 01 01 01 01 01 01 00 01 01 01 01
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
:004F53D9 C3 ret
这2次取值运算的作用不太清楚,可能是检测第13位、19位的字符有没有踩上程序预埋的“地雷”吧?
因为此处内存中有的值是00,如果你很走运就碰上此处的话,恭喜你:“Game Over”了!~@~~@~
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004F53C9(C), :004F53CE(C)
|
:004F53DA 83C09F add eax, FFFFFF9F
:004F53DD 8A8028905000 mov al, byte ptr [eax+00509028]
:004F53E3 C3 ret
关键CALL二 结 束
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
关键CALL三 开 始
进入关键CALL:004AD889 call 004F57F9
* Referenced by a CALL at Addresses:
|:004AD889 , :004ADE7F , :004C5E33 , :004C77D2 , :004C781F
|:004D2871 , :004D3199 , :004D3546 , :004D4A1C , :004D4CB7
|:004D4F5A
|
:004F57F9 53 push ebx
:004F57FA 56 push esi
:004F57FB 57 push edi
:004F57FC 8B7C2410 mov edi, dword ptr [esp+10]
====>EDI=AE315678-ABCD-EFGHIJD4
因为在下面的运算中第7位和第12位必须满足几个条件,所以分析了几遍后把第7位改为4,第12位改为3
AE315678-ABCD-EFGHIJD4 改为 AE315648-AB3D-EFGHIJD4
:004F5800 0FBE4706 movsx eax, byte ptr [edi+06]
====>EAX=34 取试炼码第7位字符的HEX值
:004F5804 83F830 cmp eax, 00000030
:004F5807 7C0A jl 004F5813
:004F5809 83F839 cmp eax, 00000039
:004F580C 7F05 jg 004F5813
:004F580E 8D58D0 lea ebx, dword ptr [eax-30]
====>如果第7位字符是数字则此处-30
====>EBX=34 - 30=4
:004F5811 EB15 jmp 004F5828
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004F5807(C), :004F580C(C)
|
:004F5813 83F841 cmp eax, 00000041
:004F5816 0F8C92000000 jl 004F58AE
:004F581C 83F846 cmp eax, 00000046
:004F581F 0F8F89000000 jg 004F58AE
:004F5825 8D58C9 lea ebx, dword ptr [eax-37]
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004F5811(U)
|
:004F5828 0FBE470B movsx eax, byte ptr [edi+0B]
====>EAX=33 取试炼码第12位字符的HEX值
:004F582C 83F830 cmp eax, 00000030
:004F582F 7C0A jl 004F583B
:004F5831 83F839 cmp eax, 00000039
:004F5834 7F05 jg 004F583B
:004F5836 8D70D0 lea esi, dword ptr [eax-30]
====>如果第12位字符是数字则此处-30
====>ESI=33 - 30=3
:004F5839 EB0D jmp 004F5848
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004F582F(C), :004F5834(C)
|
:004F583B 83F841 cmp eax, 00000041
:004F583E 7C6E jl 004F58AE
:004F5840 83F846 cmp eax, 00000046
:004F5843 7F69 jg 004F58AE
:004F5845 8D70C9 lea esi, dword ptr [eax-37]
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004F5839(U)
|
:004F5848 57 push edi
:004F5849 E822FCFFFF call 004F5470
====>关键CALL!⑦进入!
:004F584E 0FBE4F13 movsx ecx, byte ptr [edi+13]
====>ECX=4A 取试炼码第20位字符的HEX值
:004F5852 25FF000000 and eax, 000000FF
:004F5857 83C404 add esp, 00000004
:004F585A 3BC8 cmp ecx, eax
====>ECX=4A 试炼码第22位字符的HEX值
====>EAX=37 上面4F5849处运算得出的值
====>所以注册码的第20位应是7
因此把试炼码AE315648-AB3D-EFGHIJD4再次修改为AE315648-AB3D-EFGHI7D4
好了,GAME OVER!不,是终于成功了!!^O^^O^^O^^O^
:004F585C 7550 jne 004F58AE
:004F585E C1E604 shl esi, 04
====>ESI=3 SHL 4=30
:004F5861 03F3 add esi, ebx
====>ESI=30 + 4=34
:004F5863 B90D000000 mov ecx, 0000000D
====>ECX=D
:004F5868 8BC6 mov eax, esi
:004F586A 99 cdq
:004F586B F7F9 idiv ecx
====>EDX=34 % D=0
:004F586D 85D2 test edx, edx
====>余数是否为0?此处余数必须为0!
:004F586F 753D jne 004F58AE
====>跳则OVER!
:004F5871 B84FECC44E mov eax, 4EC4EC4F
:004F5876 F7EE imul esi
:004F5878 C1FA02 sar edx, 02
:004F587B 8BC2 mov eax, edx
:004F587D C1E81F shr eax, 1F
:004F5880 03D0 add edx, eax
:004F5882 83FA03 cmp edx, 00000003
:004F5885 7C17 jl 004F589E
:004F5887 83FA09 cmp edx, 00000009
:004F588A 7F12 jg 004F589E
:004F588C B801000000 mov eax, 00000001
:004F5891 33C9 xor ecx, ecx
:004F5893 3BC0 cmp eax, eax
:004F5895 5F pop edi
:004F5896 0F94C1 sete cl
:004F5899 5E pop esi
:004F589A 8AC1 mov al, cl
:004F589C 5B pop ebx
:004F589D C3 ret
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004F5885(C), :004F588A(C)
|
:004F589E 33C0 xor eax, eax
:004F58A0 33C9 xor ecx, ecx
:004F58A2 83F801 cmp eax, 00000001
:004F58A5 5F pop edi
:004F58A6 0F94C1 sete cl
:004F58A9 5E pop esi
:004F58AA 8AC1 mov al, cl
:004F58AC 5B pop ebx
:004F58AD C3 ret
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004F5816(C), :004F581F(C), :004F583E(C), :004F5843(C), :004F585C(C)
|:004F586F(C)
|
:004F58AE 5F pop edi
:004F58AF 5E pop esi
:004F58B0 32C0 xor al, al
:004F58B2 5B pop ebx
:004F58B3 C3 ret
—————————————————————————————————
进入关键CALL⑦:004F5849 call 004F5470
* Referenced by a CALL at Address:
|:004F5849
|
:004F5470 8B442404 mov eax, dword ptr [esp+04]
====>EAX=AE315648-AB3D-EFGHIJD4
:004F5474 8A480B mov cl, byte ptr [eax+0B]
====>CL=33 取试炼码第12位字符的HEX值
:004F5477 8A5006 mov dl, byte ptr [eax+06]
====>DL=34 取试炼码第7位字符的HEX值
:004F547A 03CA add ecx, edx
====>ECX=0082F133 + 0082F134=0105E267
:004F547C 83E10F and ecx, 0000000F
====>ECX=0105E267 AND 0000000F=7
:004F547F 8A8144905000 mov al, byte ptr [ecx+00509044]
====>根据ECX值从[00509044]的表中取值!
====>AL=37 将和试炼码的第20位比较!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
[00509044]内存中是一张表:
00509044 30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46 0123456789ABCDEF
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
:004F5485 C3 ret
小结:取第12、7位试炼码的HEX值,同上进行低位相加,再从表中取值。
3+4=7 [00509044 + 7]处是37,37和第20位比较,所以第20位是 7
关键CALL三 结 束
◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
—————————————————————————————————
【算 法 总 结】:
实在是快在里面转晕了。简单理顺一下吧,说不明白的地方请多多指教。
一、注册码需要22位。第9、14位固定为-
二、注册码应该有五种组合的可能,但是第1、3、5组合最终是不行的,会弹出“Region code mismatch!”。
晕,我好不容易按第一种组合求逆出一组注册码却提示我“错配”了。吐血!
三、重新按第二种组合的可能进行求逆。注册码的第2、4位固定是E、1
四、第1、10、16位应是大写字母。
我的试炼码12345678-ABCD-EFGHIJKL调整为:AE315678-ABCD-EFGHIJKL
五、关键CALL 一:
第1、10、16位字母的HEX值的低位相加再减4,以此为指针从[00509044]内存中的表中取值
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
[00509044]内存中是一张表:
00509044 30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46 0123456789ABCDEF
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
1+2+6-4=4 [00509044 + 4]处是34,34和第22位比较,所以第22位是 4
六、关键CALL 二:
1、取第13、19位试炼码的HEX值,同上进行低位相加,再从表中取值。
4+9=D [00509044 + D]处是44,44和第21位比较,所以第21位是 D
我的试炼码AE315678-ABCD-EFGHIJKL再次调整为:AE315678-ABCD-EFGHIJD4
2、取第13、19位试炼码的HEX值,如果是数字则-30,是字母则-37。
我的13位是44 - 37=D 19位是49 - 37=12
D+程序给的41=4E 12+程序给的41=53 这2处最后从[00509028]内存的表中取值。
可能是检测第13位、19位的字符有没有踩上程序预埋的“地雷”吧?^O^^O^
七、关键CALL 三:
1、取第12、7位试炼码的HEX值,如果是数字则-30,是字母则-37。
我的12位是43 - 37=C ; C SHL 4=C0 ; 7位是37 - 30=7 ;
C0 + 7=C7 此处的得数(C7)和程序给的D 求模,要求余数为0!
所以简单穷举一下,找到符合条件的第12、7位。第12位3,第7位4
33-30=3 ;3 SHL 4=30 ;34-30=4; 30+4=34 ;34 % D=0
当然,还有其它可行的选择。
我的试炼码AE315678-ABCD-EFGHIJD4再次调整为:AE315648-AB3D-EFGHIJD4
2、取第12、7位试炼码的HEX值,同上进行低位相加,再从表中取值。
3+4=7 [00509044 + 7]处是37,37和第20位比较,所以第20位是 7
其它未用到的各位可以是任意数字或字母!
好了,至此求出一组可用的注册码:AE315648-AB3D-EFGHI7D4
呵呵,很抱歉,如果看不明白的话我也没办法了,我的水平太低,只有这个分析水平了。
—————————————————————————————————
【注册信息保存】:
REGEDIT4
[HKEY_CLASSES_ROOT\CLSID\{4ACAA712-F2A3-44E6-A749-34C3BD05BECB}\Version]
"idx"=hex:86,1f,52,8d,8d,f9
"id"="AE315648-AB3D-EFGHI7D4"
—————————————————————————————————
【整 理】:
一组可用的注册码:AE315648-AB3D-EFGHI7D4
呵呵,还有很多,只要你愿意,你可以自己去找吧。^v^^v^