èªç€Ÿè£œåã®ãããã°ãæé©åã«é¢ä¿ããªããããã»ã©æ³çã§ã¯ãªãéšåã®ãªããŒã¹ãšã³ãžãã¢ãªã³ã°ã«ã¯ãããããã©ã®ããã«æ©èœãããã調ã¹ãããšããã¿ã¹ã¯ãå«ãŸããŸãã èšãæããã°ãããã°ã©ã ã®å ã®ã¢ã«ãŽãªãºã ã埩å ãããã®å®è¡å¯èœãã¡ã€ã«ãæã«ããŸãã
åºæ¬ãå®ããããã€ãã®åé¡ãåé¿ããããã«ãäœãããã¯ã©ãã¯ãããã®ã§ã¯ãªãã... keygenã 90ïŒ ã§ã¯ãåœéæ³ãå«ãã梱å ãæå·åããŸãã¯ãã®ä»ã®æ¹æ³ã§ä¿è·ãããŸãã...
æåã¯èšèã§ããã ããã«
ãã®ãããkeygenãšéã¢ã»ã³ãã©ãŒãå¿ èŠã§ãã 2çªç®ã«ã€ããŠã¯ããããIda Proã§ãããšä»®å®ããŸãããã Webã§èŠã€ãã£ãå®éšçãªååã®ãªãkeygenïŒ
Idaã§keygenãã¡ã€ã«ãéããšãé¢æ°ã®ãªã¹ãã衚瀺ãããŸãã
ãã®ãªã¹ããåæããåŸãããã€ãã®æšæºé¢æ°ïŒWinMainãstartãDialogFuncïŒãšå€æ°ã®è£å©ã·ã¹ãã é¢æ°ã衚瀺ãããŸãã ãããã¯ãã¹ãŠããã¬ãŒã ã¯ãŒã¯ãæ§æããæšæºæ©èœã§ãã
éã¢ã»ã³ãã©ã¯ãããã°ã©ã ã®ã¿ã¹ã¯ã®å®è£ ãè¡šããŠãŒã¶ãŒé¢æ°ãèªèãããAPIããã³ã·ã¹ãã ã³ãŒã«ã®ã©ãããŒã§ã¯ãªããåã«sub_digitsãåŒã³åºããŸãã ãã®ãããªé¢æ°ã1ã€ãããªãããšãèãããšãé¢å¿ã®ããã¢ã«ãŽãªãºã ãŸãã¯ãã®äžéšãå«ãå¯èœæ§ãæãé«ããšæãããŸãã
keygenãå®è¡ããŸãããã 圌ã¯2ã€ã®4æ¡ã®è¡ãèŠæ±ããŸãã 8æåãäžåºŠã«ããŒèšç®æ©èœã«éä¿¡ããããšããŸãã æ©èœã³ãŒãsub_401100ãåæããŸãã 仮説ã«å¯Ÿããçãã¯ãæåã®2è¡ã«å«ãŸããŠããŸãã
var_4 = dword ptr -4
arg_0 = dword ptr 8
2è¡ç®ã¯ãé¢æ°åŒæ°ããªãã»ãã8ã§ååŸããããšãæ確ã«ç€ºããŠããŸãããã ããåŒæ°ã®ãµã€ãºã¯8ã§ã¯ãªã4ãã€ãã«çããããã«ã¯ãŒãã§ãããããã£ãŠãã»ãšãã©ã®å Žåãé¢æ°ã¯1ãã¹ã§4æåã®1è¡ãåŠçãã2ååŒã³åºãããŸãã
確ãã«çããå¯èœæ§ã®ãã質åã¯ããªãé¢æ°åŒæ°ãåãåãããã«8ãã€ãã®ãªãã»ãããäºçŽãããŠããŸãããåŒæ°ã1ã€ãããªããã4ãæããŠããã®ã§ããïŒ æãåºããšãã¹ã¿ãã¯ã¯å°ãããªããŸãã ã¹ã¿ãã¯ã«å€ãè¿œå ããããšãã¹ã¿ãã¯ãã€ã³ã¿ãŒã¯å¯Ÿå¿ãããã€ãæ°ã ãæžå°ããŸãã ãããã£ãŠãã¹ã¿ãã¯ã«é¢æ°ã®åŒæ°ãè¿œå ããåŸãåäœãéå§ããåã«ãäœãä»ã®ãã®ãã¹ã¿ãã¯ã«è¿œå ãããŸãã ããã¯æããã«ãã·ã¹ãã ã³ãŒã«é¢æ°ãåŒã³åºããåŸã«ã¹ã¿ãã¯ã«è¿œå ããããªã¿ãŒã³ã¢ãã¬ã¹ã§ãã
sub401100é¢æ°åŒã³åºããèŠã€ãã£ãããã°ã©ã å ã®å ŽæãèŠã€ããŸãã å®éã«ã¯ãDialogFunc + 97ãšDialogFunc + 113ã®2ã€ããããŸãã èå³ã®ããæé ã¯ããããå§ãŸããŸãïŒ
æ¯èŒçé·ãã³ãŒã
loc_401196: mov esi, [ebp+hDlg] mov edi, ds:SendDlgItemMessageA lea ecx, [ebp+lParam] push ecx ; lParam push 0Ah ; wParam push 0Dh ; Msg push 3E8h ; nIDDlgItem push esi ; hDlg call edi ; SendDlgItemMessageA lea edx, [ebp+var_1C] push edx ; lParam push 0Ah ; wParam push 0Dh ; Msg push 3E9h ; nIDDlgItem push esi ; hDlg call edi ; SendDlgItemMessageA pusha movsx ecx, byte ptr [ebp+lParam+2] movsx edx, byte ptr [ebp+lParam+1] movsx eax, byte ptr [ebp+lParam+3] shl eax, 8 or eax, ecx movsx ecx, byte ptr [ebp+lParam] shl eax, 8 or eax, edx shl eax, 8 or eax, ecx mov [ebp+arg_4], eax popa mov eax, [ebp+arg_4] push eax call sub_401100
æåã«ã2ã€ã®SendDlgItemMessageAé¢æ°ãé£ç¶ããŠåŒã³åºãããŸãã ãã®é¢æ°ã¯ãèŠçŽ ã®ãã³ãã«ãååŸããã¡ãã»ãŒãžã·ã¹ãã ã¡ãã»ãŒãžãéä¿¡ããŸãã ç§ãã¡ã®ã±ãŒã¹ã§ã¯ãäž¡æ¹ã®ã±ãŒã¹ã§Msgã¯0Dhã§ãããããã¯WM_GETTEXTå®æ°ã«çžåœãã16é²æ°ã§ãã ããã§ã¯ããŠãŒã¶ãŒãã2ã€ã®4æåã®æååããå ¥åãã2ã€ã®ããã¹ããã£ãŒã«ãã®å€ãååŸãããŸãã é¢æ°åã®æåAã¯ãASCII圢åŒã䜿çšãããŠããããšã瀺ããŸãïŒæåããšã«1ãã€ãïŒã
æåã®è¡ã¯lParamãªãã»ããã§æžã蟌ãŸãã2çªç®ã®è¡ã¯æããã§ã-var_1Cãªãã»ããã§ã
ãããã£ãŠãSendDlgItemMessageAé¢æ°ãå®è¡ãããåŸãã¬ãžã¹ã¿ã®çŸåšã®ç¶æ ãpushaã³ãã³ãã䜿çšããŠã¹ã¿ãã¯ã«ä¿åããã1è¡ã®1ãã€ããecxãedxãeaxã¬ãžã¹ã¿ã«æžã蟌ãŸããŸãã ãã®çµæãåã¬ãžã¹ã¿ã¯000000 ##ã®åœ¢åŒãåããŸãã 次ã«ïŒ
- SHLã³ãã³ãã¯ãeaxã¬ãžã¹ã¿ã®ãããã®å 容ã1ãã€ãã·ããããŸããã€ãŸããç®è¡ã®å 容ã«16é²æ³ã§100ãä¹ç®ãããã10é²æ³ã§256ãä¹ç®ããŸãã ãã®çµæãeaxã®åœ¢åŒã¯0000 ## 00ïŒããšãã°ã00001200ïŒã«ãªããŸãã
- ORæŒç®ã¯ãåä¿¡ããeaxãšecxã¬ãžã¹ã¿ã®éã§000000 ##ã®åœ¢åŒã§å®è¡ãããŸãïŒ00000034ãšããŸãïŒã ãã®çµæãeaxã¯00001234ã®ããã«ãªããŸãã
- æååã®æåŸã®4ãã€ãç®ã¯ãç¡æãã®exxã«æžã蟌ãŸããŸãã
- exã®å 容ã¯åã³ãã€ãåäœã§ã·ããããã次ã®ORã³ãã³ãã®ããã«äžäœãã€ãã®ã¹ããŒã¹ã解æŸããŸãã eaxã¯00123400ã®ããã«ãªããŸãã
- ä»åã¯exãšedxã®éã§ORåœä»€ãå®è¡ãããŸããããã«ã¯ãããšãã°00000056ãå«ãŸããŸããexã¯00123456ã§ãã
- 2ã€ã®ã¹ãããSHL eaxã8ããã³ORãç¹°ãè¿ããããã®çµæãæ°ããecxã³ã³ãã³ãïŒ00000078ïŒããçµäºãeaxã«è¿œå ãããŸãã ãã®çµæãeaxã¯å€12345678ãä¿åããŸãã
次ã«ããã®å€ã¯ãå€æ°ãã«æ ŒçŽãããŸã-ã¡ã¢ãªé åã®ãªãã»ããarg_4ã«ã 以åã«ã¹ã¿ãã¯ã«ä¿åãããŠããã¬ãžã¹ã¿ã®ç¶æ ïŒä»¥åã®å€ïŒã¯ãã¹ã¿ãã¯ãããã«ãããã¬ãžã¹ã¿ã«é åžãããŸãã 次ã«ããªãã»ããarg_4ã®å€ãã¬ãžã¹ã¿eaxã«åã³æžã蟌ãŸãããã®å€ãã¬ãžã¹ã¿ããã¹ã¿ãã¯ã«ããã·ã¥ãããŸãã ãã®åŸãsub_401100é¢æ°åŒã³åºããç¶ããŸãã
ãããã®æäœã®æå³ã¯äœã§ããïŒ çè«ã䜿ããã«ãå®éã«èŠã€ããããšã¯éåžžã«ç°¡åã§ãã ãããã¬ãŒã«ãã¬ãŒã¯ãã€ã³ããèšå®ããŸããããšãã°ãããã·ã¥eaxåœä»€ïŒãµãé¢æ°ãåŒã³åºãããçŽåïŒã«ããã°ã©ã ãå®è¡ããŸãã Keygenãèµ·åããåç·ãèŠæ±ããŸãã qwerãštyuiã«å ¥ãããã¬ãŒã¯ãã€ã³ãã§åæ¢ããåŸãå€ïŒ72657771ã確èªããŸããããã¹ãã«ãã³ãŒãããŸãïŒrewqã ã€ãŸãããããã®æäœã®ç©ççãªæå³ã¯è¡å転ã§ãã
ããã§ãsub_401100ã§å ã®è¡ã®1ã€ãããã«ã¯ãŒãã®ãµã€ãºã§éä¿¡ãããäžäžéããŸã«ãªãããã¹ãŠã®æšæºã¬ãžã¹ã¿ã«åãŸãããšãããããŸããã ãããããsub_401100ã®æé ãã芧ãã ããã
å¥ã®æ¯èŒçé·ãã³ãŒã
sub_401100 proc near var_4= dword ptr -4 arg_0= dword ptr 8 push ebp mov ebp, esp push ecx push ebx push esi push edi pusha mov ecx, [ebp+arg_0] mov eax, ecx shl eax, 10h not eax add ecx, eax mov eax, ecx shr eax, 5 xor eax, ecx lea ecx, [eax+eax*8] mov edx, ecx shr edx, 0Dh xor ecx, edx mov eax, ecx shl eax, 9 not eax add ecx, eax mov eax, ecx shr eax, 11h xor eax, ecx mov [ebp+var_4], eax popa mov eax, [ebp+var_4] pop edi pop esi pop ebx mov esp, ebp pop ebp retn sub_401100 endp
æåã¯ãããã§ã¯äœãèå³æ·±ãããšã¯ãããŸãããã¬ãžã¹ã¿ã®ç¶æ ã¯æ éã«ã¹ã¿ãã¯ã«ä¿åãããŸãã ãããŠãããã«ç§ãã¡ãèå³ãæã£ãŠããæåã®ããŒã ããããŸã-PUSHAã®æ瀺ã«åŸããŸãã ãªãã»ããarg_0ã«ä¿åãããŠããé¢æ°åŒæ°ãexxã«æžã蟌ã¿ãŸãã 次ã«ããã®å€ãeaxã«è»¢éãããŸãã ãããŠãååãåãæšãŠãŸããæãåºããšããã®äŸã§ã¯72657771ãsub_401100ã«æž¡ãããŸãã 10hïŒ10é²æ°ã§16ïŒã ãå·Šã«è«çã·ãããããšãã¬ãžã¹ã¿ã®å€ã77710000ã«å€ãããŸãã
ãã®åŸãã¬ãžã¹ã¿å€ã¯NOTåœä»€ã«ãã£ãŠå転ãããŸãã ããã¯ãã¬ãžã¹ã¿ã®ãã€ããªè¡šçŸã§ã¯ããã¹ãŠã®ãŒãã1ã«å€ããããŠãããããŒãã«å€ããããšãæå³ããŸãã ãã®åœä»€ãå®è¡ããåŸã®ã¬ãžã¹ã¿ã«ã¯ã888EFFFFFãå«ãŸããŠããŸãã
ADDåœä»€ã¯ãçµæã®å€ãåŒæ°ã®å ã®å€ã«è¿œå ïŒå ç®ããã©ã¹ãªã©ïŒããŸãããã®å€ã¯ãexxã¬ãžã¹ã¿ã«ãŸã å«ãŸããŠããŸãïŒãªãexxã§ã次ã«exaxã§èšè¿°ãããã®ãã¯æããã§ãïŒã çµæã¯exã«ä¿åãããŸãã ãã®æäœãå®äºããåŸã®exhã®å€èŠ³ã確èªããŸãïŒFAF47770ã
ãã®çµæã¯exxããexahã«ã³ããŒããããã®åŸãSHRåœä»€ãexaxã®ã³ã³ãã³ãã«é©çšãããŸãã ãã®æäœã¯SHLã®å察ã§ããåŸè ãæ°åãå·Šã«ã·ããããå Žåãæåã®æ°åã¯å³ã«ã·ããããŸãã è«ççãªå·Šã·ããæŒç®ã2ã®çŽ¯ä¹ã®ä¹ç®ãšåçã§ããããã«ãè«ççãªå³ã·ããæŒç®ã¯åãé€ç®ãšåçã§ãã ãã®æäœã®çµæã§ãã7D7A3BBã®å€ãèŠãŠã¿ãŸãããã
次ã«ãexãšexã®å 容ã«å¯ŸããŠå¥ã®æŽåãç¯ããŸããXORåœä»€ã¯ã¢ãžã¥ã2å ç®ãŸãã¯ãæä»çORãã§ãã 倧ãŸãã«èšã£ãŠããã®æŒç®ã®æ¬è³ªã¯ããªãã©ã³ããæ確ãªå Žåã«ã®ã¿ãçµæãåäžïŒçïŒã«çããããšã§ãã ããšãã°ã0 xor 1ã®å Žåãçµæã¯trueãŸãã¯1ã§ãã 0 xor 0ãŸãã¯1 xor 1ã®å Žåãçµæã¯falseãŸãã¯ãŒãã«ãªããŸãã ãã®å Žåãã¬ãžã¹ã¿eaxïŒ7D7A3BBïŒããã³exxïŒFAF47770ïŒã«é¢ããŠãã®åœä»€ã«åŸã£ãçµæãFD23D4CBã®å€ãã¬ãžã¹ã¿eaxã«æžã蟌ãŸããŸãã
次ã®LEA ecxã³ãã³ã[eax + eax * 8]ã¯ãexã9ã§ãšã¬ã¬ã³ããã€ç°¡åã«ä¹ç®ããçµæãexxã«æžã蟌ã¿ãŸãã 次ã«ããã®å€ã¯edxã«ã³ããŒããã13æ¡å³ã«ã·ãããããŸããedxã§73213ãexxã§E6427B23ã«ãªããŸãã ãã®åŸ-åã³Xorim exxãšedxãexx E6454930ã§æžããŸãã ãããeaxã«ã³ããŒãã8A926000ã ãå·Šã«9æ¡ã·ããããŠãããå転ããŠ756D9FFFãååŸããŸãã ãã®å€ãexxã¬ãžã¹ã¿ã«è¿œå ããŸã-5BB2E92FããããŸãã ãããeaxã«ã³ããŒãã17æ¡-2DD9-ã§æ¢ã«å³ã«ã·ããããexxã§Xorimãã·ããããŸãã æçµçã«5BB2C4F6ã«ãªããŸãã ãããã...ãããã...äœããããŸããïŒ ãªã«ãã¿ããªïŒ
ãããã£ãŠããã®å€ããªãã»ããvar_4ã®ã¡ã¢ãªé åã«ä¿åããã¬ãžã¹ã¿ã¹ããŒã¿ã¹ã¹ã¿ãã¯ããããŒãããåã³ã¡ã¢ãªããæçµå€ãååŸããæåŸã«ã¹ã¿ãã¯ã®å é ã«æ®ã£ãŠããã¬ãžã¹ã¿ç¶æ ãååŸããŸãã é¢æ°ãçµäºããŸãã äžæ³ïŒ...ããããåã¶ã«ã¯ææå°æ©ã§ããæåã®é¢æ°åŒã³åºãã®çµäºæç¹ã§ã¯ãæ倧4ã€ã®åè§æåãæ®ã£ãŠããŸããããŸã çã®æååãæ®ã£ãŠããããããããç¥ã®åœ¢ã«ããå¿ èŠããããŸãã
éã¢ã»ã³ãã©ãŒããéã³ã³ãã€ã©ãŒãŸã§ãããé«ãã¬ãã«ã®åæã«ç§»ããŸãããã Cã®ãããªæ¬äŒŒã³ãŒãã®åœ¢åŒã§ãsub_401100åŒã³åºããå«ãDialogFuncé¢æ°å šäœãæ³åããŠãã ããã å®éããã®éã¢ã»ã³ãã©ã¯ãç䌌ã³ãŒãããšåŒã³ãŸããå®éãããã¯å®éã«ã¯Cã³ãŒãã§ãããèŠèŠããã ãã§ãã ç§ãã¡ã¯èŠãŸãïŒ
ãã£ãšã³ãŒããå¿
èŠã§ãã ãžã°ã©ãããæ§ç¯ããå¿
èŠããããŸãã
SendDlgItemMessageA(hDlg, 1000, 0xDu, 0xAu, (LPARAM)&lParam); SendDlgItemMessageA(hDlg, 1001, 0xDu, 0xAu, (LPARAM)&v15); v5 = sub_401100((char)lParam | ((SBYTE1(lParam) | ((SBYTE2(lParam) | (SBYTE3(lParam) << 8)) << 8)) << 8)); v6 = 0; do { v21[v6] = v5 % 0x24; v7 = v21[v6]; v5 /= 0x24u; if ( v7 >= 10 ) v8 = v7 + 55; else v8 = v7 + 48; v21[v6++] = v8; } while ( v6 < 4 ); v22 = 0; v9 = sub_401100(v15 | ((v16 | ((v17 | (v18 << 8)) << 8)) << 8)); v10 = 0; do { v19[v10] = v9 % 0x24; v11 = v19[v10]; v9 /= 0x24u; if ( v11 >= 10 ) v12 = v11 + 55; else v12 = v11 + 48; v19[v10++] = v12; } while ( v10 < 4 ); v20 = 0; wsprintfA(&v13, "%s-%s-%s-%s", &lParam, &v15, v21, v19); SendDlgItemMessageA(hDlg, 1002, 0xCu, 0, (LPARAM)&v13);
ããã¯ãã¢ã»ã³ããªã®ãªã¹ããããèªã¿ããããªã£ãŠããŸãã ãã ãããã¹ãŠã®å Žåã«ãããŠããã³ã³ãã€ã©ãŒã«é Œãããšãã§ããããã§ã¯ãããŸãããã¢ã»ã³ãã©ãŒããžãã¯ã®ã¹ã¬ããããããã¬ãŒã®ã¬ãžã¹ã¿ãŒãšã¹ã¿ãã¯ã®ã¹ããŒã¿ã¹ãæ°æéç£èŠããFSBãŸãã¯FBIã«èª¬æãæžãæºåãå¿ èŠã§ãã å€æ¹ã«ã¯ãç¹ã«é¢çœããžã§ãŒã¯ããããŸãã
ç§ãèšã£ãããã«ãèªæžã¯ç°¡åã§ãããããã§ãå®ç§ã«ã¯ã»ã©é ãã§ãã ã³ãŒããåæããŠãå€æ°ã«ããããããååãä»ããŸãããã ããŒå€æ°ã«ã¯æ確ã§è«ççãªååãä»ããã«ãŠã³ã¿ãŒã«ã¯ãŸããŸãã·ã³ãã«ã«ããŸãã
åããäžåœèªãããã³ãã¥ãŒèªãžã®ç¿»èš³ã®ã¿ã
SendDlgItemMessageA(hDlg, 1000, 0xDu, 0xAu, (LPARAM)&first_given_string); SendDlgItemMessageA(hDlg, 1001, 0xDu, 0xAu, (LPARAM)&second_given_string); first_given_string_encoded = sub_401100((char)first_given_string | ((SBYTE1(first_given_string) | ((SBYTE2(first_given_string) | (SBYTE3(first_given_string) << 8)) << 8)) << 8)); i = 0; do { first_result_string[i] = first_string_encoded % 0x24; temp_char = first_result_string[i]; first_string_encoded /= 0x24u; if ( temp_char >= 10 ) next_char = temp_char + 55; else next_char = temp_char + 48; first_result_string[i++] = next_char; } while ( i < 4 ); some_kind_of_data = 0; second_string_encoded = sub_401100(byte1 | ((byte2 | ((byte3 | (byte4 << 8)) << 8)) << 8)); j = 0; do { second_result_string[j] = second_string_encoded % 0x24; temp_char2 = second_result_string[j]; second_string_encoded /= 0x24u; if ( temp_char2 >= 10 ) next_char2 = temp_char2 + 55; else next_char2 = temp_char2 + 48; second_result_string[j++] = next_char2; } while ( j < 4 ); yet_another_some_kind_of_data = 0; wsprintfA(&buffer, "%s-%s-%s-%s", &first_given_string, &second_given_string, first_result_string, second_result_string); SendDlgItemMessageA(hDlg, 1002, 0xCu, 0, (LPARAM)&buffer);
ãšãããŒã°
ã¬ãã«å®äº ã 次ã®ïŒãããŠæåŸã®ïŒç®æšã¯ããã®ã¢ã«ãŽãªãºã ã«åŸã£ãŠkeygenãæžãããšã§ãã ç¿æ £ãããLinuxã·ã§ã«ã¹ã¯ãªããèšèªbashã§èšè¿°ããŸãã test $ {ïŒreg1} -gt && reg1 = `echo" $ {reg1ïŒ-8} "`ã¯ã8æåãŸã§ã®ãšãã¥ã¬ãŒããããã¬ãžã¹ã¿å€ãå«ãæååã®åãæšãŠã§ãã æäœãå®è¡ãããšãã«ãäœåãªäžçŽããããããã«è¿œå ãããŸããã æ®ãã¯ãã¹ãŠãã¢ã»ã³ãã©ãŒãªã¹ãã®éªšã®æãããšãã¥ã¬ãŒã·ã§ã³ã§ãã ç°åžžãªããã°ã©ãã³ã°ãããäžã«ç€ºããŸããããïŒ..
æªåé«ãsub_401100ã®bashå®è£ ïŒ
KeygenããŒæ©èœïŒ
ãã¹ããšæ¯èŒïŒ
ãããã«
Linuxã³ã³ãœãŒã«ããäžéšã®ã²ãŒã ãœãããŠã§ã¢ã®ããŒãçŽæ¥çæã§ããããã«ãªããŸããããããã¯ããã€ãã®çç±ã§äžå¯èœã§ãããŸãããã®keygenãã©ã®ãããªãœãããŠã§ã¢ã察象ãšããŠãããããããªã-ã€ã³ã¿ãŒãããã§ã©ã³ãã ã«ããŠã³ããŒãããŸããã 第äºã«ãåœã®ããŒãšã©ã€ã»ã³ã¹ã®ãªãå°æãœãããŠã§ã¢ã®äœ¿çšã¯åœéæ³ã§çŠæ¢ãããŠããŸãã ;ïŒ