|
論壇說明 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
主題工具 | 顯示模式 |
2003-12-12, 02:49 AM | #1 |
榮譽會員
|
:******套用技術大全 1.5 版註冊分析
程序名:******套用技術大全 1.5 版
破解難度:易 破解工具:winhex 漢化版 破解程序: 1.進入程序後,會提示是否註冊,這時,進入註冊視窗。 2.在姓名中輸入用戶名(如:小魚兒),在註冊碼中輸入78787878(先用這個吧),按下註冊按鈕,程序提示「錯誤的註冊碼」。 3.不要關閉提示框,開啟winhex,選項「工具」表單下的「RAM編輯器」,在出現的編輯虛擬記憶體對話視窗中,找到「why100000"項目(即目標程 序),選項主要記憶體後,連續按確定2次。 4.然後選項「搜尋」表單下的「文字尋找」表單,輸入「78787878」(即剛才錯誤的註冊碼),對話視窗中的其它選項不要選。然後按確定進 行尋找。 5.會在某處發現很近的區域內連續出現4個「78787878」,中間會有2個字串,第1個即為註冊碼。我找到的是「112211871367」 6.將112211871367填入註冊對話視窗中,註冊成功! [註:] 1.軟體的註冊碼用用戶名產生. 2.軟體註冊成功後,在註冊表中寫入一個標誌:如下 [HKEY_LOCAL_MACHINE\SOFTWARE\Net_e_Studio\Why100000\Version1.5] 中建立一個"IsRegistry"="Yes"的鍵。 在軟體啟動時,只要IsRegistry的值為"yes" ,它就認為是已註冊的。 ------------------------------------------------------------------------------ 註冊碼的產生程序分析: 主程序使用ASPack 2.11壓縮,首先對其解壓縮. * Referenced by a (U)nconditional or (C)onditional Jump at Address: |:0047438A(C) |<-----從這裡開始進入第一次變化,將用戶名字串前6字元和另一個字串的6字元依次進行混合.形成一個12字元長的字串 如:輸入用戶名:"hoto" 內碼:68 6F 74 6F 00 另一字串:"十萬個" 內碼:CA AE CD F2 B8 F6 處理完後的字串:68 CA 6F AE 74 CD 6F F2 20 B8 20 F6 :0047435C 8D45FC lea eax, dword ptr [ebp-04] :0047435F E82CFDF8FF call 00404090 :00474364 8BF3 mov esi, ebx :00474366 03F6 add esi, esi :00474368 8B55F8 mov edx, dword ptr [ebp-08] <---- EDX 中為輸入的用戶名 :0047436B 8A541AFF mov dl, byte ptr [edx+ebx-01] <----取出一個字元 :0047436F 885430FE mov byte ptr [eax+esi-02], dl <----放入目標字串中 :00474373 8D45FC lea eax, dword ptr [ebp-04] :00474376 E815FDF8FF call 00404090 :0047437B 8B55F4 mov edx, dword ptr [ebp-0C]<----指向字串"十萬個" :0047437E 8A541AFF mov dl, byte ptr [edx+ebx-01] <----取出一個字元 :00474382 885430FF mov byte ptr [eax+esi-01], dl <----放入目標字串 :00474386 43 inc ebx :00474387 83FB07 cmp ebx, 00000007 :0047438A 75D0 jne 0047435C <---第一次變化是否完畢. :0047438C 8BC7 mov eax, edi :0047438E 8B55FC mov edx, dword ptr [ebp-04] :00474391 E8FEF8F8FF call 00403C94 :00474396 8B45FC mov eax, dword ptr [ebp-04] :00474399 E822FBF8FF call 00403EC0 :0047439E 8BF0 mov esi, eax :004743A0 85F6 test esi, esi :004743A2 7E30 jle 004743D4 :004743A4 BB01000000 mov ebx, 00000001 * Referenced by a (U)nconditional or (C)onditional Jump at Address:<----第二次變化,產生註冊碼. |:004743D2(C) | :004743A9 8B45FC mov eax, dword ptr [ebp-04] <----EAX指向第一次變化後的字串 :004743AC 8A4418FF mov al, byte ptr [eax+ebx-01]<----取出一個字元 :004743B0 34BB xor al, BB <----進行異或 :004743B2 25FF000000 and eax, 000000FF :004743B7 8D55E4 lea edx, dword ptr [ebp-1C] :004743BA E86D4CF9FF call 0040902C<----將取出的字元轉化為字串串 :004743BF 8B45E4 mov eax, dword ptr [ebp-1C] :004743C2 FF30 push dword ptr [eax] :004743C4 8BC7 mov eax, edi :004743C6 E8C5FCF8FF call 00404090 :004743CB 5A pop edx :004743CC 885418FF mov byte ptr [eax+ebx-01], dl<----將轉化的字串串的第一字元放入註冊碼位址中. :004743D0 43 inc ebx :004743D1 4E dec esi :004743D2 75D5 jne 004743A9 <----是否轉化完成,完成後,EAX指向產生的註冊碼. ---------------------------以下為註冊碼判斷程序------------ * Possible StringData Ref from Code Obj ->"十萬個為什麼" | :0047EB43 BAA8ED4700 mov edx, 0047EDA8 :0047EB48 E83F57FFFF call 0047428C :0047EB4D 8B45DC mov eax, dword ptr [ebp-24] :0047EB50 B90C000000 mov ecx, 0000000C :0047EB55 BA01000000 mov edx, 00000001 :0047EB5A E86955F8FF call 004040C8 :0047EB5F 8B55E0 mov edx, dword ptr [ebp-20] :0047EB62 58 pop eax :0047EB63 E86854F8FF call 00403FD0 <----判斷程序.EAX和EDX分別指向真正註冊碼與輸入的註冊碼.進入此CALL還可以知道 它只判斷前12位註冊碼,所以註冊碼12位就可以了. :0047EB68 742F je 0047EB99 <----不跳就是註冊失敗 :0047EB6A 8D55CC lea edx, dword ptr [ebp-34] :0047EB6D 8B45FC mov eax, dword ptr [ebp-04] :0047EB70 8B80EC020000 mov eax, dword ptr [eax+000002EC] :0047EB76 E835CEFAFF call 0042B9B0 :0047EB7B 8B45CC mov eax, dword ptr [ebp-34] :0047EB7E 8D55D0 lea edx, dword ptr [ebp-30] :0047EB81 E826A3F8FF call 00408EAC :0047EB86 8B45D0 mov eax, dword ptr [ebp-30] * Possible StringData Ref from Code Obj ->"000000000000000" | :0047EB89 BAC0ED4700 mov edx, 0047EDC0 :0047EB8E E83D54F8FF call 00403FD0 :0047EB93 0F855C010000 jne 0047ECF5 * Referenced by a (U)nconditional or (C)onditional Jump at Address: |:0047EB68(C) | :0047EB99 B201 mov dl, 01 :0047EB9B A118374500 mov eax, dword ptr [00453718] :0047EBA0 E8734CFDFF call 00453818 :0047EBA5 8945F8 mov dword ptr [ebp-08], eax :0047EBA8 33C0 xor eax, eax :0047EBAA 55 push ebp * Possible StringData Ref from Code Obj ->"鑞瑜媼媼 | :0047EBAB 6889EC4700 push 0047EC89 :0047EBB0 64FF30 push dword ptr fs:[eax] :0047EBB3 648920 mov dword ptr fs:[eax], esp :0047EBB6 BA02000080 mov edx, 80000002 :0047EBBB 8B45F8 mov eax, dword ptr [ebp-08] :0047EBBE E8F54CFDFF call 004538B8 :0047EBC3 33C0 xor eax, eax :0047EBC5 55 push ebp * Possible StringData Ref from Code Obj ->"崩镚G割" | :0047EBC6 683EEC4700 push 0047EC3E :0047EBCB 64FF30 push dword ptr fs:[eax] :0047EBCE 648920 mov dword ptr fs:[eax], esp :0047EBD1 B101 mov cl, 01 * Possible StringData Ref from Code Obj ->"\Software\Net_e_Studio\Why100000\Version1.5" <----寫入註冊表 | :0047EBD3 BAD8ED4700 mov edx, 0047EDD8 :0047EBD8 8B45F8 mov eax, dword ptr [ebp-08] :0047EBDB E8404DFDFF call 00453920 * Possible StringData Ref from Code Obj ->"Yss " | :0047EBE0 B90CEE4700 mov ecx, 0047EE0C * Possible StringData Ref from Code Obj ->"IsRegistry" <----寫入註冊標誌,再一次啟動程序時,它只檢查這個標誌是否這"YES" | :0047EBE5 BA18EE4700 mov edx, 0047EE18 :0047EBEA 8B45F8 mov eax, dword ptr [ebp-08] :0047EBED E8AA50FDFF call 00453C9C :0047EBF2 8D55C8 lea edx, dword ptr [ebp-38] :0047EBF5 8B45FC mov eax, dword ptr [ebp-04] :0047EBF8 8B80E0020000 mov eax, dword ptr [eax+000002E0] :0047EBFE E8ADCDFAFF call 0042B9B0 :0047EC03 8B4DC8 mov ecx, dword ptr [ebp-38] * Possible StringData Ref from Code Obj ->"RegistryUser"<----寫入註冊用戶名 | :0047EC06 BA2CEE4700 mov edx, 0047EE2C :0047EC0B 8B45F8 mov eax, dword ptr [ebp-08] :0047EC0E E88950FDFF call 00453C9C :0047EC13 8D55C4 lea edx, dword ptr [ebp-3C] :0047EC16 8B45FC mov eax, dword ptr [ebp-04] :0047EC19 8B80EC020000 mov eax, dword ptr [eax+000002EC] :0047EC1F E88CCDFAFF call 0042B9B0 :0047EC24 8B4DC4 mov ecx, dword ptr [ebp-3C] * Possible StringData Ref from Code Obj ->"RegistryCode" <----寫入註冊碼 | :0047EC27 BA44EE4700 mov edx, 0047EE44 :0047EC2C 8B45F8 mov eax, dword ptr [ebp-08] :0047EC2F E86850FDFF call 00453C9C :0047EC34 33C0 xor eax, eax :0047EC36 5A pop edx :0047EC37 59 pop ecx :0047EC38 59 pop ecx :0047EC39 648910 mov dword ptr fs:[eax], edx :0047EC3C EB2D jmp 0047EC6B :0047EC3E E9E147F8FF jmp 00403424 :0047EC43 BA84ED4700 mov edx, 0047ED84 * Possible StringData Ref from Code Obj ->" Registry Error! " <----到這裡就是註冊失敗了. | :0047EC48 B854EE4700 mov eax, 0047EE54 :0047EC4D B910000000 mov ecx, 00000010 :0047EC52 E86D55FFFF call 004741C4 :0047EC57 E8244BF8FF call 00403780 :0047EC5C E84F4BF8FF call 004037B0 :0047EC61 E9A3000000 jmp 0047ED09 :0047EC66 E8154BF8FF call 00403780 --------完----------------- 分析:註冊用戶名長度只有前6字元是有效的,與註冊碼的產生有關. 註冊碼有效長度為12位. -------------------------------------------------------------------------------- |
送花文章: 3,
|