본문 바로가기

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

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

 

 

DLL이란?

-Dynamic Linking Library라는 의미로, LIB처럼 실행파일에 종속된 개념이지만 프로그램이 실행될 때 해당 DLL파일을 연결해서 실행하게 된다.

-> 즉, 파일이 수정 되더라도 해당 DLL파일을 사용하는 실행 파일은 수정하지 않아도 된다.


참고: https://blog.naver.com/PostView.nhn?blogId=tipsware&logNo=221359282016&parentCategoryNo=&categoryNo=83&viewDate=&isShowPopularPosts=true&from=search

 

-플러그인은 기본적으로 DLL 형식으로 제작되어야 한다. DLL 프로젝트를 구성한 뒤, OllyDBG 라이브러리를 링크하고 필수적인 익스포트 펑션을 선언하여 기능을 구성하면 된다.

 

 

 

 

개발환경

 Visual studio C++

 

 

 

 

 

 

DLL 생성

 

 

 

 

 

 

 

 

초기화 코드

 

-HelloOlly.cpp 기본 구조

 

 

 

 

 

-ODBG_Plugindata() 함수

 

  • 플러그인의 이름을 지정하는 함수, 리턴값으로 플러그인의 버전을 반환함

 

 

 

 

-ODBG_Plugininit() 함수

 

  • 플러그인 개발에 사용된 SDK 버전과 현재 OllyDBG의 버전을 비교해서 플러그인이 상위 버전이면 -1을 리턴하여 플러그인이 실행되지 않도록 함 (하위 버전을 호환됨), Addtolist() 함수로 로그를 뿌려주어 OllyDBG 내 로그 윈도우에서 “Hello Olly plugin v0.01 (test plugin)”, “made by window31” 문장을 확인할 수 있음

 

 

 

 

 

헤더파일 

 

“plugin.h”

  •  “Plugin.h” 의 일부 내용 발췌



 

 

 

“HelloOlly.h”

  •  플러그인은 DLL형태로 개발이 진행되어야 하므로 DLL프로젝트를 구성한 뒤 Plugin.h 파일을 포함하고 ollydbg.lib 파일도 링크한다. 



 

 

 

오류 발생 부분

-초기화 코드를 수행하는 Plugininit 함수 부분에서, Log Window에 문자열을 출력하기 위한  Addtolist가 ‘함수에서 참조되는 확인할 수 없는 외부 기호’ 라는 오류 발생

-> https://pang2h.tistory.com/156 해당 링크를 참고하여 오류 해결하고자 하였으나 해결하지 못함