吾愛破解 - LCG - LSG |安卓破解|病毒分析|破解軟件|www.dypczhxn.cn

 找回密碼
 注冊[Register]

QQ登錄

只需一步,快速開始

搜索
查看: 3834|回復: 8
上一主題 下一主題

[原創] 160 CrackMe 之 06 算法分析及易語言注冊機實現

  [復制鏈接]
跳轉到指定樓層
樓主
wbz_007 發表于 2019-8-17 16:53 回帖獎勵
本帖最后由 wbz_007 于 2019-8-17 18:10 編輯

160 CrackMe 之 06 算法分析及易語言注冊機實現
打開程序,發現ok按鈕為灰色按鈕,輸入無反應,好家伙關于按鈕就有四個彈出,太厲害了,內容如下,全是百度翻譯,先對軟件破解要求進行了解,翻譯錯了不負責,本人英語天差了
1、The purpose of this CrackMe v. 1.00 by aLoNg3x is to MAKE INVISIBLE the buttons "OK" and "Cancella" "
這個crackme v.1.00 by along3x的目的是使按鈕“確定”和“取消”不可見(隱藏)。直接百度翻譯的,本人英語太差,錯了不負責。
2、if the buttons does NOT become invisible, then you have NOT cracked this Crackme :)
如果按鈕沒有變為隱形,那么你就沒有破解這個程序:)
3、If you need some helps e-mail me or if you solve this protection please write me your solution. Many thanks
如果您需要一些幫助,請給我發電子郵件或解決此保護問題,請給我寫下您的解決方案。非常感謝
4、CrackMe v. 1.00 written by "aLoNg3x" E-MAIL: [email protected] ; member of "Ringzer0" URL: http://ringzer0.cjb.net
crackme v.1.00由“along3x”撰寫,電子郵件:[email protected];“ringzer0”成員網址:http://ringzer0.cjb.net
由此可看出,只要達到ok按鈕和清除這兩個按鈕最后隱藏,就是完美破解了。
程序為 Borland Delphi 4.0 - 5.0所編,直接運行aLoNg3x.1后,輸入用戶名和注冊碼,ok按鈕為灰色,不可用,看來這個程序,只有輸入正確注冊碼后,按鈕才可以用,通過輸入用戶名發現最長為十位。載入od,右鍵字符查血沒有發現可用信息,索性載入Delphi 事件到地址轉換工具 查找按鈕事件,由于發現此程序在輸入用戶名時有可能已經計算注冊碼,所以只有數入正確的注冊碼,灰色按鈕才可以,于是載入工具找到輸入用戶名的代碼地址和清除按鈕事件的代碼地址:如下


