Exeinfo PE

Decompiled-src
wmain
__int64 wmain()
{
unsigned int v0; // eax
__int64 i; // rbx
char v2; // r8
int v3; // edx
__int64 v4; // rcx
_BYTE *v5; // rdx
__int64 v6; // rcx
char v7; // al
int v8; // ecx
__int16 *v9; // rdx
__int16 v10; // ax
__int16 v11; // ax
int v13; // [rsp+40h] [rbp-78h] BYREF
int v14; // [rsp+44h] [rbp-74h] BYREF
int v15; // [rsp+48h] [rbp-70h] BYREF
int v16; // [rsp+4Ch] [rbp-6Ch] BYREF
int v17; // [rsp+50h] [rbp-68h] BYREF
int v18; // [rsp+54h] [rbp-64h] BYREF
int v19[3]; // [rsp+58h] [rbp-60h]
int v20; // [rsp+64h] [rbp-54h]
int v21; // [rsp+68h] [rbp-50h]
int v22; // [rsp+6Ch] [rbp-4Ch]
__int16 v23[25]; // [rsp+70h] [rbp-48h] BYREF
__int16 v24; // [rsp+A2h] [rbp-16h]
v13 = 0;
v14 = 0;
v15 = 0;
v16 = 0;
v17 = 0;
v18 = 0;
v19[0] = 0;
v19[1] = 0;
v19[2] = 0;
v20 = 0;
v21 = 0;
v22 = 0;
v0 = time64(0i64);
srand(v0);
do
{
wprintf(L"\n\t\tL O T T O\t\t\n\n");
wprintf(L"Input the number: ");
wscanf_s(L"%d %d %d %d %d %d", &v13, &v14, &v15, &v16, &v17, &v18);
wsystem(L"cls");
Sleep(0x1F4u);
for ( i = 0i64; i < 6; v19[i - 1] = rand() % 100 )
++i;
v2 = 1;
v3 = 0;
v4 = 0i64;
byte_7FF622EB35F0 = 1;
while ( v19[v4] == *(int *)((char *)&v13 + v4 * 4) )
{
++v4;
++v3;
if ( v4 >= 6 )
goto LABEL_9;
}
v2 = 0;
byte_7FF622EB35F0 = 0;
LABEL_9:
;
}
while ( v3 != 6 );
v5 = byte_7FF622EB3021;
v23[1] = 92;
v23[0] = 184;
v23[2] = 139;
v23[5] = 184;
v23[3] = 107;
v6 = 0i64;
v23[4] = 66;
v23[6] = 56;
v23[7] = 237;
v23[8] = 219;
v23[9] = 91;
v23[10] = 129;
v23[11] = 41;
v23[12] = 160;
v23[13] = 126;
v23[14] = 80;
v23[15] = 140;
v23[16] = 27;
v23[17] = 134;
v23[18] = 245;
v23[19] = 2;
v23[20] = 85;
v23[21] = 33;
v23[22] = 12;
v23[23] = 14;
v23[24] = 242;
v24 = 0;
do
{
v7 = byte_7FF622EB3021[v6 - 1];
v6 += 5i64;
*((_WORD *)&v20 + v6 + 1) ^= (unsigned __int8)(v7 - 12);
*((_WORD *)&v21 + v6) ^= (unsigned __int8)(byte_7FF622EB3021[v6 - 5] - 12);
*((_WORD *)&v21 + v6 + 1) ^= (unsigned __int8)(byte_7FF622EB3021[v6 - 4] - 12);
v23[v6 - 2] ^= (unsigned __int8)(byte_7FF622EB3021[v6 - 3] - 12);
v23[v6 - 1] ^= (unsigned __int8)(byte_7FF622EB3021[v6 - 2] - 12);
}
while ( v6 < 25 );
if ( v2 )
{
v8 = 0;
v9 = v23;
do
{
v10 = *v9++;
v11 = v8++ + (v10 ^ 0xF);
*(v9 - 1) = v11;
}
while ( v8 < 25 );
v24 = 0;
wprintf(L"%s\n", v23);
}
wprintf(L"\n", v5);
return 1i64;
}
6개의 수를 입력받아 랜덤인 수를 맞춰 통과했을 경우,
XOR 복호화를 하여 printf 함수를 통해 출력해주는 것으로 보인다.
Solution
.text:0000000140001138 주소에 있는
xor r8b, r8b 명령어를 mov r8b, 1로 패치
.text:0000000140001145 주소에 있는
jnz loc_7FF622EB1070 명령어에 의해 분기되지 않도록 nop으로 패치

위 2가지 패치를 하면
랜덤인 수와 맞지 않더라도 통과할 수 있다.
Result

FLAG
from_GHL2_-_!