Доброго здравия всем. Имеется кейген. Распаковал, открыл в ида. Нашел участок где генерируется ключ в зависимости от введенных данных, но неману с ним совладать. Код в любом случаее в отимизированном виде. Как переделать в обычный ? Что Посоветуете ??
Код (Text): proc near ; CODE XREF: sub_406442+Cp .rdata:00408270 ; sub_40C633+11Dp ... .rdata:00408270 .rdata:00408270 arg_0 = dword ptr 8 .rdata:00408270 arg_4 = dword ptr 0Ch .rdata:00408270 arg_8 = dword ptr 10h .rdata:00408270 .rdata:00408270 push ebp .rdata:00408271 mov ebp, esp .rdata:00408273 push edi .rdata:00408274 push esi .rdata:00408275 mov esi, [ebp+arg_4] .rdata:00408278 mov ecx, [ebp+arg_8] .rdata:0040827B mov edi, [ebp+arg_0] .rdata:0040827E mov eax, ecx .rdata:00408280 mov edx, ecx .rdata:00408282 add eax, esi .rdata:00408284 cmp edi, esi .rdata:00408286 jbe short loc_408290 .rdata:00408288 cmp edi, eax .rdata:0040828A jb loc_408434 .rdata:00408290 .rdata:00408290 loc_408290: ; CODE XREF: sub_408270+16j .rdata:00408290 cmp ecx, 100h .rdata:00408296 jb short loc_4082B7 .rdata:00408298 cmp dword_410E28, 0 .rdata:0040829F jz short loc_4082B7 .rdata:004082A1 push edi .rdata:004082A2 push esi .rdata:004082A3 and edi, 0Fh .rdata:004082A6 and esi, 0Fh .rdata:004082A9 cmp edi, esi .rdata:004082AB pop esi .rdata:004082AC pop edi .rdata:004082AD jnz short loc_4082B7 .rdata:004082AF pop esi .rdata:004082B0 pop edi .rdata:004082B1 pop ebp .rdata:004082B2 jmp sub_40B51D .rdata:004082B7 ; --------------------------------------------------------------------------- .rdata:004082B7 .rdata:004082B7 loc_4082B7: ; CODE XREF: sub_408270+26j .rdata:004082B7 ; sub_408270+2Fj ... .rdata:004082B7 test edi, 3 .rdata:004082BD jnz short loc_4082D4 .rdata:004082BF shr ecx, 2 .rdata:004082C2 and edx, 3 .rdata:004082C5 cmp ecx, 8 .rdata:004082C8 jb short loc_4082F4 .rdata:004082CA rep movsd .rdata:004082CC jmp off_4083E4[edx*4] .rdata:004082CC ; --------------------------------------------------------------------------- .rdata:004082D3 align 4 .rdata:004082D4 .rdata:004082D4 loc_4082D4: ; CODE XREF: sub_408270+4Dj .rdata:004082D4 mov eax, edi .rdata:004082D6 mov edx, 3 .rdata:004082DB sub ecx, 4 .rdata:004082DE jb short loc_4082EC .rdata:004082E0 and eax, 3 .rdata:004082E3 add ecx, eax .rdata:004082E5 jmp dword ptr loc_4082F4+4[eax*4] .rdata:004082EC ; --------------------------------------------------------------------------- .rdata:004082EC .rdata:004082EC loc_4082EC: ; CODE XREF: sub_408270+6Ej .rdata:004082EC jmp dword ptr loc_4083F4[ecx*4] .rdata:004082EC ; --------------------------------------------------------------------------- .rdata:004082F3 align 4 .rdata:004082F4 .rdata:004082F4 loc_4082F4: ; CODE XREF: sub_408270+58j .rdata:004082F4 ; sub_408270+B6j ... .rdata:004082F4 jmp off_408378[ecx*4] .rdata:004082F4 ; --------------------------------------------------------------------------- .rdata:004082FB align 4 .rdata:004082FC dd offset loc_408308 .rdata:00408300 dd offset loc_408334 .rdata:00408304 dd offset loc_408358 .rdata:00408308 ; --------------------------------------------------------------------------- .rdata:00408308 .rdata:00408308 loc_408308: ; DATA XREF: sub_408270+8Co .rdata:00408308 and edx, ecx .rdata:0040830A mov al, [esi] .rdata:0040830C mov [edi], al .rdata:0040830E mov al, [esi+1] .rdata:00408311 mov [edi+1], al .rdata:00408314 mov al, [esi+2] .rdata:00408317 shr ecx, 2 .rdata:0040831A mov [edi+2], al .rdata:0040831D add esi, 3 .rdata:00408320 add edi, 3 .rdata:00408323 cmp ecx, 8 .rdata:00408326 jb short loc_4082F4 .rdata:00408328 rep movsd .rdata:0040832A jmp off_4083E4[edx*4] .rdata:0040832A ; --------------------------------------------------------------------------- .rdata:00408331 align 4 .rdata:00408334 .rdata:00408334 loc_408334: ; DATA XREF: sub_408270+90o .rdata:00408334 and edx, ecx .rdata:00408336 mov al, [esi] .rdata:00408338 mov [edi], al .rdata:0040833A mov al, [esi+1] .rdata:0040833D shr ecx, 2 .rdata:00408340 mov [edi+1], al .rdata:00408343 add esi, 2 .rdata:00408346 add edi, 2 .rdata:00408349 cmp ecx, 8 .rdata:0040834C jb short loc_4082F4 .rdata:0040834E rep movsd .rdata:00408350 jmp off_4083E4[edx*4] .rdata:00408350 ; --------------------------------------------------------------------------- .rdata:00408357 align 4 .rdata:00408358 .rdata:00408358 loc_408358: ; DATA XREF: sub_408270+94o .rdata:00408358 and edx, ecx .rdata:0040835A mov al, [esi] .rdata:0040835C mov [edi], al .rdata:0040835E add esi, 1 .rdata:00408361 shr ecx, 2 .rdata:00408364 add edi, 1 .rdata:00408367 cmp ecx, 8 .rdata:0040836A jb short loc_4082F4 .rdata:0040836C rep movsd .rdata:0040836E jmp off_4083E4[edx*4] .rdata:0040836E ; --------------------------------------------------------------------------- .rdata:00408375 align 4 .rdata:00408378 off_408378 dd offset loc_4083DB ; DATA XREF: sub_408270:loc_4082F4r .rdata:0040837C dd offset loc_4083C8 .rdata:00408380 dd offset loc_4083C0 .rdata:00408384 dd offset loc_4083B8 .rdata:00408388 dd offset loc_4083B0 .rdata:0040838C dd offset loc_4083A8 .rdata:00408390 dd offset loc_4083A0 .rdata:00408394 dd offset loc_408398 .rdata:00408398 ; --------------------------------------------------------------------------- .rdata:00408398 .rdata:00408398 loc_408398: ; CODE XREF: sub_408270:loc_4082F4j .rdata:00408398 ; DATA XREF: sub_408270+124o .rdata:00408398 mov eax, [esi+ecx*4-1Ch] .rdata:0040839C mov [edi+ecx*4-1Ch], eax .rdata:004083A0 .rdata:004083A0 loc_4083A0: ; CODE XREF: sub_408270:loc_4082F4j .rdata:004083A0 ; DATA XREF: sub_408270+120o .rdata:004083A0 mov eax, [esi+ecx*4-18h] .rdata:004083A4 mov [edi+ecx*4-18h], eax .rdata:004083A8 .rdata:004083A8 loc_4083A8: ; CODE XREF: sub_408270:loc_4082F4j .rdata:004083A8 ; DATA XREF: sub_408270+11Co .rdata:004083A8 mov eax, [esi+ecx*4-14h] .rdata:004083AC mov [edi+ecx*4-14h], eax .rdata:004083B0 .rdata:004083B0 loc_4083B0: ; CODE XREF: sub_408270:loc_4082F4j .rdata:004083B0 ; DATA XREF: sub_408270+118o .rdata:004083B0 mov eax, [esi+ecx*4-10h] .rdata:004083B4 mov [edi+ecx*4-10h], eax .rdata:004083B8 .rdata:004083B8 loc_4083B8: ; CODE XREF: sub_408270:loc_4082F4j .rdata:004083B8 ; DATA XREF: sub_408270+114o .rdata:004083B8 mov eax, [esi+ecx*4-0Ch] .rdata:004083BC mov [edi+ecx*4-0Ch], eax .rdata:004083C0 .rdata:004083C0 loc_4083C0: ; CODE XREF: sub_408270:loc_4082F4j .rdata:004083C0 ; DATA XREF: sub_408270+110o .rdata:004083C0 mov eax, [esi+ecx*4-8] .rdata:004083C4 mov [edi+ecx*4-8], eax .rdata:004083C8 .rdata:004083C8 loc_4083C8: ; CODE XREF: sub_408270:loc_4082F4j .rdata:004083C8 ; DATA XREF: sub_408270+10Co .rdata:004083C8 mov eax, [esi+ecx*4-4] .rdata:004083CC mov [edi+ecx*4-4], eax .rdata:004083D0 lea eax, ds:0[ecx*4] .rdata:004083D7 add esi, eax .rdata:004083D9 add edi, eax .rdata:004083DB .rdata:004083DB loc_4083DB: ; CODE XREF: sub_408270:loc_4082F4j .rdata:004083DB ; DATA XREF: sub_408270:off_408378o .rdata:004083DB jmp off_4083E4[edx*4] .rdata:004083DB ; --------------------------------------------------------------------------- .rdata:004083E2 align 4 .rdata:004083E4 off_4083E4 dd offset loc_4083F4 ; DATA XREF: sub_408270+5Cr .rdata:004083E4 ; sub_408270+BAr ... .rdata:004083E8 dd offset loc_4083FC .rdata:004083EC dd offset loc_408408 .rdata:004083F0 dd offset loc_40841C .rdata:004083F4 ; --------------------------------------------------------------------------- .rdata:004083F4 .rdata:004083F4 loc_4083F4: ; CODE XREF: sub_408270+5Cj .rdata:004083F4 ; sub_408270+BAj ... .rdata:004083F4 mov eax, [ebp+arg_0] .rdata:004083F7 pop esi .rdata:004083F8 pop edi .rdata:004083F9 leave .rdata:004083FA retn .rdata:004083FA ; --------------------------------------------------------------------------- .rdata:004083FB align 4 .rdata:004083FC .rdata:004083FC loc_4083FC: ; CODE XREF: sub_408270+5Cj .rdata:004083FC ; sub_408270+BAj ... .rdata:004083FC mov al, [esi] .rdata:004083FE mov [edi], al .rdata:00408400 mov eax, [ebp+arg_0] .rdata:00408403 pop esi .rdata:00408404 pop edi .rdata:00408405 leave .rdata:00408406 retn .rdata:00408406 ; --------------------------------------------------------------------------- .rdata:00408407 align 4 .rdata:00408408 .rdata:00408408 loc_408408: ; CODE XREF: sub_408270+5Cj .rdata:00408408 ; sub_408270+BAj ... .rdata:00408408 mov al, [esi] .rdata:0040840A mov [edi], al .rdata:0040840C mov al, [esi+1] .rdata:0040840F mov [edi+1], al .rdata:00408412 mov eax, [ebp+arg_0] .rdata:00408415 pop esi .rdata:00408416 pop edi .rdata:00408417 leave .rdata:00408418 retn .rdata:00408418 ; --------------------------------------------------------------------------- .rdata:00408419 align 4 .rdata:0040841C .rdata:0040841C loc_40841C: ; CODE XREF: sub_408270+5Cj .rdata:0040841C ; sub_408270+BAj ... .rdata:0040841C mov al, [esi] .rdata:0040841E mov [edi], al .rdata:00408420 mov al, [esi+1] .rdata:00408423 mov [edi+1], al .rdata:00408426 mov al, [esi+2] .rdata:00408429 mov [edi+2], al .rdata:0040842C mov eax, [ebp+arg_0] .rdata:0040842F pop esi .rdata:00408430 pop edi .rdata:00408431 leave .rdata:00408432 retn .rdata:00408432 ; --------------------------------------------------------------------------- .rdata:00408433 align 4 .rdata:00408434 .rdata:00408434 loc_408434: ; CODE XREF: sub_408270+1Aj .rdata:00408434 lea esi, [ecx+esi-4] .rdata:00408438 lea edi, [ecx+edi-4] .rdata:0040843C test edi, 3 .rdata:00408442 jnz short loc_408468 .rdata:00408444 shr ecx, 2 .rdata:00408447 and edx, 3 .rdata:0040844A cmp ecx, 8 .rdata:0040844D jb short loc_40845C .rdata:0040844F std .rdata:00408450 rep movsd .rdata:00408452 cld .rdata:00408453 jmp off_408580[edx*4] .rdata:00408453 ; --------------------------------------------------------------------------- .rdata:0040845A align 4 .rdata:0040845C .rdata:0040845C loc_40845C: ; CODE XREF: sub_408270+1DDj .rdata:0040845C ; sub_408270+238j ... .rdata:0040845C neg ecx .rdata:0040845E jmp off_408530[ecx*4] .rdata:0040845E ; --------------------------------------------------------------------------- .rdata:00408465 align 4 .rdata:00408468 .rdata:00408468 loc_408468: ; CODE XREF: sub_408270+1D2j .rdata:00408468 mov eax, edi .rdata:0040846A mov edx, 3 .rdata:0040846F cmp ecx, 4 .rdata:00408472 jb short loc_408480 .rdata:00408474 and eax, 3 .rdata:00408477 sub ecx, eax .rdata:00408479 jmp dword ptr loc_408480+4[eax*4] .rdata:00408480 ; --------------------------------------------------------------------------- .rdata:00408480 .rdata:00408480 loc_408480: ; CODE XREF: sub_408270+202j .rdata:00408480 ; DATA XREF: sub_408270+209r .rdata:00408480 jmp off_408580[ecx*4] .rdata:00408480 ; --------------------------------------------------------------------------- .rdata:00408487 align 4 .rdata:00408488 xchg eax, esp .rdata:00408489 test [eax+0], al .rdata:0040848C mov eax, 0E0004084h .rdata:00408491 test [eax+0], al .rdata:00408494 mov al, [esi+3] .rdata:00408497 and edx, ecx .rdata:00408499 mov [edi+3], al .rdata:0040849C sub esi, 1 .rdata:0040849F shr ecx, 2 .rdata:004084A2 sub edi, 1 .rdata:004084A5 cmp ecx, 8 .rdata:004084A8 jb short loc_40845C .rdata:004084AA std .rdata:004084AB rep movsd .rdata:004084AD cld .rdata:004084AE jmp off_408580[edx*4] .rdata:004084AE ; --------------------------------------------------------------------------- .rdata:004084B5 align 4 .rdata:004084B8 mov al, [esi+3] .rdata:004084BB and edx, ecx .rdata:004084BD mov [edi+3], al .rdata:004084C0 mov al, [esi+2] .rdata:004084C3 shr ecx, 2 .rdata:004084C6 mov [edi+2], al .rdata:004084C9 sub esi, 2 .rdata:004084CC sub edi, 2 .rdata:004084CF cmp ecx, 8 .rdata:004084D2 jb short loc_40845C .rdata:004084D4 std .rdata:004084D5 rep movsd .rdata:004084D7 cld .rdata:004084D8 jmp off_408580[edx*4] .rdata:004084D8 ; --------------------------------------------------------------------------- .rdata:004084DF align 10h .rdata:004084E0 mov al, [esi+3] .rdata:004084E3 and edx, ecx .rdata:004084E5 mov [edi+3], al .rdata:004084E8 mov al, [esi+2] .rdata:004084EB mov [edi+2], al .rdata:004084EE mov al, [esi+1] .rdata:004084F1 shr ecx, 2 .rdata:004084F4 mov [edi+1], al .rdata:004084F7 sub esi, 3 .rdata:004084FA sub edi, 3 .rdata:004084FD cmp ecx, 8 .rdata:00408500 jb loc_40845C .rdata:00408506 std .rdata:00408507 rep movsd .rdata:00408509 cld .rdata:0040850A jmp off_408580[edx*4] .rdata:0040850A ; --------------------------------------------------------------------------- .rdata:00408511 align 4 .rdata:00408514 dd offset loc_408534 .rdata:00408518 dd offset loc_40853C .rdata:0040851C dd offset loc_408544 .rdata:00408520 dd offset loc_40854C .rdata:00408524 dd offset loc_408554 .rdata:00408528 dd offset loc_40855C .rdata:0040852C dd offset loc_408564 .rdata:00408530 off_408530 dd offset loc_408577 ; DATA XREF: sub_408270+1EEr .rdata:00408534 ; --------------------------------------------------------------------------- .rdata:00408534 .rdata:00408534 loc_408534: ; DATA XREF: sub_408270+2A4o .rdata:00408534 mov eax, [esi+ecx*4+1Ch] .rdata:00408538 mov [edi+ecx*4+1Ch], eax .rdata:0040853C .rdata:0040853C loc_40853C: ; DATA XREF: sub_408270+2A8o .rdata:0040853C mov eax, [esi+ecx*4+18h] .rdata:00408540 mov [edi+ecx*4+18h], eax .rdata:00408544 .rdata:00408544 loc_408544: ; DATA XREF: sub_408270+2ACo .rdata:00408544 mov eax, [esi+ecx*4+14h] .rdata:00408548 mov [edi+ecx*4+14h], eax .rdata:0040854C .rdata:0040854C loc_40854C: ; DATA XREF: sub_408270+2B0o .rdata:0040854C mov eax, [esi+ecx*4+10h] .rdata:00408550 mov [edi+ecx*4+10h], eax .rdata:00408554 .rdata:00408554 loc_408554: ; DATA XREF: sub_408270+2B4o .rdata:00408554 mov eax, [esi+ecx*4+0Ch] .rdata:00408558 mov [edi+ecx*4+0Ch], eax .rdata:0040855C .rdata:0040855C loc_40855C: ; DATA XREF: sub_408270+2B8o .rdata:0040855C mov eax, [esi+ecx*4+8] .rdata:00408560 mov [edi+ecx*4+8], eax .rdata:00408564 .rdata:00408564 loc_408564: ; DATA XREF: sub_408270+2BCo .rdata:00408564 mov eax, [esi+ecx*4+4] .rdata:00408568 mov [edi+ecx*4+4], eax .rdata:0040856C lea eax, ds:0[ecx*4] .rdata:00408573 add esi, eax .rdata:00408575 add edi, eax .rdata:00408577 .rdata:00408577 loc_408577: ; CODE XREF: sub_408270+1EEj .rdata:00408577 ; DATA XREF: sub_408270:off_408530o .rdata:00408577 jmp off_408580[edx*4] .rdata:00408577 ; --------------------------------------------------------------------------- .rdata:0040857E align 10h .rdata:00408580 off_408580 dd offset loc_408590 ; DATA XREF: sub_408270+1E3r .rdata:00408580 ; sub_408270:loc_408480r ... .rdata:00408584 dd offset loc_408598 .rdata:00408588 dd offset loc_4085A8 .rdata:0040858C dd offset loc_4085BC .rdata:00408590 ; --------------------------------------------------------------------------- .rdata:00408590 .rdata:00408590 loc_408590: ; CODE XREF: sub_408270+1E3j .rdata:00408590 ; sub_408270:loc_408480j ... .rdata:00408590 mov eax, [ebp+arg_0] .rdata:00408593 pop esi .rdata:00408594 pop edi .rdata:00408595 leave .rdata:00408596 retn .rdata:00408596 ; --------------------------------------------------------------------------- .rdata:00408597 align 4 .rdata:00408598 .rdata:00408598 loc_408598: ; CODE XREF: sub_408270+1E3j .rdata:00408598 ; sub_408270:loc_408480j ... .rdata:00408598 mov al, [esi+3] .rdata:0040859B mov [edi+3], al .rdata:0040859E mov eax, [ebp+arg_0] .rdata:004085A1 pop esi .rdata:004085A2 pop edi .rdata:004085A3 leave .rdata:004085A4 retn .rdata:004085A4 ; --------------------------------------------------------------------------- .rdata:004085A5 align 4 .rdata:004085A8 .rdata:004085A8 loc_4085A8: ; CODE XREF: sub_408270+1E3j .rdata:004085A8 ; sub_408270:loc_408480j ... .rdata:004085A8 mov al, [esi+3] .rdata:004085AB mov [edi+3], al .rdata:004085AE mov al, [esi+2] .rdata:004085B1 mov [edi+2], al .rdata:004085B4 mov eax, [ebp+arg_0] .rdata:004085B7 pop esi .rdata:004085B8 pop edi .rdata:004085B9 leave .rdata:004085BA retn .rdata:004085BA ; --------------------------------------------------------------------------- .rdata:004085BB align 4 .rdata:004085BC .rdata:004085BC loc_4085BC: ; CODE XREF: sub_408270+1E3j .rdata:004085BC ; sub_408270:loc_408480j ... .rdata:004085BC mov al, [esi+3] .rdata:004085BF mov [edi+3], al .rdata:004085C2 mov al, [esi+2] .rdata:004085C5 mov [edi+2], al .rdata:004085C8 mov al, [esi+1] .rdata:004085CB mov [edi+1], al .rdata:004085CE mov eax, [ebp+arg_0] .rdata:004085D1 pop esi .rdata:004085D2 pop edi .rdata:004085D3 leave .rdata:004085D4 retn .rdata:004085D4 sub_408270 endp
ни пинайте что отдельно не выложил... тока правила дочитал.... так вот в генерируемом ключе который состоит из трех блоков символов.. первый блок символов делает эта подпрограмма. если логин = 0000 и пароль =0000 то ключ=VTNWGCJQPAO3GAEKD24000000 з.ы. мне ненужно делать свой кейген, хочу понять смысл генерации этого
romoga И даже не напоминает, а это она и есть. Приведенный тобой код просто копирует arg_8 bytes from arg_4 to arg_0.
на этот участок хекс рейс ругается invalid basi block а на третью функцию в которой я думаю третий блок ключа генерица выдает вот это Код (Text): int __cdecl sub_406517() { int *v0; // edi@1 char *v1; // esi@1 signed int v2; // edi@3 _BYTE *v3; // esi@4 signed int v4; // eax@9 char v5; // cl@10 const CHAR v6; // cl@11 int v8; // eax@2 _BYTE *v9; // ecx@10 unsigned __int8 v10; // of@10 char v11; // sf@10 char v12; // [sp+70h] [bp-68h]@1 int v13; // [sp+D4h] [bp-4h]@2 _BYTE v14[4]; // [sp+6Ch] [bp-6Ch]@4 _BYTE v15[4]; // [sp+D0h] [bp-8h]@6 _BYTE v16[96]; // [sp+Ch] [bp-CCh]@10 sub_408696(&v12, 4, 25, sub_406363, sub_4063E3); v1 = &v12; v0 = dword_404030; do { v8 = sub_4064B7(&v13, v0); sub_406393(v8); sub_407D80(v13); v0 += 4; v1 += 4; } while ( (signed int)v0 < 4211136 ); sub_4064B7(&v13, dword_4100D8); v2 = 0; do { v3 = &v14[v2]; *(_DWORD *)&v14[v2] = 0; while ( sub_4063C6(&v13, &v15[v2]) && *(_DWORD *)v3 <= 46 ) { ++*(_DWORD *)v3; sub_4063AB(&v15[v2]); } v2 -= 4; } while ( v2 >= -96 ); v4 = 0; do { v9 = &v16[4 * v4]; v10 = __SETO__(*(_DWORD *)v9, 10); v11 = *(_DWORD *)v9 < 10; v5 = *v9; if ( v11 ^ v10 ) v6 = v5 + 48; else v6 = v5 + 55; byte_40FFF4[v4++] = v6; } while ( v4 < 25 ); byte_41000D = 0; sub_407D80(v13); return sub_408633(&v12, 4, 25, sub_4063E3); вапще все перестало быть понятным