리버싱 기술을 이용하면 기존 어플리케이션의 버그를 수정하거나, 새로운 기능을 추가시킬 수 있습니다. 간단한 실습 예제를 통하여 동작원리를 소개하도록 하겠습니다.





리버싱 기술의 활용



리버싱 기술이 꼭 다른 프로그램을 분석하는 용도로만 사용되는 것은 아닙니다. 약간의 아이디어와 끈기만 있다면 여기서 조금 더 나아가 개발자들이 시도하지 않는 방법으로 작업을 진행할 수 있답니다. '개발 관점' 에서는 어렵게 보이는 문제이지만 오히려 '리버싱 관점' 에서는 쉽게 해결할 수 있는 경우도 있습니다.


* 참고


어플리케이션에 추가 기능을 삽입하는 것은 마치 "API Hooking - 계산기, 한글을 배우다. (1)" 와 비슷한 맥락의 작업 이라고 볼 수 있습니다.


자신이 개발하지 않은 (소스 코드를 가지고 있지 않은) 다른 어플리케이션의 버그 수정이나 전혀 새로운 기능 추가 같은 작업이 바로 그 좋은 예입니다. 이러한 작업의 핵심기술은 "Debugging""Injection" 그리고 "Hooking" 입니다. 또한 어셈블리 언어, PE File Format 등의 지식도 매우 중요합니다.


1) Debugging 


디버깅 기술은 매우 다양하게 사용됩니다. 먼저 작업 설계 단계에서 문제를 파악하고 해결 아이디어를 검증하고 구체화 시키는데 필수적으로 사용됩니다. 구현 단계에서 단위 모듈을 검증하는데에도 사용되고, 마지막 테스트와 버그 파악에 빠져서는 안되는 가장 중요한 기술입니다.


2) Injection


다른 프로세스를 수정하려면 일단 그 프로세스 메모리 영역으로 침투해야 합니다. 이게 바로 인젝션 기술의 역할입니다. 일단 프로세스 메모리에 침투하기만 하면 절반은 성공이라고 볼 수 있습니다.


3) Hooking


기존 코드와 다르게 동작시키려면 후킹 기술을 사용하면 됩니다. 기존에 있던 코드의 흐름을 변경시켜 사용하지 못하게 할 수 도 있고, 새로운 코드를 추가하여 전혀 다르게 동작시킬 수 도 있습니다. 


이제 간단한 실습 예제를 분석하면서 "기존 응용프로그램에 새로운 기능을 추가시키는 방법" 에 대해서 알아보도록 하겠습니다. 제가 아이디어를 내고 구체화 시키고 검증하는 과정, 그리고 실제로 구현하면서 부딪쳤던 문제들과 해결 과정에 대해 자세히 보여드릴 겁니다. 향후 여러분께서 리버싱 기술을 실무에 적용하실 때 작은 도움이 될 것입니다.




실습 프로그램 - HxD.exe 




<그림 1 - HxD.exe>


위 그림은 제가 평소 애용하는 헥스 에디터 HxD.exe 의 실행 화면입니다. dummy32.dll 라는 이름의 PE 파일을 열고 있네요. 


문득 "화면 좌측 하단의 Offset 표시 영역에 RVA 를 계산해서 같이 표시해 주면 어떨까?" 라는 아이디어가 떠올랐습니다. 아이디어의 유용성 여부를 떠나서 일단 재미있어 보였고, 어플리케이션 기능 추가라는 주제에 잘 맞을거 같다는 생각이 들었습니다.


여러차례 시도 끝에 결국 아래와 같이 성공할 수 있었습니다.



<그림 2 - PE 파일의 RVA 표시 기능이 추가된 HxD.exe>


먼저 Offset 과 RVA 를 동시에 표시하기 위해 status bar 의 좌측 하단 영역의 길이를 조금 늘렸습니다. 그리고 글씨를 출력하는 API 를 후킹하기 위한 hxdhook.dll 을 인젝션 시켰습니다. 또한 Offset <-> RVA 변환 계산 모듈 PEInfo.dll 을 로딩하여 계산을 수행하도록 만들었습니다. 이제 HxD.exe 에서 PE 파일을 열고 커서 위치가 변할 때마다 해당 파일 Offset 과 RVA 가 자동으로 표시됩니다.


다음 포스트에서 구체적인 작업 내용과 동작 원리에 대해 알아보도록 하겠습니다.



* 참고


위 실습 예제 파일은 "HxD.exe 기능 추가" 페이지에서 다운 받으실 수 있습니다.




ReverseCore


  1. 감염오리 2012.06.23 18:03 신고 댓글주소 | 수정 | 삭제 | 댓글

    ㅎㅎ 다시 포스팅을 올리시는군요
    앞으로도 더 많은 지식을 알려주시기 바랍니다^^

  2. ray 2012.06.27 04:50 신고 댓글주소 | 수정 | 삭제 | 댓글

    좋은 정보 감사합니다.


HxD.exe 기능 추가!

tool 2012.06.14 00:35

리버싱 기술을 조금 응용하면 다른 응용프로그램의 기능을 추가/변경시킬 수 있습니다. 