程序載入od,ctrl+G 在這三個地址上下斷,運行程序,輸入用戶名,直接被段在下面代碼:
[Asm] 純文本查看 復制代碼
00442E04    55              push    ebp                              ; 用戶名輸入 事件地址[/align][align=left]
00442E05    8BEC            mov     ebp, esp
00442E07    6A 00           push    0x0
00442E09    6A 00           push    0x0
00442E0B    53              push    ebx
00442E0C    8BD8            mov     ebx, eax
00442E0E    33C0            xor     eax, eax
00442E10    55              push    ebp
00442E11    68 9B2E4400     push    aLoNg3x_.00442E9B
00442E16    64:FF30         push    dword ptr fs:[eax]
00442E19    64:8920         mov     dword ptr fs:[eax], esp
00442E1C    8B83 D0020000   mov     eax, dword ptr ds:[ebx+0x2D0]
00442E22    8078 47 00      cmp     byte ptr ds:[eax+0x47], 0x0
00442E26    75 0F           jnz     short aLoNg3x_.00442E37
00442E28    B2 01           mov     dl, 0x1
00442E2A    8B83 CC020000   mov     eax, dword ptr ds:[ebx+0x2CC]
00442E30    8B08            mov     ecx, dword ptr ds:[eax]
00442E32    FF51 60         call    near dword ptr ds:[ecx+0x60]
00442E35    EB 49           jmp     short aLoNg3x_.00442E80
00442E37    8D55 FC         lea     edx, dword ptr ss:[ebp-0x4]
00442E3A    8B83 E0020000   mov     eax, dword ptr ds:[ebx+0x2E0]
00442E40    E8 7B04FEFF     call    aLoNg3x_.004232C0
00442E45    8B45 FC         mov     eax, dword ptr ss:[ebp-0x4]
00442E48    50              push    eax
00442E49    8D55 F8         lea     edx, dword ptr ss:[ebp-0x8]
00442E4C    8B83 DC020000   mov     eax, dword ptr ds:[ebx+0x2DC]
00442E52    E8 6904FEFF     call    aLoNg3x_.004232C0
00442E57    8B45 F8         mov     eax, dword ptr ss:[ebp-0x8]
00442E5A    5A              pop     edx
00442E5B    E8 DCFBFFFF     call    aLoNg3x_.00442A3C                ; ok 按鈕 是否可用 關鍵call
00442E60    84C0            test    al, al                           ; 測試,如果al為1,按鈕就可用,為0跳過,就不可用
00442E62    74 0F           je      short aLoNg3x_.00442E73          ; 如果這里nop掉或者匯編成jne,按鈕即可用狀態
00442E64    B2 01           mov     dl, 0x1                          ; dl 賦值 1
00442E66    8B83 CC020000   mov     eax, dword ptr ds:[ebx+0x2CC]
進入關鍵call  00442E5B    E8 DCFBFFFF     call    aLoNg3x_.00442A3C ,代碼如下:這段代碼算法:灰色按鈕變為可用,算法如下:(用戶名大于5位小于10位)  a取用戶名第一位十六進制,b取用戶名第二位十六進制,a與b相乘,再乘運算的每次次數(第一次乘1,第二次乘2,依次類推)。最后再加上用戶名的長度,全部累加起來。對累加結果取十進制再減去29a(十進制666),灰色ok按鈕即為可用。
[Asm] 純文本查看 復制代碼
00442A42    53              push    ebx[/align][align=left]00442A43    56              push    esi
00442A44    8955 F8         mov     dword ptr ss:[ebp-0x8], edx      ; 假碼放在 地址 [0018F310]=0018F498 中
00442A47    8945 FC         mov     dword ptr ss:[ebp-0x4], eax      ; 用戶名放在地址 [0018F314]=002423D0 中
00442A4A    8B45 FC         mov     eax, dword ptr ss:[ebp-0x4]
00442A4D    E8 9611FCFF     call    aLoNg3x_.00403BE8
00442A52    8B45 F8         mov     eax, dword ptr ss:[ebp-0x8]
00442A55    E8 8E11FCFF     call    aLoNg3x_.00403BE8
00442A5A    33C0            xor     eax, eax
00442A5C    55              push    ebp
00442A5D    68 E52A4400     push    aLoNg3x_.00442AE5
00442A62    64:FF30         push    dword ptr fs:[eax]
00442A65    64:8920         mov     dword ptr fs:[eax], esp
00442A68    8B45 FC         mov     eax, dword ptr ss:[ebp-0x4]
00442A6B    E8 C40FFCFF     call    aLoNg3x_.00403A34
00442A70    83F8 05         cmp     eax, 0x5                         ; 用戶名大于5位
00442A73    7E 53           jle     short aLoNg3x_.00442AC8
00442A75    8B45 FC         mov     eax, dword ptr ss:[ebp-0x4]
00442A78    E8 B70FFCFF     call    aLoNg3x_.00403A34
00442A7D    8BD8            mov     ebx, eax
00442A7F    8B45 FC         mov     eax, dword ptr ss:[ebp-0x4]
00442A82    E8 AD0FFCFF     call    aLoNg3x_.00403A34
00442A87    8BD0            mov     edx, eax
00442A89    4A              dec     edx
00442A8A    85D2            test    edx, edx
00442A8C    7E 20           jle     short aLoNg3x_.00442AAE
00442A8E    B8 01000000     mov     eax, 0x1                         ; eax 初始化1
00442A93    8B4D FC         mov     ecx, dword ptr ss:[ebp-0x4]      ; 用戶名給ecx
00442A96    0FB64C01 FF     movzx   ecx, byte ptr ds:[ecx+eax-0x1]   ; 取用戶名每一位十六進制給ecx
00442A9B    8B75 FC         mov     esi, dword ptr ss:[ebp-0x4]      ; 用戶名給esi
00442A9E    0FB63406        movzx   esi, byte ptr ds:[esi+eax]       ; 從用戶名第二位開始取每一位的十六進制給esi
00442AA2    0FAFCE          imul    ecx, esi                         ; ecx=ecx*esi 用戶名兩位十六進制相乘
00442AA5    0FAFC8          imul    ecx, eax                         ; ecx=ecx*eax  ecx乘以運算次數
00442AA8    03D9            add     ebx, ecx                         ; ebx=ebx+ecx  ecx加用戶名長度,全部累加起來
00442AAA    40              inc     eax                              ; eax+1 取下一位
00442AAB    4A              dec     edx                              ; edx-1用戶名后移一位
00442AAC  ^ 75 E5           jnz     short aLoNg3x_.00442A93
00442AAE    8B45 F8         mov     eax, dword ptr ss:[ebp-0x8]      ; 假碼給eax
00442AB1    E8 BA4BFCFF     call    aLoNg3x_.00407670                ; 取假碼十六進制 給eax
00442AB6    2BD8            sub     ebx, eax                         ; ebx-eax 用戶名計算結果和假碼十六進制相減 判斷
00442AB8    81FB 9A020000   cmp     ebx, 0x29A                       ; 判斷相減的結果是否等于29a,不等ok 按鈕為不可以,相等就可用,要相等,這里的真碼就是用戶名運算結果減去29a
00442ABE    75 04           jnz     short aLoNg3x_.00442AC4          ;(關鍵跳)這里也可以nop,或者 改為jz,ok按鈕即為可用。
00442AC0    B3 01           mov     bl, 0x1
00442AC2    EB 06           jmp     short aLoNg3x_.00442ACA
接下來,知道了使灰色ok按鈕變為可用按鈕的算法,由此得到正確的注冊碼,重新運行輸入計算出的注冊碼,點擊注冊,段在下面這里:
[Asm] 純文本查看 復制代碼
00442D64    55              push    ebp
00442D65    8BEC            mov     ebp, esp
00442D67    6A 00           push    0x0
00442D69    53              push    ebx
00442D6A    8BD8            mov     ebx, eax
00442D6C    33C0            xor     eax, eax
00442D6E    55              push    ebp
00442D6F    68 ED2D4400     push    aLoNg3x_.00442DED
00442D74    64:FF30         push    dword ptr fs:[eax]
00442D77    64:8920         mov     dword ptr fs:[eax], esp
00442D7A    8B83 D0020000   mov     eax, dword ptr ds:[ebx+0x2D0]
00442D80    8078 47 01      cmp     byte ptr ds:[eax+0x47], 0x1      ; 這里有個關鍵值[eax+0x47]=1和1比較 相等不跳,導致失敗 ,這里要跳過[eax+0x47]=0即可,不知道這個值來之哪里
00442D84    75 12           jnz     short aLoNg3x_.00442D98          ; 這里很關鍵,找了幾圈,發現不跳不過這里,程序追不到下一步算法,ok按鈕雖然可以,但是無法隱藏,于是就強行跳過這里,來到關鍵call
00442D86    BA 002E4400     mov     edx, aLoNg3x_.00442E00           ; UNICODE "0"
00442D8B    8B83 E0020000   mov     eax, dword ptr ds:[ebx+0x2E0]
00442D91    E8 5A05FEFF     call    aLoNg3x_.004232F0
00442D96    EB 3F           jmp     short aLoNg3x_.00442DD7
00442D98    8D55 FC         lea     edx, dword ptr ss:[ebp-0x4]
00442D9B    8B83 E0020000   mov     eax, dword ptr ds:[ebx+0x2E0]
00442DA1    E8 1A05FEFF     call    aLoNg3x_.004232C0                ; 取假碼長度
00442DA6    8B45 FC         mov     eax, dword ptr ss:[ebp-0x4]      ; 假碼給eax
00442DA9    E8 C248FCFF     call    aLoNg3x_.00407670                ; 取假碼十六進制 給eax
00442DAE    50              push    eax                              ; 壓入十六進制
00442DAF    8D55 FC         lea     edx, dword ptr ss:[ebp-0x4]      ; 假碼十進制給地址edx
00442DB2    8B83 DC020000   mov     eax, dword ptr ds:[ebx+0x2DC]
00442DB8    E8 0305FEFF     call    aLoNg3x_.004232C0                ; 取用戶名長度
00442DBD    8B45 FC         mov     eax, dword ptr ss:[ebp-0x4]      ; 用戶名給eax
00442DC0    5A              pop     edx                              ; 彈出假碼十六進制
00442DC1    E8 DAFDFFFF     call    aLoNg3x_.00442BA0                ; 關鍵call
00442DC6    84C0            test    al, al                           ;上面關鍵call 運算完后 返回給al
00442DC8    74 0D           je      short aLoNg3x_.00442DD7          ;關鍵跳,相等就跳

