본문으로 바로가기

[Reversing] easy / 150

category ICEWALL 2019. 7. 20. 18:16

Download: easy.exe

 

Portable Executable 파일이다. x64dbg로 디버깅하면서 플래그 체크 루틴을 확인하면 끝난다.

 

각각의 call instruction은 한 글자씩 확인하는 과정이다. 많은 조건들을 전부 통과시킬 수 있는 문자열이 플래그 값이 된다. 아래는 그 조건들을 써 놓은 것이다.

 

_BYTE s[25];   // input
_BYTE check;

check = s[0];
check ^= 0x20
assert(check == 0x66);

check = s[1];
check += s[0];
assert(check == 0x92);

check = s[10];
check += 0x20;
check ^= s[2];
assert(check == 0x33);

check = s[3];
check -= 0x47;
assert(~check);

check = s[3];
check -= s[4];
assert(check == 0xCC);

check = s[5];
check = ~check;
assert(check == 0xBA);

check = s[6];
check ^= s[1];
check ^= s[0];
assert(check == 0x3E);

check = s[7];
check += s[6];
assert(check == 0xA7);

check = s[20];
check ^= s[8];
check = ~check;
assert(check == 0xFB);

check = s[9];
check -= 0x2D;
assert(~check);

check = s[10];
check ^= s[1];
check = ~check;
assert(check == 0xE1);

check = s[11];
check ^= s[10];
check = ~check;
check -= s[12];
assert(check == 0x28);

check = s[12];
check += s[0];
assert(check == 0xBC);

check = s[13];
check += check;
assert(check == 0x66);

check = s[14];
assert(check == 0x72);

check = s[21];
check ^= s[20];
check ^= s[15];
assert(check == 0x0E);

check = s[16];
check += 3;
assert(check == 0x34);

check = s[17];
check += s[16];
check ^= s[0];
assert(check == 0xD9);

check = s[19];
check ^= s[18];
assert(check == 0x19);

check = s[19];
assert(check == 0x7E);

check = s[21];
check += s[20];
assert(check == 0x7D);

check = s[21];
check ^= 0x30;
assert(check == 0x30);

 

'ICEWALL' 카테고리의 다른 글

[Reversing] login / 200  (0) 2019.07.21
[Reversing] noteasy / 170  (0) 2019.07.21
[Reversing] virtual / 80  (0) 2019.07.20
[Reversing] supereasy / 50  (0) 2019.07.20
[System] note / 450  (0) 2019.07.20