OutDoorFrog의 리버싱 이야기
Reversing.Kr [HateIntel] 본문
- 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 |