進入關鍵call ,00442DC1    E8 DAFDFFFF     call    aLoNg3x_.00442BA0,在這里浪費的時間最多,代碼如下:因為追出了程序用我們輸入的用戶名計算出了注冊碼,使ok按鈕可用,又用計算出的注冊碼推算出了一個用戶名,其算法:取計算出ok按鈕可用的注冊碼每一位十六進制,程序是從后往前取,跟了幾次發現,也可以從前往后取,這樣總結算法比較簡單,分別取計算出的注冊碼的每一位十六進制的平方,再乘以計算的位次,第一次乘1,第二次乘2,依次類推,然后在除以19,取余數加41,對其結果轉化成字符,最后按順序,每一位連接一起,形成一串字符,就是推算出的用戶名。但是這個用戶名和注冊碼輸入進去,點擊ok按鈕沒有任何反應,不能達到隱藏,還是失敗,于是輸入推算出的用戶名和注冊碼,斷到剛輸入用戶名的代碼出,就是文章,第一段代碼出,發現又計算出一串注冊碼,怎么好像是沒頭沒尾,這怎么搞,轉了好幾圈,最后實在沒有辦法,在此冷靜一下。
[Asm] 純文本查看 復制代碼
00442BA3    6A 00           push    0x0
00442BA5    6A 00           push    0x0
00442BA7    6A 00           push    0x0
00442BA9    53              push    ebx
00442BAA    56              push    esi
00442BAB    8BF2            mov     esi, edx                         ; esi=edx 假碼十六進制
00442BAD    8945 FC         mov     dword ptr ss:[ebp-0x4], eax      ; 用戶名給 地址 [0018F5BC]=00000000
00442BB0    8B45 FC         mov     eax, dword ptr ss:[ebp-0x4]
00442BB3    E8 3010FCFF     call    aLoNg3x_.00403BE8
00442BB8    33C0            xor     eax, eax                         ; eax清零
00442BBA    55              push    ebp
00442BBB    68 672C4400     push    aLoNg3x_.00442C67
00442BC0    64:FF30         push    dword ptr fs:[eax]
00442BC3    64:8920         mov     dword ptr fs:[eax], esp
00442BC6    33DB            xor     ebx, ebx                         ; ebx清零
00442BC8    8D55 F8         lea     edx, dword ptr ss:[ebp-0x8]
00442BCB    8BC6            mov     eax, esi                         ; eax=esi 假碼十六進制
00442BCD    E8 6E4AFCFF     call    aLoNg3x_.00407640                ; ecx 取假碼十六進制 eax地址放入假碼十進制
00442BD2    8D45 F4         lea     eax, dword ptr ss:[ebp-0xC]
00442BD5    8B55 F8         mov     edx, dword ptr ss:[ebp-0x8]      ; 假碼給edx
00442BD8    E8 730CFCFF     call    aLoNg3x_.00403850
00442BDD    8B45 F8         mov     eax, dword ptr ss:[ebp-0x8]      ; 假碼給eax
00442BE0    E8 4F0EFCFF     call    aLoNg3x_.00403A34                ; 取假碼長度
00442BE5    83F8 05         cmp     eax, 0x5                         ; 和5比較,說明假碼要大于5位
00442BE8    7E 60           jle     short aLoNg3x_.00442C4A          ; 如果假碼小于等于5,就跳走了
00442BEA    8B45 F8         mov     eax, dword ptr ss:[ebp-0x8]      ; 假碼給eax
00442BED    E8 420EFCFF     call    aLoNg3x_.00403A34                ; 取假碼長度
00442BF2    8BF0            mov     esi, eax                         ; esi=eax 等于假碼長度
00442BF4    83FE 01         cmp     esi, 0x1                         ; 判斷是否輸入假碼
00442BF7    7C 2F           jl      short aLoNg3x_.00442C28
00442BF9    8D45 F4         lea     eax, dword ptr ss:[ebp-0xC]      ; 假碼放入eax 地址
00442BFC    E8 0310FCFF     call    aLoNg3x_.00403C04
00442C01    8D4430 FF       lea     eax, dword ptr ds:[eax+esi-0x1]
00442C05    50              push    eax
00442C06    8B45 F8         mov     eax, dword ptr ss:[ebp-0x8]      ; 假碼給eax
00442C09    0FB64430 FF     movzx   eax, byte ptr ds:[eax+esi-0x1]   ; 從假碼最后面一位向前逐位取十六進制給eax
00442C0E    F7E8            imul    eax                              ; eax=eax*eax
00442C10    0FBFC0          movsx   eax, ax                          ; eax為相乘結果
00442C13    F7EE            imul    esi                              ; eax=eax*esi esi是假碼計算剩余次數
00442C15    B9 19000000     mov     ecx, 0x19                        ; 19 給ecx
00442C1A    99              cdq
00442C1B    F7F9            idiv    ecx                              ; eax除以ecx(19)商放在eax 余數在edx
00442C1D    83C2 41         add     edx, 0x41                        ; edx=edx+41 余數加41 取十六進制 再轉化成字符,每次運算結果都轉化成一個字符
00442C20    58              pop     eax
00442C21    8810            mov     byte ptr ds:[eax], dl
00442C23    4E              dec     esi                              ; esi-1
00442C24    85F6            test    esi, esi
00442C26  ^ 75 D1           jnz     short aLoNg3x_.00442BF9
00442C28    8B45 F4         mov     eax, dword ptr ss:[ebp-0xC]      ; 運算完后轉化成字符串給eax ,用注冊碼運算出一個用戶名
00442C2B    8B55 FC         mov     edx, dword ptr ss:[ebp-0x4]      ; 我們輸入的用戶名給edx
00442C2E    E8 110FFCFF     call    aLoNg3x_.00403B44                ; 比較call,看兩個用戶名是否相等,不能就跳走,于是復制計算出的用戶名和計算出的注冊碼試了試,仍然失敗不能隱藏ok按鈕
00442C33    75 17           jnz     short aLoNg3x_.00442C4C          ; 不等就調走
00442C35    8B45 FC         mov     eax, dword ptr ss:[ebp-0x4]
00442C38    8B55 F4         mov     edx, dword ptr ss:[ebp-0xC]
00442C3B    E8 040FFCFF     call    aLoNg3x_.00403B44
00442C40    75 04           jnz     short aLoNg3x_.00442C46
00442C42    B3 01           mov     bl, 0x1

