바이너리 파일 encoder와 암호화된 파일인 file.enc 가 주어진다.
encoder <filename> 으로 실행시키면 암호화된 enc 파일이 튀어나오는 방식이다.
python으로 만들어진 파일이라 의심이 된다면 pyinstaller를 써보면 된다
pip install pyinstaller 으로 pyinstaller를 설치할 수 있다.
pyi-archive_viewer encoder 를 입력해서 바이너리 파일을 보면
python2.7 버전으로 작성된 것으로 보인다.
![](https://blog.kakaocdn.net/dn/bb83K8/btruXUhTtfC/8gB8Y8KmPiWMyjDwFBBBr0/img.png)
여기서 pyc 파일까지 추출할수 있다
![](https://blog.kakaocdn.net/dn/6rgaT/btruXTwv0sp/BXq9JKmjRFdjudlicDtk90/img.png)
pyc 파일을 디컴파일해주는 uncompyle6를 써본다
unknown magic number라고 나오는게 파일시그니처가 손상된듯하다.
![](https://blog.kakaocdn.net/dn/blqfEe/btruPaNPWd2/7Fg78ppg0K9wCwkxjLPkX0/img.png)
https://file-extension.net/seeker/seeker.py?ext=pyc 에서 각종 파일시그니처들을 볼 수 있다.
아까 맨처음에 pyi-archive_viewer 사용시 python2.7이라는 글자가 보였음으로
2.7버전 파일시그니처인 03 F3 0D 0A를 HxD를 이용해 앞쪽에 추가해본다.
![](https://blog.kakaocdn.net/dn/laJcx/btruXTiYmBR/iDWt1GTQSykI6Cgxa7Zfi0/img.png)
뒤에 00 00 00 00 는??
pyc의 경우 파일 구조상 뒤에 타임스탬프 4바이트가 붙는다고 한다. 대충 00으로 칸만 맞춰준다.
![](https://blog.kakaocdn.net/dn/blhYYH/btruRMyRxZi/u4Kv0JUEQ2DIYReGkvGqw0/img.png)
정상적으로 디컴파일 된다.
import lzss
lzss.decode_file("./file.enc","./file_out.enc")
코드를 참고하여
decoder.py를 작성한다
![](https://blog.kakaocdn.net/dn/p5RRG/btruVK78PMW/s6u7cQw3coikUn3iFdTf5K/img.png)
decoder.py를 실행시키면 정상적으로 file_out.enc 가 생성된다.
![](https://blog.kakaocdn.net/dn/poCrK/btruNWoFXKW/blVwPx5UZkTxSnMxkbbKoK/img.png)
hxd로 까보면 0이 엄청 많이나온다.
이렇게 생긴 파일은 인텔 헥스파일이라 그렇다고 한다.
이런건 010에디터로 까면 제대로 보인다고 한다.
![](https://blog.kakaocdn.net/dn/cQZiJV/btruNVwBMNb/iXdF3cbasIT6ITXCzUTzAK/img.png)
뜨든
바로 플래그가 보인다.
반응형
'CTF > 리버싱' 카테고리의 다른 글
[RiftCTF] Reversing 0x0002 - 리버싱 / IDA (38) | 2022.03.30 |
---|---|
[angstromCTF] Inputter - 리버싱 / argument (50) | 2022.03.21 |
[angstromCTF] Taking Off - 리버싱 / IDA (46) | 2022.03.15 |
[angstromCTF] Revving Up - 리버싱 / argument (43) | 2022.03.14 |
[angstromCTF] Windows of Opportunity - 리버싱 / IDA (38) | 2022.03.13 |