[DreamHack] rev-basic-3

2023. 2. 15. 00:36리버싱

main함수

딱 봐도 scanf인 함수가 입력값을 받아 sub_7FF6EF7D1000에서 입력값을 비교하고 있다.
user_input은 원래 v4였는데 편의상 변수명을 바꿔놨다.

 

sub_7FF6EF7D1000

24번 루프를 돌며 i와 input값을 xor한 값에 2i를 더한 값이 어떤 배열에 있는 한 바이트와 같은지 비교하고 있다.
알아보기 쉽게 수식으로 정리하자면 다음과 같다.

i ^ input[i] + 2i

해당 배열을 더블클릭하면 박혀있는 데이터를 볼 수 있다.

저 값에서 역으로 2i을 빼주고 다시 xor하면 어떤 입력값을 줘야 하는지 계산할 수 있다.
코드는 다음과 같다.

str = [0x49, 0x60, 0x67, 0x74, 0x63, 0x67, 0x42, 0x66, 0x80, 0x78, 0x69, 0x69, 0x7B, 0x99, 0x6D, 0x88, 0x68, 0x94, 0x9F, 0x8D, 0x4D, 0x0A5, 0x9D, 0x45]
answer = "answer : "

for i in range(0,24) :
	tmp = str[i] - 2*i
	res = tmp ^ i
	answer += chr(res)

print(answer)

Flag는 비밀~~

'리버싱' 카테고리의 다른 글

x64 Calling convention & Registers  (0) 2023.02.15
WinDbg Preview TTD 사용법  (0) 2023.02.09