最后想來想去,因為程序要求破解后,使ok按鈕和清除按鈕 兩個按鈕都達到隱藏,索性先放下ok按鈕,取看看清除按鈕怎么隱藏,來到下面代碼:
[Asm] 純文本查看 復制代碼
00442EA8    55              push    ebp
00442EA9    8BEC            mov     ebp, esp
00442EAB    6A 00           push    0x0
00442EAD    53              push    ebx
00442EAE    8BD8            mov     ebx, eax
00442EB0    33C0            xor     eax, eax
00442EB2    55              push    ebp
00442EB3    68 322F4400     push    aLoNg3x_.00442F32
00442EB8    64:FF30         push    dword ptr fs:[eax]
00442EBB    64:8920         mov     dword ptr fs:[eax], esp
00442EBE    8D55 FC         lea     edx, dword ptr ss:[ebp-0x4]
00442EC1    8B83 E0020000   mov     eax, dword ptr ds:[ebx+0x2E0]
00442EC7    E8 F403FEFF     call    aLoNg3x_.004232C0                ; 取假碼長度
00442ECC    8B45 FC         mov     eax, dword ptr ss:[ebp-0x4]      ; 假碼給eax
00442ECF    E8 9C47FCFF     call    aLoNg3x_.00407670                ; 取假碼十六進制給eax
00442ED4    50              push    eax                              ; 壓入十六進制
00442ED5    8D55 FC         lea     edx, dword ptr ss:[ebp-0x4]
00442ED8    8B83 DC020000   mov     eax, dword ptr ds:[ebx+0x2DC]
00442EDE    E8 DD03FEFF     call    aLoNg3x_.004232C0                ; 取用戶名長度
00442EE3    8B45 FC         mov     eax, dword ptr ss:[ebp-0x4]      ; 用戶名給eax
00442EE6    5A              pop     edx                              ; edx 彈出 假碼十六進制
00442EE7    E8 08FCFFFF     call    aLoNg3x_.00442AF4                ; 關鍵call  清除按鈕隱藏 算法,計算完后返回給al
00442EEC    84C0            test    al, al
00442EEE    74 1C           je      short aLoNg3x_.00442F0C

