Tuuna Computer Science

[ 32bit ELF Debugger ] 디스어셈블리러(disassembler), 디버거(debugger) 제작 일지2 본문

Debugger

[ 32bit ELF Debugger ] 디스어셈블리러(disassembler), 디버거(debugger) 제작 일지2

GuTTe 2019. 2. 20. 17:33


디스어셈블러랑, 디버거를 이미 다 제작이 완료되었지만 귀차니즘으로 아직 안올렸는데 


이제 스타벅스온김에 올리려합니다. 


================================================================


ptrace를 활용한 나만의 debugger가 완성되었습니다.ㅎㅎ !

 

아직까지 수정하여할 부분이 많지만 초기 완성단계본 올려봅니다. 

 

platform:

Linux & Unix 계열

대상바이너리 : 32bit elf  (no-pie)파일

 

사용법

./debugger <32bit elf>

 

명령어 도움말

help 치시면 됩니다.

 

[인터페이스]


de.jpg

 

현재 오류는 메모리덤프와, 레지스터 세팅, 메모리 수정 부분에서 오류가 발생했는데 조만간 고칠예정입니다. (strtok 문제인듯...)

(해결)

 

또한 step over를 아직 구상하지 못해 구상하기 전까지는 step into 방식 또는 continue방식을 사용하여야 할거 같습니다.

 

+ 한번 run-time이 끝나면 다시 debugger를 재실행 하여야합니다.

이 부분도 PTRACE_TRACEME가 있는 자식 프로세스에게 파이프라인 구성해서 디버거를 재실행 하지 않아도 되게 차차 추가할 예정입니다.

 

이 디버거로 hitcon-training lab1 sysmagic 바이너리 flag를 따보았는데 좋았습니다 ㅎ

 

명령어와 breakpoint를 구조체 배열 형식으로 했는데 공간 예측 실패의 문제로 연결 리스트의 구조로 변경하였는데 만족스럽습니다.


=========================================================================================

추가한 사항은 history부분을 Stack구조로 구현하여 지금까지 친 명령어를 확인할 수 있습니다. 

이제 각 종 함수들의 루틴을 파악해서 GUI화 하는 일이랑, PIE메모리보호 기법 공부하는 거 남았네요 ㅋㅋ 

그래도 기능적인 면에서는 기본은 하니 좋네요 

아래 깃헙링크에서 소스코드와 바이너리를 다운받을 수 있는데 만약 디스어셈블러나, ptrace사용부분에서 모르는 부분이 있다면 댓글 달아주세여, 제가 아는한 최대한 답변 해드리겠습니다. 

디버거 만드는게 은근 재밋네요 ㅋㅋ 디스어셈블러구현할때 intel Instruction이 드럽게 많아서 골치덩어리였는데(지금도... 추가해야할게 많네...) Modrm, SIB, DISP이 필드만 잘 구현하면 괜찮게 진행할 수 있네여 

(나중에 소프트웨어 마에스트로 붙으면 제대로 한 번 만들어보고 싶음.)

[링크]

https://github.com/kissesy/Debugger

컴파일 방법 => gcc -m32 disassembler.c ptrace.c ListBaseStack.c -o debugger 


Comments