[原創]演算法淺探――OpenCanvas V2.24 漢化版
下載頁面:
http://www.skycn.com/soft/11835.html
軟體大小:
1394 KB
軟體語言: 簡體中文
軟體類別: 漢化補丁 / 共享版 / 影像處理
應用平臺: Win9x/NT/2000/XP
加入時間:
2003-04-24 10:55:33
下載次數: 376
推薦等級: ****
開 發
商: http://poo.webfeng.net/poobbs/
【軟體簡介】:OpenCanvas
讓使用者在使用電腦繪圖時,就像是在紙上手繪一樣,可以畫出極為細緻的圖形。
【軟體限制】:NAG、功能限制。
【作者宣告】:初學Crack,只是感興趣,沒有其它目的。失誤之處敬請諸位大俠賜教!
【破解工具】:TRW2000娃娃修改版、Ollydbg1.09、PEiD、W32Dasm 9.0白金版
―――――――――――――――――――――――――――――――――
【過 程】:
從
天空 下載的 笨雞 漢化的中文版。
oC224e.exe 無殼,可能讓漢化者代脫了。Delphi 編寫。
演算法不太難,只是太麻煩了。幸好作者沒有再來幾個迴圈互相校驗。
試煉碼:12345678-ABCD-EFGHIJKL
―――――――――――――――――――――――――――――――――
:004AD817
E8BCD6FBFF call 0046AED8
:004AD81C
8D55E0 lea edx,
dword ptr [ebp-20]
:004AD81F 8B83DC020000
mov eax, dword ptr [ebx+000002DC]
:004AD825 E8522DF8FF
call 0043057C
:004AD82A 8B45E0
mov eax, dword ptr [ebp-20]
====>EAX=12345678-ABCD-EFGHIJKL
:004AD82D
E8EE65F5FF call 00403E20
====>取試煉碼長度
:004AD832
BA16000000 mov edx, 00000016
====>EDX=16(H)=22(D)
:004AD837
E86836F7FF call 00420EA4
====>比較試煉碼是否是22位?
:004AD83C
50 push
eax
:004AD83D 8D55DC
lea edx, dword ptr [ebp-24]
:004AD840 8B83DC020000
mov eax, dword ptr [ebx+000002DC]
:004AD846 E8312DF8FF
call 0043057C
:004AD84B 8B45DC
mov eax, dword ptr
[ebp-24]
:004AD84E E89167F5FF call
00403FE4
:004AD853 8BD0
mov edx, eax
:004AD855 8BC6
mov eax, esi
:004AD857 59
pop ecx
:004AD858 E8D3D6FBFF
call 0046AF30
:004AD85D 8BC6
mov eax,
esi
====>EAX=12345678-ABCD-EFGHIJKL
:004AD85F
E8E0740400 call 004F4D44
====>關鍵CALL 一!進入!
:004AD864
8983E0020000 mov dword ptr [ebx+000002E0],
eax
====>上面的CALL裡運算,正確則EAX返回1或3。
====>否則後面004AD893處會讓你大叫的。^Q^^Q^
:004AD86A
83BBE0020000FF cmp dword ptr [ebx+000002E0],
FFFFFFFF
:004AD871 744C
je 004AD8BF
====>跳則OVER!
:004AD873
8D45FE lea eax,
dword ptr [ebp-02]
:004AD876 50
push eax
:004AD877 8D45FF
lea eax, dword ptr [ebp-01]
:004AD87A 50
push
eax
:004AD87B 56
push esi
:004AD87C E8D67E0400
call 004F5757
====>關鍵CALL
二!進入!
:004AD881 83C40C
add esp, 0000000C
:004AD884
84C0 test
al, al
:004AD886 7437
je 004AD8BF
====>跳則OVER!
:004AD888
56 push
esi
:004AD889 E86B7F0400 call
004F57F9
====>關鍵CALL 三!進入!
:004AD88E
59 pop
ecx
:004AD88F 84C0
test al, al
:004AD891 742C
je 004AD8BF
====>跳則OVER!
:004AD893
8B83E0020000 mov eax, dword ptr [ebx+000002E0]
====>此處就是檢查你4AD85F裡的選擇了,如果你進了陷阱……
:004AD899
83F801 cmp eax,
00000001
====>[ebx+000002E0]是否是1?呵呵,我的是。
:004AD89C
7415 je 004AD8B3
====>跳!我的選擇!
:004AD89E
83F803 cmp eax,
00000003
====>[ebx+000002E0]是否是3?另個選擇!
:004AD8A1
7410 je 004AD8B3
====>此處再不跳就OVER!
:004AD8A3
33C9 xor
ecx, ecx
:004AD8A5 33D2
xor edx, edx
*
Possible StringData Ref from Code Obj ->"Region code mismatch!"
====>很讓人難受的一句話!*o* *o*
:004AD8A7 B82CD94A00
mov eax, 004AD92C
:004AD8AC E82F6D0500
call 005045E0
:004AD8B1 EB40
jmp 004AD8F3
*
Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004AD89C(C),
:004AD8A1(C)
|
:004AD8B3 C7833402000001000000 mov dword ptr
[ebx+00000234], 00000001
:004AD8BD EB34
jmp 004AD8F3
*
Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004AD871(C),
:004AD886(C), :004AD891(C)
|
:004AD8BF FF83E4020000
inc dword ptr [ebx+000002E4]
:004AD8C5 8D55D8
lea edx, dword ptr [ebp-28]
*
Possible StringData Ref from Code Obj ->"預P"
|
:004AD8C8 A14C995000
mov eax, dword ptr [0050994C]
:004AD8CD E8C27FF5FF
call 00405894
:004AD8D2 8B45D8
mov eax, dword ptr [ebp-28]
:004AD8D5
33C9 xor
ecx, ecx
:004AD8D7 33D2
xor edx, edx
:004AD8D9 E8026D0500
call 005045E0
:004AD8DE 8BC3
mov eax, ebx
:004AD8E0 E8F7FEFFFF
call 004AD7DC
:004AD8E5 84C0
test al,
al
:004AD8E7 740A
je 004AD8F3
:004AD8E9 C7833402000002000000 mov dword ptr
[ebx+00000234], 00000002
*
Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004AD8B1(U),
:004AD8BD(U), :004AD8E7(C)
|
:004AD8F3 33C0
xor eax, eax
:004AD8F5 5A
pop edx
:004AD8F6
59 pop
ecx
:004AD8F7 59
pop ecx
:004AD8F8 648910
mov dword ptr fs:[eax], edx
:004AD8FB 681DD94A00
push 004AD91D
*
Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004AD91B(U)
|
:004AD900
8D45D8 lea eax,
dword ptr [ebp-28]
:004AD903 E89862F5FF
call 00403BA0
:004AD908 8D45DC
lea eax, dword ptr [ebp-24]
:004AD90B BA02000000
mov edx, 00000002
:004AD910
E8AF62F5FF call 00403BC4
:004AD915
C3 ret
這些程式碼用了我一個下午的時間來分析,一個晚上的時間來整理呀。
哎,毅力和細心真的很重要。雖然我很菜,但或許勤能補拙呀。^O^^O^
―――――――――――――――――――――――――――――――――
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
關鍵CALL一 開 始
進入關鍵CALL:004AD85F
call 004F4D44
*
Referenced by a CALL at Addresses:
|:004AD85F , :004ADDA2 , :004C5D56
, :004C77B2 , :004C77FA
|:004D2794 , :004D30BC
, :004D3469 , :004D493F , :004D4BDA
|:004D4E7D
|
:004F4D44 53
push ebx
:004F4D45 8BD8
mov ebx, eax
:004F4D47 53
push ebx
:004F4D48
E894070000 call 004F54E1
====>呵呵,陷阱呀!
:004F4D4D
59 pop
ecx
:004F4D4E 84C0
test al, al
:004F4D50 7404
je 004F4D56
:004F4D52 33C0
xor eax, eax
:004F4D54
5B pop
ebx
:004F4D55 C3
ret
* Referenced
by a (U)nconditional or (C)onditional Jump at Address:
|:004F4D50(C)
|
:004F4D56
53 push
ebx
:004F4D57 E8A2070000 call
004F54FE
====>關鍵CALL!①進入!
:004F4D5C
59 pop
ecx
:004F4D5D 84C0
test al, al
:004F4D5F 7407
je 004F4D68
====>跳則進行其它可能的註冊碼組合比較!
:004F4D61
B801000000 mov eax, 00000001
====>我以第二個組合為目的,所以需要此處置1!
:004F4D66 EB39 jmp 004F4DA1
* Referenced
by a (U)nconditional or (C)onditional Jump at Address:
|:004F4D5F(C)
|
:004F4D68
53 push
ebx
:004F4D69 E8AD070000 call
004F551B
====>呵呵,陷阱呀!
:004F4D6E
59 pop
ecx
:004F4D6F 84C0
test al, al
:004F4D71 7407
je 004F4D7A
:004F4D73 B802000000
mov eax, 00000002
:004F4D78 EB27
jmp 004F4DA1
*
Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004F4D71(C)
|
:004F4D7A
53 push
ebx
:004F4D7B E8B8070000 call
004F5538
====>呵呵,還有這個可以用。
:004F4D80
59 pop
ecx
:004F4D81 84C0
test al, al
:004F4D83 7407
je 004F4D8C
:004F4D85 B803000000
mov eax, 00000003
:004F4D8A EB15
jmp 004F4DA1
*
Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004F4D83(C)
|
:004F4D8C
53 push
ebx
:004F4D8D E8C3070000 call
004F5555
====>呵呵,陷阱呀!
:004F4D92
59 pop
ecx
:004F4D93 84C0
test al, al
:004F4D95 7407
je 004F4D9E
:004F4D97 B804000000
mov eax, 00000004
:004F4D9C EB03
jmp 004F4DA1
*
Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004F4D39(C),
:004F4D95(C)
|
:004F4D9E 83C8FF
or eax, FFFFFFFF
*
Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004F4D66(U),
:004F4D78(U), :004F4D8A(U), :004F4D9C(U)
|
:004F4DA1 5B
pop ebx
:004F4DA2 C3
ret
―――――――――――――――――――――――――――――――――
進入關鍵CALL①:004F4D57 call 004F54FE
*
Referenced by a CALL at Address:
|:004F4D57
|
:004F54FE 8B442404
mov eax, dword ptr [esp+04]
====>EAX=12345678-ABCD-EFGHIJKL 試煉碼
:004F5502
80780145 cmp byte ptr [eax+01],
45
====>試煉碼第2位是否是E?
:004F5506
7510 jne
004F5518
:004F5508 80780331
cmp byte ptr [eax+03], 31
====>試煉碼第4位是否是1?
:004F550C
750A jne
004F5518
:004F550E 50
push eax
:004F550F E872FFFFFF
call 004F5486
====>關鍵CALL!②進入!
:004F5514
83C404 add esp,
00000004
:004F5517 C3
ret
我的試煉碼12345678-ABCD-EFGHIJKL調整為:1E315678-ABCD-EFGHIJKL
―――――――――――――――――――――――――――――――――
進入關鍵CALL②:004F550F call 004F5486
*
Referenced by a CALL at Addresses:
|:004F54F2 , :004F550F , :004F552C
, :004F5549 , :004F5566
|
:004F5486 56
push esi
:004F5487
8B742408 mov esi, dword
ptr [esp+08]
:004F548B B02D
mov al, 2D
====>AL=2D
即:-
:004F548D
384608 cmp byte
ptr [esi+08], al
====>試煉碼第9位是否是-
:004F5490
754B jne
004F54DD
====>跳則OVER!
:004F5492
38460D cmp byte
ptr [esi+0D], al
====>試煉碼第14位是否是-
:004F5495
7546 jne
004F54DD
====>跳則OVER!
:004F5497
0FBE06 movsx eax,
byte ptr [esi]
====>取試煉碼第1位字元的HEX值
:004F549A
83F841 cmp eax,
00000041
====>第1位不能小於41
:004F549D
7C3E jl 004F54DD
====>跳則OVER!
:004F549F
83F85A cmp eax,
0000005A
====>第1位不能大於5A 即:第1位須是大寫字母。
:004F54A2
7F39 jg 004F54DD
====>跳則OVER!
:004F54A4
0FBE4609 movsx eax, byte
ptr [esi+09]
====>取試煉碼第10位字元的HEX值
:004F54A8
83F841 cmp eax,
00000041
:004F54AB 7C30
jl 004F54DD
:004F54AD 83F85A
cmp eax, 0000005A
:004F54B0 7F2B
jg 004F54DD
====>同上面一樣,第10位應是大寫字母!
:004F54B2
0FBE460F movsx eax, byte
ptr [esi+0F]
====>取試煉碼第16位字元的HEX值
:004F54B6
83F841 cmp eax,
00000041
:004F54B9 7C22
jl 004F54DD
:004F54BB 83F85A
cmp eax, 0000005A
:004F54BE 7F1D
jg 004F54DD
====>同上面一樣,第16位應是大寫字母!
所以,第1、10、16位必須是大寫字母!
我的試煉碼12345678-ABCD-EFGHIJKL調整為:AE315678-ABCD-EFGHIJKL
:004F54C0
56 push
esi
:004F54C1 E84CFFFFFF call
004F5412
====>關鍵CALL③!進入!
:004F54C6
0FBE4E15 movsx ecx, byte
ptr [esi+15]
====>取試煉碼第22位字元的HEX值4C
:004F54CA
25FF000000 and eax, 000000FF
:004F54CF
83C404 add esp,
00000004
:004F54D2 33D2
xor edx, edx
:004F54D4 3BC8
cmp ecx, eax
====>ECX=4C 試煉碼第22位字元的HEX值
====>EAX=34
上面4F54C1處運算得出的值
====>所以註冊碼的第22位應是4
因此把試煉碼AE315678-ABCD-EFGHIJKL再次修改為AE315678-ABCD-EFGHIJK4
當然,我只是在Ollydbg中修改了暫存器的值,不用再重新LOAD,那樣太麻煩了。^O^^O^
:004F54D6
0F94C2 sete dl
====>根據比較結果設定DL的值 應為TRUE 即:01
:004F54D9
8AC2 mov
al, dl
:004F54DB 5E
pop esi
:004F54DC C3
ret
*
Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004F5490(C),
:004F5495(C), :004F549D(C), :004F54A2(C), :004F54AB(C)
|:004F54B0(C), :004F54B9(C),
:004F54BE(C)
|
:004F54DD 32C0
xor al, al
====>跳到此處清0就OVER了!
:004F54DF
5E pop
esi
:004F54E0 C3
ret
―――――――――――――――――――――――――――――――――
進入關鍵CALL③:004F54C1 call 004F5412
*
Referenced by a CALL at Address:
|:004F54C1
|
:004F5412 8B442404
mov eax, dword ptr [esp+04]
====>EAX=AE315678-ABCD-EFGHIJKL 試煉碼
:004F5416
8A480F mov cl, byte
ptr [eax+0F]
====>CL=46 取試煉碼第16位字元的HEX值
:004F5419
8A5009 mov dl, byte
ptr [eax+09]
====>DL=41 取試煉碼第10位字元的HEX值
:004F541C
8A00 mov
al, byte ptr [eax]
====>AL=41 取試煉碼第1
位字元的HEX值
:004F541E 03CA
add ecx,
edx
====>ECX=46 + 41=00DACE87
:004F5420
8D4C01FC lea ecx, dword
ptr [ecx+eax-04]
====>ECX=00DACE87 +
0082F131 - 04=015DBFB4
:004F5424
83E10F and ecx,
0000000F
====>ECX=015DBFB4 AND 0000000F=4
:004F5427
8A8144905000 mov al, byte ptr [ecx+00509044]
====>根據ECX值從[00509044]的表中取值!
====>AL=34 將和試煉碼的第22位比較!
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
[00509044]記憶體中是一張表:
00509044
30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46 0123456789ABCDEF
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
:004F542D C3 ret
小結:第1、10、16位字母的HEX值的低位相加再減4,以此為指標從[00509044]記憶體中的表中取值
1+24=4
[00509044 + 4]處是34,34和第22位比較,所以第22位是 4
關鍵CALL一 結束
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□
關鍵CALL二 開 始
*
Referenced by a CALL at Addresses:
|:004AD87C , :004ADE71 , :004C5E25
, :004C77C5 , :004C7812
|:004D2863 , :004D318B
, :004D3538 , :004D4A0E , :004D4CA9
|:004D4F4C
|
:004F5757 53
push ebx
:004F5758 56
push esi
:004F5759 8B74240C
mov esi, dword ptr [esp+0C]
====>ESI=AE315678-ABCD-EFGHIJK4 試煉碼
:004F575D
0FBE460C movsx eax, byte
ptr [esi+0C]
====>EAX=44 取試煉碼第13位字元的HEX值
:004F5761
83F830 cmp eax,
00000030
:004F5764 7C0A
jl 004F5770
:004F5766 83F839
cmp eax, 00000039
:004F5769 7F05
jg 004F5770
:004F576B 83C0D0
add eax, FFFFFFD0
====>如果第13位字元是數字則此處-30
:004F576E EB0D jmp 004F577D
* Referenced
by a (U)nconditional or (C)onditional Jump at Addresses:
|:004F5764(C), :004F5769(C)
|
:004F5770
83F841 cmp eax,
00000041
:004F5773 7C7F
jl 004F57F4
:004F5775 83F85A
cmp eax, 0000005A
:004F5778 7F7A
jg 004F57F4
:004F577A 83C0C9
add eax, FFFFFFC9
====>如果第13位字元是字母則此處-37
====>EAX=44 - 37=D
*
Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004F576E(U)
|
:004F577D
8944240C mov dword ptr
[esp+0C], eax
====>[esp+0C]=EAX
:004F5781
0FBE4612 movsx eax, byte
ptr [esi+12]
====>EAX=49 取試煉碼第19位字元的HEX值
:004F5785
83F830 cmp eax,
00000030
:004F5788 7C0A
jl 004F5794
:004F578A 83F839
cmp eax, 00000039
:004F578D 7F05
jg 004F5794
:004F578F 8D58D0
lea ebx, dword ptr
[eax-30]
====>如果第19位字元是數字則此處-30
:004F5792 EB0D jmp 004F57A1
* Referenced
by a (U)nconditional or (C)onditional Jump at Addresses:
|:004F5788(C), :004F578D(C)
|
:004F5794
83F841 cmp eax,
00000041
:004F5797 7C5B
jl 004F57F4
:004F5799 83F85A
cmp eax, 0000005A
:004F579C 7F56
jg 004F57F4
:004F579E 8D58C9
lea ebx, dword ptr
[eax-37]
====>如果第19位字元是字母則此處-37
====>EBX=49 - 37=12
*
Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004F5792(U)
|
:004F57A1
56 push
esi
:004F57A2 E8B3FCFFFF call
004F545A
====>關鍵CALL!④進入!
:004F57A7
0FBE4E14 movsx ecx, byte
ptr [esi+14]
====>ECX=4B 取試煉碼第21位字元的HEX值
:004F57AB
25FF000000 and eax, 000000FF
:004F57B0
83C404 add esp,
00000004
:004F57B3 3BC8
cmp ecx, eax
====>ECX=4B
試煉碼第21位字元的HEX值
====>EAX=44 上面4F54C1處運算得出的值
====>所以註冊碼的第21位應是D
因此把試煉碼AE315678-ABCD-EFGHIJK4再次修改為AE315678-ABCD-EFGHIJD4
:004F57B5
753D jne
004F57F4
:004F57B7 8B44240C
mov eax, dword ptr [esp+0C]
====>EAX=0D
取試煉碼第21位字元的HEX值
:004F57BB
83C341 add ebx,
00000041
====>EBX=12 + 41=53
:004F57BE
83C041 add eax,
00000041
====>EAX=0D + 41=4E
:004F57C1
50 push
eax
:004F57C2 89442410 mov
dword ptr [esp+10], eax
:004F57C6 E8DBFBFFFF
call 004F53A6
====>CALL⑤!進入!
:004F57CB
83C404 add esp,
00000004
:004F57CE 84C0
test al, al
:004F57D0 7422
je 004F57F4
:004F57D2 53
push ebx
:004F57D3 E8CEFBFFFF
call 004F53A6
====>CALL⑥!進入!
:004F57D8
83C404 add esp,
00000004
:004F57DB 84C0
test al, al
:004F57DD 7415
je 004F57F4
:004F57DF 8B542410
mov edx, dword ptr [esp+10]
:004F57E3
8A44240C mov al, byte ptr
[esp+0C]
====>AL=4E
:004F57E7
8B4C2414 mov ecx, dword
ptr [esp+14]
:004F57EB 5E
pop esi
:004F57EC 8802
mov byte ptr [edx], al
:004F57EE B001
mov al, 01
:004F57F0
8819 mov
byte ptr [ecx], bl
====>[ECX]=BL=53
:004F57F2
5B pop
ebx
:004F57F3 C3
ret
* Referenced
by a (U)nconditional or (C)onditional Jump at Addresses:
|:004F5773(C), :004F5778(C),
:004F5797(C), :004F579C(C), :004F57B5(C)
|:004F57D0(C), :004F57DD(C)
|
:004F57F4
5E pop
esi
:004F57F5 32C0
xor al, al
:004F57F7 5B
pop ebx
:004F57F8 C3
ret
―――――――――――――――――――――――――――――――――
進入關鍵CALL④:004F57A2
call 004F545A
*
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+24=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^
―――――――――――――――――――――――――――――――――
, _/
/| _.-~/
\_ , 青春都一餉
( /~ / \~-._
|\
`\\ _/
\ ~\ ) 忍把浮名
_-~~~-.) )__/;;,. \_ //'
/'_,\ --~ \ ~~~- ,;;\___( (.-~~~-.
換了破解輕狂
`~ _( ,_..--\ ( ,;'' /
~-- /._`\
/~~//' /' `~\
) /--.._, )_ `~
" `~" "
`" /~'`\ `\\~~\
"
" "~' ""
Cracked By 巢水工作坊――fly [OCN][FCG]
2003-04-28 0:38
相關文章
- IP檢視器V6.1版的演算法淺析(原創)--MD5演算法2015-11-15演算法
- 單體模式探討(原創)2004-03-12模式
- Nmap 7.95 - Zenmap 漢化版,埠掃描、網路嗅探工具2024-07-31
- [原創]Blowfish Cipher淺析2020-01-16
- 【原創】淺談指標(一)2021-10-03指標
- 【原創】淺談指標(二)2021-10-04指標
- 【原創】淺談指標(三)2021-10-04指標
- 【原創】淺談指標(四)2021-10-05指標
- 拼音大師1.81 之 演算法淺探!2003-02-24演算法
- 演算法淺探!――RegEditer v2.062015-11-15演算法
- SuperCleaner V2.50 漢化版的演算法跟蹤2003-03-05演算法
- Instyler Ex-it!
漢化版 1.64 簡單演算法分析2015-11-15演算法
- [原創]淺談大資料測試2016-01-03大資料
- eclipse漢化方法&取消漢化退回英文版2020-10-18Eclipse
- [原創]破解-分析Crackme演算法2009-06-13演算法
- profile builder 3漢化版2020-11-26UI
- AVI-GIF V1.0.9 漢化版的演算法跟蹤2003-03-06演算法
- 【原創】淺談指標(十一)alloca函式2022-03-26指標函式
- [原創]淺談移動App安全測試2014-07-15APP
- 軟體工程目錄管理淺析(原創)2008-07-01軟體工程
- 【原創】WinImage 7.0 序列號演算法2015-11-15演算法
- 演算法淺探――EXE檔案捆綁器V1.02015-11-15演算法
- USB Redirector Client 6.8 漢化版2018-11-03client
- [原創]淺談我們需要灰度釋出嗎?2019-01-28
- 【原創】淺談指標(十二)關於static(上)2022-04-24指標
- [原創]淺談測試環境管理方式2016-06-09
- [原創]淺談勝新系列軟體的破解2004-12-28
- [原創]淺談Web UI自動化測試2016-01-21WebUI
- 原創-XNview v1.65演算法分析2015-11-15View演算法
- 聖誕祝福程式官方漢化版!2017-12-25
- [原創]淺談對華為34歲以上員工“退休”2017-03-09
- [原創]淺談IT人如何做理財規劃2017-03-13
- [原創]淺談從“述職”向“述能”轉變2017-01-11
- [原創]淺談H5頁面效能測試2014-06-30H5
- [原創] 淺談ETL系統架構如何測試?2014-10-28架構
- 【原創】【深入淺出系列】之程式碼可讀性2024-08-13
- 淺探 Vue 元件化思路2018-11-07Vue元件化
- Download Boost 2002 Go 2.0漢化版演算法破解手記2015-11-15Go演算法