進入關鍵call,00442EE7    E8 08FCFFFF     call    aLoNg3x_.00442AF4 ,來到如下代碼:得到清除按鈕隱藏的注冊碼算法:取用戶名第五位十六進制除以7取余數加2,對結果求階乘,然后取用戶名每一位十六進制值乘以前面階乘的結果,最后全部累加起來,累加值再減去7a96,就是隱藏清除按鈕的注冊碼,經測試成功。
[Asm] 純文本查看 復制代碼
00442AF4    55              push    ebp
00442AF5    8BEC            mov     ebp, esp
00442AF7    83C4 F8         add     esp, -0x8
00442AFA    53              push    ebx
00442AFB    56              push    esi
00442AFC    8955 F8         mov     dword ptr ss:[ebp-0x8], edx      ; 假碼十六進制放在 地址 [0018F5B8]=0018F754 里
00442AFF    8945 FC         mov     dword ptr ss:[ebp-0x4], eax      ; 用戶名放在地址 [0018F5BC]=01D123D0 里
00442B02    8B45 FC         mov     eax, dword ptr ss:[ebp-0x4]
00442B05    E8 DE10FCFF     call    aLoNg3x_.00403BE8
00442B0A    33C0            xor     eax, eax                         ; eax 清零
00442B0C    55              push    ebp
00442B0D    68 902B4400     push    aLoNg3x_.00442B90
00442B12    64:FF30         push    dword ptr fs:[eax]
00442B15    64:8920         mov     dword ptr fs:[eax], esp
00442B18    8B45 FC         mov     eax, dword ptr ss:[ebp-0x4]      ; 用戶名給eax
00442B1B    E8 140FFCFF     call    aLoNg3x_.00403A34                ; 取用戶名長度
00442B20    83F8 05         cmp     eax, 0x5                         ; 用戶長度和5比較,用戶名必須大于5,小于等于10
00442B23    7E 53           jle     short aLoNg3x_.00442B78          ; 小于5就掛
00442B25    8B45 FC         mov     eax, dword ptr ss:[ebp-0x4]      ; 用戶名給eax
00442B28    0FB640 04       movzx   eax, byte ptr ds:[eax+0x4]       ; 取用戶名第5位十六進制給eax
00442B2C    B9 07000000     mov     ecx, 0x7                         ; ecx 賦值 7
00442B31    33D2            xor     edx, edx                         ; edx 清零
00442B33    F7F1            div     ecx                              ; eax=eax/ecx ,ecx(7),余數放在edx
00442B35    8BC2            mov     eax, edx                         ; eax=edx 等于余數
00442B37    83C0 02         add     eax, 0x2                         ; eax=eax+2
00442B3A    E8 E1FEFFFF     call    aLoNg3x_.00442A20                ;一個關鍵call,對eax結果求階乘
00442B3F    8BF0            mov     esi, eax                         ; esi=eax
00442B41    33DB            xor     ebx, ebx                         ; ebx清零
00442B43    8B45 FC         mov     eax, dword ptr ss:[ebp-0x4]      ; 用戶名給eax
00442B46    E8 E90EFCFF     call    aLoNg3x_.00403A34                ; 取用戶名長度 到eax
00442B4B    85C0            test    eax, eax
00442B4D    7E 16           jle     short aLoNg3x_.00442B65
00442B4F    BA 01000000     mov     edx, 0x1                         ; edx 初始 為1
00442B54    8B4D FC         mov     ecx, dword ptr ss:[ebp-0x4]      ; 用戶名給ecx
00442B57    0FB64C11 FF     movzx   ecx, byte ptr ds:[ecx+edx-0x1]   ; 取用戶名取每一位十六進制給ecx
00442B5C    0FAFCE          imul    ecx, esi                         ; ecx=ecx*esi
00442B5F    03D9            add     ebx, ecx                         ; ebx=ebx+ecx 全部累加再ebx 中
00442B61    42              inc     edx                              ; edx+1 用戶名取下一位
00442B62    48              dec     eax                              ; eax-1 用戶名后移一位
00442B63  ^ 75 EF           jnz     short aLoNg3x_.00442B54
00442B65    2B5D F8         sub     ebx, dword ptr ss:[ebp-0x8]      ; ebx=ebx-我輸入假碼的十六進制結果,來判斷是否等于7a96,這里就可以看出真碼就是 ebx-7a96
00442B68    81FB 697A0000   cmp     ebx, 0x7A69                      ; ebx 和 7a69 比較,不等就跳,清除按鈕就無法隱藏,相等就成功,清除按鈕隱藏
00442B6E    75 04           jnz     short aLoNg3x_.00442B74

