OutDoorFrog의 리버싱 이야기

Reversing.Kr [HateIntel] 본문

공부/사이트 문제 풀이

Reversing.Kr [HateIntel]

OutDoorFrog 2019. 1. 3. 13:04

- I Love Intel -




HateIntel 과 ReadMe 파일로 구성이 되어 있습니다.


ReadMe 파일에는 비밀번호를 찾으라는 문구가 적혀있더군요.


Detect It Easy를 사용해서 실행 환경을 결정합시다.





MACH-O네요.. (macOS, iOS는 준비가 되지 않았는데;;)


음 IDA를 이용해서 정적 분석을 해봅시다.


메인 함수로 추정되는 sub_2224를 디컴파일해봤습니다.





가독성을 증진시키기 위해 변수 이름들을 역할에 맞게 바꿔줬습니다.





sub_232C 함수를 봅시다.


넣은 글자들을 차례대로 4회 인코딩시키는 루틴이기에 Encode4라고 지었습니다. (작명센스..)





sub_2494 함수를 봅시다.


입력한 문자를 2를 곱해서 반환하거나 0x100과 And연산 했을 때 값이 0이 아니면 

1과 OR 연산해서 리턴해줍니다.


(한 번 반복하면 반복문을 쓰는 이유가 없는데...)







Input 값만 무작위 대입을 해서 플래그를 도출하면 될 것 같습니다.


C를 이용해서 코드를 짜보겠습니다.


플래그 데이터도 긁고, 인코딩 루틴도 재현하고



인코딩 4번에 비교하는 구문까지 넣어주면



깔삼하게 출력이 됩니다.





파이썬으로 풀어보기


여기에서 조금 고생을 했습니다.


C에서는 unsgined __int8이라는 자료형로 return을 해줬는데 

Python에서는 unsgined 나 __int8 자료형을 찾기 힘들었거든요.


이 문제를 해결할 희망을 준 라이브러리가 ctypes 라이브러리입니다.

c_ubyte(c_uint8)이라는 자료형을 지원해주더라구요.


안타깝게도 c_ubyte 자료형은 int 형으로 convert하는 함수가 없어서 중간 과정을 조금 곁들였습니다.






결과




힘드네요.. 빨리 멀티플렉시브도 올려야징







'공부 > 사이트 문제 풀이' 카테고리의 다른 글

Reversing.Kr [Multiplicative] 수정중  (1) 2019.01.06
Reversing.Kr [Csharp]  (0) 2019.01.03
Reversing.kr [Music Player]  (0) 2019.01.01
Reversing.kr [Easy_ELF]  (0) 2018.11.03
CodeEngn.com [Advanced] 2  (1) 2018.09.22
Comments