IT/역공학

[프로그램 패치] 바이너리 코드 수정하여 프로그램 패치하기 [@ KUICS]

kykyky 2024. 3. 10. 21:17

아래 내용은 고려대학교 정보보호 동아리 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!가 잘 출력되는군요.