最后隱藏了清除按鈕后,試了好幾遍,終于發現,當先執行隱藏清除按鈕后,ok按鈕由灰色變為可用,于是就輸入用戶名和計算出的注冊碼,運行還是不行,抱著試試的態度,都搞不懂了,然后,就將用戶計算出的注冊碼推算的用戶名復制到程序用戶名處,將計算出的注冊碼復制到程序注冊碼出,點擊ok,往下走,來到一下代碼,突然恍然大悟了,[eax+0x47]=0,終于等于零了,說明[eax+0x47]=0的條件是,先將清除按鈕隱藏,下來灰色ok按鈕,自動變為可用,思路應該正確了,這樣一路往下來到00442DC8    74 0D           je      short aLoNg3x_.00442DD7  這里關鍵跳,ok啦,運行后,ok按鈕隱藏。程序完美破解。
[Asm] 純文本查看 復制代碼
00442D64    55              push    ebp
00442D65    8BEC            mov     ebp, esp
00442D67    6A 00           push    0x0
00442D69    53              push    ebx
00442D6A    8BD8            mov     ebx, eax
00442D6C    33C0            xor     eax, eax
00442D6E    55              push    ebp
00442D6F    68 ED2D4400     push    aLoNg3x_.00442DED
00442D74    64:FF30         push    dword ptr fs:[eax]
00442D77    64:8920         mov     dword ptr fs:[eax], esp
00442D7A    8B83 D0020000   mov     eax, dword ptr ds:[ebx+0x2D0]
00442D80    8078 47 01      cmp     byte ptr ds:[eax+0x47], 0x1      ; [eax+0x47]=0即可,現在已經等于0
00442D84    75 12           jnz     short aLoNg3x_.00442D98          ; 這里很關鍵,找了幾圈,發現不跳不過這里,程序追不到下一步算法,ok按鈕雖然可以,但是無法隱藏,于是就強行跳過這里,來到關鍵call
00442D86    BA 002E4400     mov     edx, aLoNg3x_.00442E00           ; UNICODE "0"
00442D8B    8B83 E0020000   mov     eax, dword ptr ds:[ebx+0x2E0]
00442D91    E8 5A05FEFF     call    aLoNg3x_.004232F0
00442D96    EB 3F           jmp     short aLoNg3x_.00442DD7
00442D98    8D55 FC         lea     edx, dword ptr ss:[ebp-0x4]
00442D9B    8B83 E0020000   mov     eax, dword ptr ds:[ebx+0x2E0]
00442DA1    E8 1A05FEFF     call    aLoNg3x_.004232C0                ; 取假碼長度
00442DA6    8B45 FC         mov     eax, dword ptr ss:[ebp-0x4]      ; 假碼給eax
00442DA9    E8 C248FCFF     call    aLoNg3x_.00407670                ; 取假碼十六進制 給eax
00442DAE    50              push    eax                              ; 壓入十六進制
00442DAF    8D55 FC         lea     edx, dword ptr ss:[ebp-0x4]      ; 假碼十進制給地址edx
00442DB2    8B83 DC020000   mov     eax, dword ptr ds:[ebx+0x2DC]
00442DB8    E8 0305FEFF     call    aLoNg3x_.004232C0                ; 取用戶名長度
00442DBD    8B45 FC         mov     eax, dword ptr ss:[ebp-0x4]      ; 用戶名給eax
00442DC0    5A              pop     edx                              ; 彈出假碼十六進制
00442DC1    E8 DAFDFFFF     call    aLoNg3x_.00442BA0                ; 關鍵call
00442DC6    84C0            test    al, al                           ;al=1,ok
00442DC8    74 0D           je      short aLoNg3x_.00442DD7          ;終于成功了,往下走,ok按鈕隱藏了

