'll Hacker
dreamhack : rev-basic-8 write-up 본문
Contents
728x90
https://dreamhack.io/wargame/challenges/22
step1. main 함수 분석
입력을 받고, 해당 값이 맞으면 "Correct" 틀리면 "Wrong" 출력
step2. main 함수 내부 함수 분석
sub_140001000함수
if문에 (unsigned __int8)(-5**(_BYTE *)(a1+i)) != byte_140003000[i]가 거짓이겠끔 파이썬을 구현해줘야함
step3. 역연산
unsigned __int8은 0~255 범위의 값을 가지는 것을 의미
-5를 곱한 후에 이 범위로 & 0xFF 사용해서 변환해야함
먼저 byte_140003000 데이터 export하기!!
data는 아래와 같음
byte_140003000[i]를 기준으로 a1[i] 값을 역연산해서 result리스트에 저장하고 바이트 배열로 변환해서 출력하면 된다.
byte_140003000 = bytes.fromhex("AC F3 0C 25 A3 10 B7 25 16 C6 B7 BC 07 25 02 D5 C6 11 07 C5 00 00 00 00 00 00 00 00 00 00 00 00")
result = []
for i in range(len(byte_140003000)):
# (unsigned __int8)(-5 * a1[i]) == byte_140003000[i]
# a1[i]를 찾기 위해 식을 역산
# -5 * a1[i] = byte_140003000[i]
# a1[i] = -byte_140003000[i] / 5
# a1[i] = -byte_140003000[i] // 5 를 unsigned int 8로 변환
a1_i = ((-byte_140003000[i]) * pow(5, -1, 256)) & 0xFF # 5의 모듈러 역수를 곱하고 256으로 모듈러
result.append(a1_i)
result = bytes(result)
print(result)
728x90
'Hacking > Reverse Engineering' 카테고리의 다른 글
dreamhack : Collect Me writeup (1) | 2024.06.03 |
---|---|
dreamhack : secure-mail writeup (2) | 2024.06.01 |
dreamhack : rev-basic-6 writeup (1) | 2024.05.30 |
dreamhack : rev-basic-4 write-up (1) | 2024.05.29 |
dreamhack : rev-basic-2 write-up (0) | 2024.05.15 |