본문 바로가기

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

(7)
[2021.05.22] 리버싱을 활용한 디버거 플러그인 개발6 Readmemory 함수 플러그인에서 제공해주는 함수, 현재 어태치된 프로세스의 메모리를 읽을 수 있게 해 준다. 대상 프로세스의 핸들을 지정하는 인자가 없기 때문에 그냥 사용하면 된다. 버퍼와 타겟 번지, 그리고 사이즈만을 전달하면 어태치된 프로세스를 그 버처가 읽어와 준다. 다음으로 그 버퍼와 그만큼의 사이즈를 Disasm() 함수에 첫 번째, 두 번째 인자로 넣고 읽을 메모리 번지는 세 번째로 넣는다. 그리고 t_disasm 구조체 변수를 넣어주면 구조체 에 값이 담겨온다. (추가활동) IsDebuggerPresent() 무력화 IsDebuggerPresent() 란? 안티디버깅 기법 중 가장 기초적인 기법 해당 프로세스가 디버깅 당하고 있는지 여부를 PEB 구조체의 디버깅 상태값을 통해 확인하는 ..
[2021.05.15]리버싱을 활용한 디버거 플러그인 개발5 t_memory - 메모리 관련 구조체 Findmemory(): 인자가 1개인 함수, 살펴보고 싶은 메모리 번지를 지정하면 해당 영역에 대한 각종 값을 t_memory 구조체에 채워주는 역할 Findmemory()에 넣은 메모리 번지에는 t_dump 구조체의 sel0 멤버 변수가 가리키고 있음 base는 401000으로 t_dump에서 구한 값과 동일한 값이다. 우리가 선택한 영역은 0x402D09 번지부터 0x402D26번지까지이므로 그 영역에 대한 PE를 구해서 역시 마찬가지로 BaseofCode와 ImageBase를 더한 값을 보여준다. size도 이와 마찬가지이다. t_disasm - 디스어셈블 구조체 t_disasm 구조체는 실제 코드를 디스어셈블하는 역할을 한다. 따라서 각종 어려운 옵코드를 ..
[2021.05.08]리버싱을 활용한 디버거 플러그인 개발4 - PDK 활용 OllyDBG의 플러그인 SDK에는 여러 가지 구조체가 선언되어 있다. 이 구조체와 OllyDBG API의 조합만 잘 살펴보면 복잡한 과정을 거쳐 구해야 하는 값이나 여러가지 번거로운 작업을 쉽고 다이나믹하게 처리할 수 있다. t_dump, t_memory, t_disasm라는 이름의 3개의 구조체는 플러그인 개발에 매우 유용하게 쓰이며, 모두 t_접두사를 사용한다. 이 구조체들은 디버거 관련 사항이 대부분이고 메모리 처리에 대한 내용이 중심을 이룬다. 그렇기 때문에 이 구조체들을 제대로 응용할 수 있다면 대부분의 메모리 컨트롤이 가능하다. - t_dump - 덤프 관련 구조체 위는 덤프관련 구조체로, 20개가 넘는 멤버 변수를 가지고 있지만 모두 사용되는 것은 아니다. 앞에서 작성한 O..
[2021.05.01]리버싱을 활용한 디버거 플러그인 개발3 - 메뉴 핸들러 작성 - ODBG_Pluginaction() 메뉴의 각 기능에 대한 핸들러를 작성. 메뉴를 만들 때 0,1,2 등의 식별자 를 지정했다. 그 숫자에 해당하는 값이 각 메뉴에 해당하는 루틴인데 헷갈리지 않도록 전처리문으로 처리해 놓았다. Hello Olly Dialog를 선택하면 다이얼로그가 생성되게 하는 코드인데 계속 GetStatus 부분에서 오류가 발생한다. 그래서 주석 처리를 하고 빌드하면 성공은 되지만 별다른 기능 수행은 하지 못하는 상황이다. Test를 클릭했을 때 나타나는 결과 About을 클릭했을 때 나타나는 결과 - 종료처리 앞선 코드 작성들로 메뉴 추가, 팝업 출력, 각 메뉴에 대한 핸들러 작성을 완료하였고, 마지막으로 생각해야할 처리는 종료함수이다. 플러그인 사용이 끝난..
[2021.03.27]리버싱을 활용한 디버거 플러그인 개발2 지난 주 오류 피드백 초기화 코드를 수행하는 Plugininit() 함수 부분에서, Log Window에 문자열을 출력하기 위한 Addtolist가 ‘함수에서 참조되는 확인할 수 없는 외부 기호’ 라는 오류 발생 ->해당 부분(Addtolist)은 MessageBox로 대체하여 작성하였음 ODBG_Plugindata() / ODBG_Plugininit() 결과 화면 ODBG_Plugininit 함수 : 초기화 코드를 수행. 메뉴 작성 - ODBG_Pluginmenu() 현재 상태로는 Plugin 메뉴를 눌렀을 때 바로 “HelloOlly” 메뉴가 선택돼 버리기 때문에 여러 가지 기능에 대한 처리를 할 수가 없음, 따라서 다음으로 이 부분에 대한 하위메뉴를 작성하는 작업과 추가적으로 마우스 오른쪽 버튼을 ..
[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 라이브러리를 링크하고 필수적인 익스포트 펑션을 선언하여 기능을 구성하..
[2021.3.13] 디버거 플러그인 개발 프로젝트 관련 개념 ① 리버싱 - 리버스 엔지니어링(Reverse Engineering, 이하 리버싱)이란, 소스 코드를 역추적하는 것을 말한다. 소스 코드를 빌드해서 만들어진 exe, dll 바이너리를 분석해 원래의 소스 코드가 어떤 식으로 만들어졌는지 소스 코드의 구조를 파악하는 행위를 말한다. 이러한 리버싱은 악성코드 분석, 모의해킹 및 취약점 발견, 보안 코드 개발 등에 사용된다. 리버싱에서는 소프트웨어에서 가장 낮은 레벨의 언어인 ‘어셈블리어(Assembly language)’가 사용된다. ② 디버거 - 다른 대상 프로그램을 테스트하고 디버그 하는 데 쓰이는 컴퓨터 프로그램이다. 디버그란 컴퓨터 프로그램 개발 단계 중에 발생하는 시스템의 논리적인 오류나 비정상적 연산(버그)을 찾아내고 그 원인을 밝히고 수정하는 작..