본문 바로가기

HackIM 2016 Reversing - donfos 이번에는 500점 짜리 문제입니다. 500점 짜리인 만큼 난이도가 꽤 있었습니다. 역시 64비트 바이너리인데 IDA로 열자마자 입에서 욕이 나왔었습니다... 열어보면 IDA의 그래프 개형이 이렇게 생겼기 때문입니다. 처음에는 열고 나서 다시 닫았습니다. 생긴 것이 꼭 핀툴을 써서 해야 할 것처럼 생겨서 이 문제는 접어야 겠다 하고 닫았었는데 시간이 좀 지나고 다시 분석해보자 하고 열어서 좀 보니까 뭔가 될 것도 같아서 분석을 시작했습니다. 일단 헥스레이로 보면 엄청난 양의 반복문이 중첩으로 존재합니다. 프로그램을 난독화 시켜 놓은 것인지는 모르겠는데 v37을 기준으로 그 값에 어떠한 값이 들어 있냐에 따라 프로그램 흐름이 달라지는 방식입니다. 그래서 분석을 해 보면 먼저 이 부분에서 입력을 받는데 반복문.. 더보기
HackIM 2016 Reversing - Pesudorandom 이번에는 300점짜리 두 번째 문제입니다. 역시 64비트고 IDA로 먼저 뜯어보면 rand값으로 sleep을 하고 함수 내에서 막 연산한 값을 가지고 오고 난 뒤에 값을 입력받습니다. 입력받은 값을 다시 sub_400ea0함수에서 체크하고 md5해시를 구하며 막 반복문을 진행하다가 특정 값이 되면 빠져 나오고 해시를 비교한 뒤에 flag를 출력해 줍니다. 체크 함수를 보면 복잡해 보이지만 어차피 올바른 입력값은 하나 이므로 저 함수를 그대로 가져와서 브루트포싱을 해 주면 입력해야 하는 값을 구할 수 있습니다. 디버깅을 통해 sub_400ea0함수에 함께 넣어주는 값들만 찾아서 브루트포싱 해 주면 됩니다.이런 식으로 소스를 짜서 값들을 모두 구해 내면 됩니다. 앞의 몇몇 값을 구하다 보면 규칙성이 있는 것.. 더보기
HackIM 2016 Reversing - ZorroPub 100점짜리 맨 먼저 푼 문제입니다. 64비트 바이너리고, IDA로 뜯어서 보면 처음에 루프를 돌 카운트를 입력하고 루프를 돌면서 다시 값을 입력하는데 그 값들은 모두 seed와 xor하는데 쓰입니다. 그리고 그 seed는 srand로 rand값에 쓰이게 됩니다. 그리고 rand로 나온 값들의 md5해시를 구하여 비교하고, 맞다면 flag를 출력해줍니다. 따라서 파이썬으로 브루트포싱을 돌려주면 md5에 맞는 seed를 구할 수 있습니다. 위 소스를 파이썬으로 돌려주면 플래그를 얻을 수 있습니다. Key : nullcon{nu11c0n_s4yz_x0r1n6_1s_4m4z1ng} 더보기