호그와트

드림핵 rev-basic-3

영웅*^%&$ 2022. 1. 25. 13:54
728x90

__int64 __fastcall sub_140001000(__int64 a1)

{

int i; // [rsp+0h] [rbp-18h]

for ( i = 0; (unsigned __int64)i < 0x18; ++i )

{

if ( byte_140003000[i] != (i ^ *(unsigned __int8 *)(a1 + i)) + 2 * i )

return 0i64;

}

return 1i64;

}

기본적인 분석방법에 의거해 위와 같은 함수가 나왔다

당연히 byte 부분이 핵심이 되는 부분이라는 것을 알 수 있었고 더블 클릭해서

.data:0000000140003000 byte_140003000 db 49h, 60h, 67h, 74h, 63h, 67h, 42h, 66h, 80h, 78h, 2 dup(69h)

.data:0000000140003000 ; DATA XREF: sub_140001000+28↑o

.data:0000000140003000 db 7Bh, 99h, 6Dh, 88h, 68h, 94h, 9Fh, 8Dh, 4Dh, 0A5h, 9Dh

.data:0000000140003000 db 45h, 8 dup(0)

위에 해당하는 dump값도 얻을 수 있었다

if문의 핵심은 A=B+C이면 B는 A-C임을 이용하거나 A XOR B = C 이면 C XOR B = A 임을 보여주는 것이다

 

arr = [0x49, 0x60, 0x67, 0x74, 0x63, 0x67, 0x42, 0x66, 0x80, 0x78, 0x69, 0x69, 0x7B, 0x99, 0x6D, 0x88, 0x68, 0x94, 0x9F, 0x8D, 0x4D, 0xA5, 0x9D, 0x45]

for x in range(24) :

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

print(arr[x]~~)

728x90

'호그와트' 카테고리의 다른 글

드림핵 rev-basic-1  (0) 2022.01.25
드림핵 rev-basic-2  (0) 2022.01.25
드림핵 rev-basic-4  (0) 2022.01.25
드림핵 csrf-1  (0) 2022.01.22
드림핵 xss-1  (0) 2022.01.22