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 |