제가 애용하는 헥스 에디터 HxD.exe 에 필요한 기능을 살짝 추가하였습니다.



HxD.exe



DLL InjectionAPI Hooking 기술을 이용하여 HxD.exe 프로그램에 새로운 기능을 추가하였습니다.



제가 추가시킨 기능은 PE 파일 Offset 의 RVA 값을 계산해서 출력해 주는 것입니다. (위 그림 참고)


키보드나 마우스를 이용하여 커서 위치를 이동하면 Offset 값이 변함에 따라서 자동으로 그에 맞는 RVA 값이 계산되어 표시됩니다.



사용방법



HxD.exe  - Hex Editor

hxdhook.dll  - hooking dll

InjDll32.exe  - Injector

PEInfo.dll  - File Offset <->RVA converter



1. HxD.exe 실행


2. HxD 에서 아무 PE 파일을 오픈


3. InjDll32.exe 를 이용하여 HxD.exe 프로세스에 hxdhook.dll 을 인젝션





HxD.exe 프로세스에 hxdhook.dll 이 정상적으로 인젝션 되었다면 이제부터 프로그램 하단의 Status Bar 에 Offset 과 RVA 가 동시에 표시될 것입니다. 


크게 유용하다고 볼 수 는 없지만 리버싱 기술을 응용하여 기존 프로그램에 새로운 기능을 추가하는 방법을 잘 보여주는 예제라고 생각합니다. 필요하신 분께서는 자유롭게 가져다 쓰실 수 있습니다.



* 블로그에 리버싱 기술 응용편을 올리기 위해 준비한 간단한 시연입니다. 자세한 동작 원리, 후킹 과정, 모듈 개발 과정 등은 따로 포스팅 하도록 하겠습니다.



ReverseCore



'tool' 카테고리의 다른 글

PEView.exe  (48) 2013.01.27
HxD.exe 기능 추가!  (13) 2012.06.14
리버싱 현업에서 사용되는 디버거(Debugger)들  (31) 2010.09.29
InjDll.exe – DLL Injection/Ejection 전용 도구  (101) 2010.03.15
Process Explorer - 최고의 작업 관리자  (1) 2009.05.03
www.virustotal.com  (3) 2009.03.20
www.google.com  (2) 2009.03.06
  1. rgs 2012.06.14 19:13 신고 댓글주소 | 수정 | 삭제 | 댓글

    와 제가 댔글 처음인건가요 ?
    주인장님
    블로그 다시 시작하시는군요
    매일 들려보는 사람입니다.
    블로그 정말 재밋어요
    계속 열심히 해주세요

  2. 카이섹이 좋아 2012.06.14 20:33 신고 댓글주소 | 수정 | 삭제 | 댓글

    리버스 코어님 ㅠ ㅠ 언제 책이.....

  3. 감염오리 2012.06.15 00:44 신고 댓글주소 | 수정 | 삭제 | 댓글

    드디어!!! 포스팅 재개인가요^^

  4. 마리오 2012.06.15 10:25 신고 댓글주소 | 수정 | 삭제 | 댓글

    오호 포스팅 되었군요ㅎ
    책출판될거보다 포스팅된게 더 반가워요ㅎ

  5. db_click 2012.06.16 10:27 신고 댓글주소 | 수정 | 삭제 | 댓글

    항상 포스팅 감사히 보고 있습니다.

  6. 안녕하세요 2012.06.20 09:52 신고 댓글주소 | 수정 | 삭제 | 댓글

    책이 나오기만을 학수고대하고 있습니다.
    책 나오면 바로 살게요! ^^

  7. reversecore 2012.06.23 00:52 신고 댓글주소 | 수정 | 삭제 | 댓글

    관심 감사드립니다. ^^~

  8. Lr라 2013.03.04 14:47 신고 댓글주소 | 수정 | 삭제 | 댓글

    항상 포스팅 하신글 잘보고있습니다.
    음...~~~ 저걸 이용해서 헥스 만큼 바이트 채우고 시작되는 부분에 call로
    때려서 영역에서 불러와서 인라인 어셈으로 자동인젝션되도록 만들어야겟습니다 ㅎㅎ
    잘쓰겠습니다 ㅎㅎ

  9. absolujin 2013.05.02 15:22 신고 댓글주소 | 수정 | 삭제 | 댓글

    전 이렇게 batch 파일 만들어서 사용하고 있어요.
    잘쓸께요. 감사합니다.
    --------------------------------------------------------------
    @echo off
    start Hxd.exe
    start InjDll32.exe HxD.exe -i hxdhook.dll

  10. yO Kang 2014.03.13 02:12 신고 댓글주소 | 수정 | 삭제 | 댓글

    똑같이 했는데, 저는 "The token does not have the specified privilege" 이런 문구뜨면서 안되네요..
    뭐가 문제일까요?

  11. RBWSN 2016.02.25 06:36 댓글주소 | 수정 | 삭제 | 댓글

    관리자의 승인을 기다리고 있는 댓글입니다





티스토리 툴바