본문 바로가기

My Study/Reversing

OllyDbg v1.xx Plugin - OllyRename

 * Write bug or feedback in comments


working list

 - Local rename function.

 - Improvement for conflict with other plugins ( ex. OllyRename is conflict with "FullDisasm" plugin )

 - Stabilization


================== Plugin Release Info =============

 @ 2013 / 04 / 01

[+] OllyRename ver 1.1.2 release

 - Memory recognition bugfix


OllyRename_ver 1.1.2.zip



 @ 2013 / 03 / 30

[+] OllyRename ver 1.1.1 release

 - OllyRename UDD function bugfix


OllyRename_ver 1.1.1.zip



 @ 2013 / 03 / 28

[+] OllyRename ver 1.1.0 release

 - Save rename list to file(OllyRename UDD) - Similar to ollydbg udd

 - bugfix


OllyRename_ver 1.1.0.zip



 @ 2013 / 03 / 27

[+] OllyRename ver 1.0.0 release


OllyRename_ver 1.0.0.zip


=============================== ver 1.1 Screenshot ============================

제 플러그인을 OllyDbg 플러그인 폴더에 넣어주고 올디를 실행하면

OllyDbg working dir에 "OllyRenameUDD" 에 폴더가 생성됩니다. ( 있다면 생성 안함 )

이 폴더에 OllyRename 플러그인을 이용해 분석한 내용을 파일마다 각각 저장해 줍니다.

올리디버거의 UDD 개념과 유사하다고 보시면 됩니다.



저렇게 된 상태에서 올디를 정상적으로 끄게되면 자동으로 OllyRename UDD가 저장됩니다.

하지만 비정상적으로 종료될 경우도 대비해 사용자가 수시로 저장할 수 있도록 Save UDD 기능을 넣어놨습니다.


그리고 OllyRename UDD에 저장되는 값은 현재 실행파일의 SizeOfImage 내부 값만 저장됩니다.

즉, kernel32.dll 내부의 메모리 값을 Rename 해봤자 그 당시에만 쓸수있고 껐다키면 kernel32.dll 내부에 적용한 사항은 초기화 되어 있습니다. 


저장된 형태는 이와 같습니다.

그리고 똑같은 파일을 다시 디버깅 시 BeaEngine + Rename을 눌러주시면 udd 값이 그대로 적용됩니다.



=============================== ver 1.0 Screenshot ============================

IDA로 바이너리를 분석하다보면 참 좋은 기능이 있습니다. 그래프로 보여주는 것도 당연히 좋은 기능이지만 전역변수라던지 알 수 없는 함수 이름들에 분석가가 나름대로 이름을 붙힐 수 있죠.



위와 같이 sub_401146 은 딱봐도 printf 지만 보기 편하게 하기 위해 Rename 작업을 할 수 있죠. 저렇게 하나만 Rename 해주면 해당 주소들이 전부 printf로 바뀌게 됩니다. 이런 점 때문에 IDA를 쓰는걸지도 모르겠군요.


이러한 작업을 OllyDbg에서는 왜 못하는 걸까요?

당연히 OllyDbg는 이러한 기능이 없기 때문이죠. 


제가 OllyDbg에서도 이러한 기능을 사용할 수 있게끔 플러그인을 만들어봤습니다. :D


일단 추가적인 설명을 하기전에 사용방법부터 알아보겠습니다.



플러그인은 위와 같이 생겼습니다.

내부적으로 BeaEngine을 사용했습니다.


Info : 정보

Only Olly Engine : 디스어셈블링을 OllyDbg 내부 엔진을 사용한다.

BeaEngine : 디스어셈블링을 BeaEngine을 사용한다.

BeaEngine + Rename : BeaEngine을 사용한 상태에서 Rename 기능을 활성화한다.

BeaEngine-MASM, NASM, GOASM, AT&T : BeaEngine으로 디스어셈블링 시 표시할 어셈방식

Upper/Lower : 디스어셈블링 시 대문자/소문자

About : 만든이 정보


로 구성되어 있습니다.

딱 봐도 알겠지만 Rename 기능을 사용하려면 무조건 BeaEngine을 사용해야합니다.


가장 중요한 Rename 기능을 어떻게 쓰는지 알아보겠습니다.


1. 디버깅할 프로그램을 붙힌다.

2. OllyRename->BeaEngine + Rename을 클릭한다.


준비는 끝났습니다.



간단한 콘솔 프로그램인데 저 부분이 main 함수입니다. 하지만 보기 불편하므로 OllyRename의 Rename 기능을 사용해 바꿔보겠습니다. 저 줄을 클릭 후 마우스 우클릭을 합니다. 그리고 Rename을 클릭합니다.



최대한 사용하기 쉽고 보기쉽게 만들어보려고 노력했습니다. 그런거 같나요? ㅎ_ㅎ


Rename 부분에 분석가가 원하는 문자열로 바꾸고 Rename 버튼을 클릭하면 바뀌게됩니다.

( Rename을 지원하는 부분은 header, code, data, import, export 영역입니다. )



짠~!


다시 우클릭해서 들어가보겠습니다.



오른쪽 Listbox에 현재 저장된 Rename 항목이 들어있습니다. 더이상 필요없다면 옆에 Delete 기능을 사용해 삭제해주면 됩니다. 다시 원래데로 돌아옵니다.


이 기능을 활용하면 아래와 같이


원본코드입니다.


Rename이 적용된 코드입니다.


굿이죠? :D


그리고 다음과 같이 코드를 자동으로 인식해 값 설정을 할 수 있습니다.



저기서 Rename을 적용하면 딱 메모리 값 부분만 바뀌게 됩니다 !


아직은 원하는데로 작동하지 않은 부분도 있을 것입니다.

여기서 개발을 중단하는것이 아닌 저도 계속 사용하고 이 플러그인을 쓰는 모든 분들의 피드백을 받아 점차 안정성있고 다양한 기능을 지원하는 플러그인을 만들어볼 생각입니다.


* 버그나 추가적으로 있으면 하는 기능은 이 글의 댓글로 달아주세요 ^^

'My Study > Reversing' 카테고리의 다른 글

IDA에서 사용되는 calling convention  (3) 2013.01.24
IceSword ?! 뭐하는 놈?  (4) 2012.11.13
바람의나라 가상머신 탐지 우회  (18) 2012.09.10
온라인 알까기 가상머신 탐지 우회  (6) 2012.09.06
VERA ( Reversing tool )  (12) 2012.07.31