아래 내용은 고려대학교 정보보호 동아리 KUICS의 수업 내용을 바탕으로 작성한 것입니다.
여기 어떤 프로그램이 실행해도 아무 일도 안 일어납니다.
우리는 이 프로그램이 제 기능을 다하도록 패치해 볼 겁니다.
1. objdump 이용해 기계어로 번역하기
2. 원인 파악
위 바이너리를 보아, 프로그램이 갑자기 종료되는 것은 왠지 0x1188 위치에서 killer 함수가 호출되기 때문인 것 같습니다.
3. pwntools의 ELF 객체 이용해 문제의 코드 패치하기
0x1188 위치의 5바이트 만큼의 코드를, 아무 작동이 없다는 의미의 nop의 코드로 대체함으로써,
killer 함수의 호출을 없애보겠습니다.
이를 위해선 아래와 같이 코드를 입력합니다.
e.address: Address of the lowest segment loaded in the ELF
e.read(e.address + <killer 함수가 호출되는 위치>, <5바이트만큼 읽음>)
e.write(<고칠 위치>, <수정 후의 코드>)
e.save(<패치로 새로 생성될 실행파일의 이름>)
4. 다시 실행해보기
exit의 방해에서 벗어나 Hello world!가 잘 출력되는군요.
'IT > 역공학' 카테고리의 다른 글
[z3 solver, WinDbg, IDA] 여러 조건문을 만족시키는 flag 찾기 & 디버깅 [@ KUICS] (0) | 2024.03.10 |
---|