Kilkat

[dreamhack] rev-basic-4 본문

Security/reverse engineering

[dreamhack] rev-basic-4

KimKwangWoon 2024. 12. 25. 15:52

해결과정

ida에서 main 함수를 f5를 눌러 decompile을 수행함

 

if 구문을 통해서 sub_140001000 함수를 통해서 값을 비교하고 있음

 

해당 함수를 확인해보면 16 * (a1 + i)의 경우 a * 2^n == a << n이 성립하므로, (a1 + i) << 4 | (a1 + i) >> 4 로 변경이 가능함

(a1 + i) << 4 의 경우 unsigned __int8로 캐스팅 되며, unsigned __int8의 경우 1Byte(0 to 255)의 값을 가짐

-> byte_14003000[ i ]에서 값을 가져와서 (a1 + i) << 4 | (a1 + i) >> 4 연산 후 나오는 데이터를 ASCII로 변환해주면 될것으로 생각됨

 

풀이

arr = [0x24, 0x27, 0x13, 0xC6, 0xC6, 0x13, 0x16, 0xE6, 0x47, 0xF5, 0x26, 0x96, 0x47, 0xF5, 0x46, 0x27, 0x13, 0x26, 0x26, 0xC6, 0x56, 0xF5, 0xC3, 0xC3, 0xF5, 0xE3, 0xE3]

for i in range(len(arr)) :
    print(chr((arr[i] << 4 | arr[i] >> 4) % (16 * 16)), end='')
    # print(chr((arr[i] * 16 | arr[i] >> 4) % (16 * 16)), end='')

 

성공!

'Security > reverse engineering' 카테고리의 다른 글

[dreamhack] rev-basic-6  (0) 2024.12.25
[dreamhack] rev-basic-3  (0) 2024.12.10
Csaw 2018 Quals bigboy  (0) 2024.12.04
(Linux) .so hooking  (0) 2024.11.14
공주대학교 리버싱문제(중) KingKEY  (0) 2018.08.04
Comments