본문 바로가기

4-8. 2021-1 심화 스터디/리버싱을 활용한 디버거 플러그인 개발

[2021.05.08]리버싱을 활용한 디버거 플러그인 개발4

- PDK 활용

OllyDBG의 플러그인 SDK에는 여러 가지 구조체가 선언되어 있다.

 

이 구조체와 OllyDBG API의 조합만 잘 살펴보면 복잡한 과정을 거쳐 구해야 하는 값이나 여러가지 번거로운 작업을 쉽고 다이나믹하게 처리할 수 있다.

 

 t_dump, t_memory, t_disasm라는 이름의 3개의 구조체는 플러그인 개발에 매우 유용하게 쓰이며, 모두 t_접두사를 사용한다. 이 구조체들은 디버거 관련 사항이 대부분이고 메모리 처리에 대한 내용이 중심을 이룬다. 그렇기 때문에 이 구조체들을 제대로 응용할 수 있다면 대부분의 메모리 컨트롤이 가능하다.

 

- t_dump - 덤프 관련 구조체

t_dump 구조체

  • 위는 덤프관련 구조체로, 20개가 넘는 멤버 변수를 가지고 있지만 모두 사용되는 것은 아니다.

  • 앞에서 작성한 ODBG_Pluginaction() 함수에 위치 값을 받아올 수 있는 코드를 추가하였다. 이 함수의 세 번째 인자로 void* 형의 변수가 넘어오게 되고, CheckStruct()라는 함수를 만들어 이 변수를 인자로 전달한다.

  • Checkstruct()에서 전달받은 void* 형의 변수를 t_dump 구조체 형으로 형변환하면 해당 구조체에 맞게 값을 사용할 수 있다.

 

- 발생한 오류 및 해결 방법

<오류 1>

Start(), WriteLog(), End()에서 위와 같이 명시적 형식이 없다는 오류가 발생했다,

 

<해결 방법 1>

각각 반환 형식을 'int'로 지정해 해결했다.

 

- 아직 해결하지 못한 오류