到此程序破解完成,全程追出算法.
最后附上注冊機及易語言注冊機的工程文件 一起交流學習

aLoNg3x.1 注冊機 及易語言注冊機工程文件.rar

647.16 KB, 下載次數: 41, 下載積分: 吾愛幣 -1 CB

免費評分

參與人數 5吾愛幣 +4 熱心值 +5 收起 理由
wws天池 + 1 + 1 用心討論,共獲提升!
滿不懂 + 1 + 1 [email protected]
jnez112358 + 1 + 1 [email protected]
201 + 1 歡迎分析討論交流,吾愛破解論壇有你更精彩!
為海爾而戰 + 1 + 1 熱心回復!

查看全部評分

發帖前要善用論壇搜索功能,那里可能會有你要找的答案或者已經有人發布過相同內容了,請勿重復發帖。

沙發
佚丶名 發表于 2019-8-17 18:44
學習了  自己研究研究
3#
yuwen998 發表于 2019-8-17 20:05
4#
jnez112358 發表于 2019-8-18 07:48
5#
qdntj 發表于 2019-9-2 12:00
高手真是太多了。
6#
 樓主| wbz_007 發表于 2019-9-14 11:54 <
謝謝老大加精!
7#
zhu0797zhu 發表于 2019-9-17 16:23
高手,厲害
8#
TZ彈指之間 發表于 2019-9-19 01:31
學習了  自己研究研究
9#
claude.chen 發表于 2019-9-25 19:08
感謝分享,學習學習
您需要登錄后才可以回帖 登錄 | 注冊[Register]

本版積分規則 警告:禁止回復與主題無關內容,違者重罰!

快速回復 收藏帖子 返回列表 搜索

RSS訂閱|小黑屋|聯系我們|吾愛破解 - LCG - LSG ( 京ICP備16042023號 | 京公網安備 11010502030087號 )

GMT+8, 2019-10-17 15:54

Powered by Discuz!

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表
现在靠网络挣钱的方法