SlideShare a Scribd company logo
DLL 분석 방법 
유상윤(yoosy0302@naver.com)
왜이런걸 정리하나?
어디에서부터 분석해야 할지 모르겠 
음!!!!!!!!!
이러한 이유로 DLL 분석 방법을 정리하였다.
우리는 무엇을 알아야 할까? 
DLL Export 함수 종류별로 
실행 방법을 알고 있어야함
DLL Export 함수 
1. DLLRegisterServer / DLLUnregisterServer 
2. Export Function Names … etc 
3. ServiceMain 
이렇게 있음
그러면 DLL Export 함수를어떻게호출하는지 보 
자!!!!!
1. DLLRegisterServer / DLLUnregisterServer 
동작 원리 
1. OleInitialize 
2. LoadLibrary to load the DLL 
GetProcAddress를 호출해서, DllRegisterServer or 
DllUnregisterServer의 주소를 알아 낸 후, 
3. DllRegisterServer or DllUnregisterServer 호출 
4. FreeLibrary 
5. OleUninitialize
1. DLLRegisterServer / DLLUnregisterServer 
유의 사항 
3. DllRegisterServer or DllUnregisterServer 호출후 
해당 함수에서 또 다른 Export 함수를 호출할 
수 있음
1. DLLRegisterServer / DLLUnregisterServer 
호출 방법 
3. DllRegisterServer or DllUnregisterServer 호출 
regsvr32.exe 파일에 의해서 실행시 호출됨 
Ex> regsvr32.exe sample.dll (DllRegisterServer호출) 
regsvr32.exe /u sample.dll (DllUnregisterServer호출)
1. DLLRegisterServer / DLLUnregisterServer 
분석 방법 
1. OllyDbg를 이용해서 %system%regsvr32.exe를 
연다.
1. DLLRegisterServer / DLLUnregisterServer 
분석 방법 
2. OllyDbg의 Debug -> Arguments 
에서 분석 대상 DLL 파일을 연다.
1. DLLRegisterServer / DLLUnregisterServer 
분석 방법 
3. OleInitialize에 BreakPoint를 설정한다. 그런 다음 LoadLibrary로 
분석 대상 DLL파일을 메모리에 맵핑후 GetProcAddress로 DLLRegisterServer 
주소를 가져오는 코드를 볼 수 있다. 
그리고 나서 해당 함수를 호출하는 CALL문에 진입하면 된다.
2. Export Function Names … etc 
동작 원리 
1. GetCommandLineW 
Export 함수명을 파싱 
2. LoadLibrary to load the DLL 
GetProcAddress를 호출해서, Export 함수의 주소를 알아 낸 후, 
3. Export 함수 호출 
4. FreeLibrary
2. Export Function Names … etc 
유의 사항 
3. Export 함수 분석시 
파일 하나에 Export 함수가 다수 존재할 수 있어서 어떤 함수를 가장 먼저 실행해 
야하는지 알려면 관련 DLL 파일을 실행하는 파일 
을 분석해야 알 수 있음 
관련 Dll 파일이 없을 경우에는 각 Export 함수를 분석하여 어떤 함수가 가장 먼 
저 실행해야하는지 유추할 수 있음
2. Export Function Names … etc 
호출 방법 
3. Export 함수 호출 
rundll32.exe 파일에 의해서 실행시 호출됨 
Ex> rundll32.exe sample.dll, ALSTS_ExecuteAction 
(ALSTS_ExecuteAction Export 함수 호출)
2. Export Function Names … etc 
분석 방법 
1. OllyDbg를 이용해 
서 %system%rundll32.exe를 연다.
2. Export Function Names … etc 
분석 방법 
2. OllyDbg의 Debug -> Arguments 
에서 분석 대상 DLL 파일을 연다. 
regsvr32.exe 와 다르게 Export 함수명을 인자로 추가해야함
2. Export Function Names … etc 
분석 방법 
3. LoadLibrary로 분석 대상 DLL파일을 메모리에 맵핑후 GetProcAddress로 
Export 함수 주소를 가져오는 코드를 볼 수 있다. 
그리고 나서 해당 함수를 호출하는 CALL문에 진입하면 된다.
3. ServiceMain 
동작 원리 
1. StartService 
SCM(ServiceControlManager)에 의해 하기 레지스트리에 등록된 서비스 실행 파일을 
실행 
경로 : HKEY_LOCAL_MACHINESystemCurrentControlSetService 
2. ServiceMain 호출 
SCM의 Dispatcher에 의해 ServiceMain 함수 호출 
3. RegisterServiceCtrlHandler 
서비스의 제어 신호를 처리하기 위해 핸들러를 SCM의 Dispatcher에 등록 
4. SetServiceStatus 
서비스 제어 신호를 SCM의 Dispatcher에 전달
3. ServiceMain 
유의 사항 
2. ServiceMain 함수 분석시 
서비스로 등록하여 동작하기 때문에 rundll32.exe 파일로 ServiceMain 호출하 
여 분석시 서비스를 열고 상태 정보를 얻는 과정에서 Exception 발생함. 
따라서 서비스 등록하여 실행하는 또 다른 파일이 필요함. 
해당 파일이 없을 경우에는 sc 명령을 이용하여 서비스 등록하여 실행하여야 함. 
Ex> sc create 서비스명 binPath= 서비스 DLL 파일 경로 설정 
실행 조건에 인자가 필요하면 설정해주어야함.
3. ServiceMain 
호출 방법 
2. ServiceMain 호출 
svchost.exe 파일에 의해서 실행시 호출됨 
Ex> svchost.exe -k 서비스명 
서비스 Dcomlunch, netsvcs 등에 의해 관련 DLL 파일의 
ServiceMain함수를 호출함
3. ServiceMain 
분석 방법 
1. 분석 대상 DLL 파일이 서비스로 동작중이면 중지 
한다.
3. ServiceMain 
분석 방법 
2. OllyDbg에서 Options -> Just-in-time debugging 로 가서 Make 
allyDbg just-in-time debugger 기능을 활성화한다. 그런 다음 Done을 
클릭하고 OllyDbg를 종료한다.
3. ServiceMain 
분석 방법 
3. 분석 대상 DLL파일 ServiceMain 의 첫번째 1 Byte를 0xCC로 변경한다. 
그렇게 하는 이유는 서비스를 시작하면 INT 3h 인터럽트가 발생하여 OllyDbg 
가 자동으로 디버깅 가능하도록 Attach할 수 있기 때문이다. 먼저 
ServiceMain의 주소를 확인하고 해당 주소는 RVA임으로 File 
Offset를 확인한다.
3. ServiceMain 
분석 방법 
4. 분석 대상 DLL 파일의 ServiceMain의 첫번째 1 Byte를 
0xCC로 변경한다. 원본 1 Byte에 해당하는 바이너리는 기억한다. 
OllyDbg에 의해 Attach 한 후 원본 바이너리로 복원해야 하기 때문이다.
3. ServiceMain 
분석 방법 
5. 서비스를 시작하면, OllyDbg가 해당 서비스를 Attach하여 보여준다. 
그런 다음 첫번째 1 Byte를 원본 바이너리로 복원한다.
끝!!!!!!!!

More Related Content

What's hot

SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
Masahito Zembutsu
 
2017 02-14 キュー実装に見る排他処理
2017 02-14 キュー実装に見る排他処理2017 02-14 キュー実装に見る排他処理
2017 02-14 キュー実装に見る排他処理
Akishige TAKEKOSHI
 
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
Naoya Kishimoto
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
Kohei Tokunaga
 
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解するそうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解するshigeki_ohtsu
 
Introduction to Spock
Introduction to SpockIntroduction to Spock
Introduction to Spock
Takahiro Sugiura
 
Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovyJava開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovy
Yasuharu Nakano
 
Actor Model Akka Framework
Actor Model Akka FrameworkActor Model Akka Framework
Actor Model Akka Framework
Harinath Krishnamoorthy
 
Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集
Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集
Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集
matsu_chara
 
Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드
Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드 Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드
Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드
SangIn Choung
 
TerraformによるIaCの導入
TerraformによるIaCの導入TerraformによるIaCの導入
TerraformによるIaCの導入
IAJ Co.,Ltd.
 
Resiliency vs High Availability vs Fault Tolerance vs Reliability
Resiliency vs High Availability vs Fault Tolerance vs  ReliabilityResiliency vs High Availability vs Fault Tolerance vs  Reliability
Resiliency vs High Availability vs Fault Tolerance vs Reliability
jeetendra mandal
 
Elixirと他言語の比較的紹介 ver.2
Elixirと他言語の比較的紹介ver.2Elixirと他言語の比較的紹介ver.2
Elixirと他言語の比較的紹介 ver.2
Tsunenori Oohara
 
[Cloud OnAir] 【Google Kubernetes Engine 演習】解説を聞きながら GKE を体験しよう 2020年10月29日 放送
[Cloud OnAir] 【Google Kubernetes Engine 演習】解説を聞きながら GKE を体験しよう 2020年10月29日 放送[Cloud OnAir] 【Google Kubernetes Engine 演習】解説を聞きながら GKE を体験しよう 2020年10月29日 放送
[Cloud OnAir] 【Google Kubernetes Engine 演習】解説を聞きながら GKE を体験しよう 2020年10月29日 放送
Google Cloud Platform - Japan
 
OpenAPIを利用したPythonWebアプリケーション開発
OpenAPIを利用したPythonWebアプリケーション開発OpenAPIを利用したPythonWebアプリケーション開発
OpenAPIを利用したPythonWebアプリケーション開発
Takuro Wada
 
年の瀬リアルタイム通信サーバ勉強会
年の瀬リアルタイム通信サーバ勉強会年の瀬リアルタイム通信サーバ勉強会
年の瀬リアルタイム通信サーバ勉強会
モノビット エンジン
 
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
慎一 古賀
 
若輩エンジニアから見たUniRxを利用したゲーム開発
若輩エンジニアから見たUniRxを利用したゲーム開発若輩エンジニアから見たUniRxを利用したゲーム開発
若輩エンジニアから見たUniRxを利用したゲーム開発
Hirohito Morinaga
 
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
whywaita
 

What's hot (20)

SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
 
2017 02-14 キュー実装に見る排他処理
2017 02-14 キュー実装に見る排他処理2017 02-14 キュー実装に見る排他処理
2017 02-14 キュー実装に見る排他処理
 
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
 
コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門コンテナ未経験新人が学ぶコンテナ技術入門
コンテナ未経験新人が学ぶコンテナ技術入門
 
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解するそうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
そうだったのか! よくわかる process.nextTick() node.jsのイベントループを理解する
 
Introduction to Spock
Introduction to SpockIntroduction to Spock
Introduction to Spock
 
Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovyJava開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovy
 
Actor Model Akka Framework
Actor Model Akka FrameworkActor Model Akka Framework
Actor Model Akka Framework
 
Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集
Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集
Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集
 
Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드
Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드 Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드
Postman과 Newman을 이용한 RestAPI 테스트 자동화 가이드
 
TerraformによるIaCの導入
TerraformによるIaCの導入TerraformによるIaCの導入
TerraformによるIaCの導入
 
Resiliency vs High Availability vs Fault Tolerance vs Reliability
Resiliency vs High Availability vs Fault Tolerance vs  ReliabilityResiliency vs High Availability vs Fault Tolerance vs  Reliability
Resiliency vs High Availability vs Fault Tolerance vs Reliability
 
Elixirと他言語の比較的紹介 ver.2
Elixirと他言語の比較的紹介ver.2Elixirと他言語の比較的紹介ver.2
Elixirと他言語の比較的紹介 ver.2
 
[Cloud OnAir] 【Google Kubernetes Engine 演習】解説を聞きながら GKE を体験しよう 2020年10月29日 放送
[Cloud OnAir] 【Google Kubernetes Engine 演習】解説を聞きながら GKE を体験しよう 2020年10月29日 放送[Cloud OnAir] 【Google Kubernetes Engine 演習】解説を聞きながら GKE を体験しよう 2020年10月29日 放送
[Cloud OnAir] 【Google Kubernetes Engine 演習】解説を聞きながら GKE を体験しよう 2020年10月29日 放送
 
OpenAPIを利用したPythonWebアプリケーション開発
OpenAPIを利用したPythonWebアプリケーション開発OpenAPIを利用したPythonWebアプリケーション開発
OpenAPIを利用したPythonWebアプリケーション開発
 
年の瀬リアルタイム通信サーバ勉強会
年の瀬リアルタイム通信サーバ勉強会年の瀬リアルタイム通信サーバ勉強会
年の瀬リアルタイム通信サーバ勉強会
 
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
 
若輩エンジニアから見たUniRxを利用したゲーム開発
若輩エンジニアから見たUniRxを利用したゲーム開発若輩エンジニアから見たUniRxを利用したゲーム開発
若輩エンジニアから見たUniRxを利用したゲーム開発
 
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
CyberAgent における OSS の CI/CD 基盤開発 myshoes #CICD2021
 

Similar to Dll 분석 방법

Windosw via c 스터디20장.pptx
Windosw via c 스터디20장.pptxWindosw via c 스터디20장.pptx
Windosw via c 스터디20장.pptx
HolyTak
 
19_DLL의 기본.pptx
19_DLL의 기본.pptx19_DLL의 기본.pptx
19_DLL의 기본.pptx
ssuser0c2478
 
Windows reversing study_basic_6
Windows reversing study_basic_6Windows reversing study_basic_6
Windows reversing study_basic_6
Jinkyoung Kim
 
Java rmi 개발 가이드
Java rmi 개발 가이드Java rmi 개발 가이드
Java rmi 개발 가이드
중선 곽
 
Hyperledger farbric build your first network install and analysis
Hyperledger farbric   build your first network install and analysisHyperledger farbric   build your first network install and analysis
Hyperledger farbric build your first network install and analysis
병준 김
 
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
iFunFactory Inc.
 
Effective c++ 1~8장
Effective c++ 1~8장 Effective c++ 1~8장
Effective c++ 1~8장
Shin heemin
 
20170908 tech day-9th-재미없는 java runtime process 디버그-김성중
20170908 tech day-9th-재미없는 java runtime process 디버그-김성중20170908 tech day-9th-재미없는 java runtime process 디버그-김성중
20170908 tech day-9th-재미없는 java runtime process 디버그-김성중
ymtech
 
Giip doc1411-01-notification servicemanual
Giip doc1411-01-notification servicemanualGiip doc1411-01-notification servicemanual
Giip doc1411-01-notification servicemanual
Lowy Shin
 
게임 랭킹 ( Game Leader Board )
게임 랭킹 ( Game Leader Board )게임 랭킹 ( Game Leader Board )
게임 랭킹 ( Game Leader Board )
ssuserda2e71
 
Windows reversing study_basic_5
Windows reversing study_basic_5Windows reversing study_basic_5
Windows reversing study_basic_5
Jinkyoung Kim
 
(130216) #fitalk reverse connection tool analysis
(130216) #fitalk   reverse connection tool analysis(130216) #fitalk   reverse connection tool analysis
(130216) #fitalk reverse connection tool analysis
INSIGHT FORENSIC
 
JavaScript Profiling With The Chrome Developer Tools_SYS4U I&C
JavaScript Profiling With The Chrome Developer Tools_SYS4U I&CJavaScript Profiling With The Chrome Developer Tools_SYS4U I&C
JavaScript Profiling With The Chrome Developer Tools_SYS4U I&Csys4u
 
반복적인 코드 작업 자동화, Codebone으로 손쉽게
반복적인 코드 작업 자동화, Codebone으로 손쉽게반복적인 코드 작업 자동화, Codebone으로 손쉽게
반복적인 코드 작업 자동화, Codebone으로 손쉽게
Sungju Jin
 
04 dll 분석
04 dll 분석04 dll 분석
04 dll 분석
Ilsun Choi
 
Java rmi 개발 가이드
Java rmi 개발 가이드Java rmi 개발 가이드
Java rmi 개발 가이드중선 곽
 
Dll 하이재킹
Dll 하이재킹Dll 하이재킹
Dll 하이재킹
Seungyong Lee
 
2015 SW마에스트로 100+ 컨퍼런스_오픈스택 Swift로 시작하는 오픈소스 분석 삽질기
2015 SW마에스트로 100+ 컨퍼런스_오픈스택 Swift로 시작하는 오픈소스 분석 삽질기2015 SW마에스트로 100+ 컨퍼런스_오픈스택 Swift로 시작하는 오픈소스 분석 삽질기
2015 SW마에스트로 100+ 컨퍼런스_오픈스택 Swift로 시작하는 오픈소스 분석 삽질기
2015 SW마에스트로 100+ 컨퍼런스
 
04 프로세스
04 프로세스04 프로세스
04 프로세스
ssuser3fb17c
 
Showroom 2019-react
Showroom 2019-reactShowroom 2019-react
Showroom 2019-react
Deuk Jung Kim
 

Similar to Dll 분석 방법 (20)

Windosw via c 스터디20장.pptx
Windosw via c 스터디20장.pptxWindosw via c 스터디20장.pptx
Windosw via c 스터디20장.pptx
 
19_DLL의 기본.pptx
19_DLL의 기본.pptx19_DLL의 기본.pptx
19_DLL의 기본.pptx
 
Windows reversing study_basic_6
Windows reversing study_basic_6Windows reversing study_basic_6
Windows reversing study_basic_6
 
Java rmi 개발 가이드
Java rmi 개발 가이드Java rmi 개발 가이드
Java rmi 개발 가이드
 
Hyperledger farbric build your first network install and analysis
Hyperledger farbric   build your first network install and analysisHyperledger farbric   build your first network install and analysis
Hyperledger farbric build your first network install and analysis
 
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
[MGDC] 리눅스 게임 서버 성능 분석하기 - 아이펀팩토리 김진욱 CTO
 
Effective c++ 1~8장
Effective c++ 1~8장 Effective c++ 1~8장
Effective c++ 1~8장
 
20170908 tech day-9th-재미없는 java runtime process 디버그-김성중
20170908 tech day-9th-재미없는 java runtime process 디버그-김성중20170908 tech day-9th-재미없는 java runtime process 디버그-김성중
20170908 tech day-9th-재미없는 java runtime process 디버그-김성중
 
Giip doc1411-01-notification servicemanual
Giip doc1411-01-notification servicemanualGiip doc1411-01-notification servicemanual
Giip doc1411-01-notification servicemanual
 
게임 랭킹 ( Game Leader Board )
게임 랭킹 ( Game Leader Board )게임 랭킹 ( Game Leader Board )
게임 랭킹 ( Game Leader Board )
 
Windows reversing study_basic_5
Windows reversing study_basic_5Windows reversing study_basic_5
Windows reversing study_basic_5
 
(130216) #fitalk reverse connection tool analysis
(130216) #fitalk   reverse connection tool analysis(130216) #fitalk   reverse connection tool analysis
(130216) #fitalk reverse connection tool analysis
 
JavaScript Profiling With The Chrome Developer Tools_SYS4U I&C
JavaScript Profiling With The Chrome Developer Tools_SYS4U I&CJavaScript Profiling With The Chrome Developer Tools_SYS4U I&C
JavaScript Profiling With The Chrome Developer Tools_SYS4U I&C
 
반복적인 코드 작업 자동화, Codebone으로 손쉽게
반복적인 코드 작업 자동화, Codebone으로 손쉽게반복적인 코드 작업 자동화, Codebone으로 손쉽게
반복적인 코드 작업 자동화, Codebone으로 손쉽게
 
04 dll 분석
04 dll 분석04 dll 분석
04 dll 분석
 
Java rmi 개발 가이드
Java rmi 개발 가이드Java rmi 개발 가이드
Java rmi 개발 가이드
 
Dll 하이재킹
Dll 하이재킹Dll 하이재킹
Dll 하이재킹
 
2015 SW마에스트로 100+ 컨퍼런스_오픈스택 Swift로 시작하는 오픈소스 분석 삽질기
2015 SW마에스트로 100+ 컨퍼런스_오픈스택 Swift로 시작하는 오픈소스 분석 삽질기2015 SW마에스트로 100+ 컨퍼런스_오픈스택 Swift로 시작하는 오픈소스 분석 삽질기
2015 SW마에스트로 100+ 컨퍼런스_오픈스택 Swift로 시작하는 오픈소스 분석 삽질기
 
04 프로세스
04 프로세스04 프로세스
04 프로세스
 
Showroom 2019-react
Showroom 2019-reactShowroom 2019-react
Showroom 2019-react
 

Dll 분석 방법

  • 1. DLL 분석 방법 유상윤(yoosy0302@naver.com)
  • 3. 어디에서부터 분석해야 할지 모르겠 음!!!!!!!!!
  • 4. 이러한 이유로 DLL 분석 방법을 정리하였다.
  • 5. 우리는 무엇을 알아야 할까? DLL Export 함수 종류별로 실행 방법을 알고 있어야함
  • 6. DLL Export 함수 1. DLLRegisterServer / DLLUnregisterServer 2. Export Function Names … etc 3. ServiceMain 이렇게 있음
  • 7. 그러면 DLL Export 함수를어떻게호출하는지 보 자!!!!!
  • 8. 1. DLLRegisterServer / DLLUnregisterServer 동작 원리 1. OleInitialize 2. LoadLibrary to load the DLL GetProcAddress를 호출해서, DllRegisterServer or DllUnregisterServer의 주소를 알아 낸 후, 3. DllRegisterServer or DllUnregisterServer 호출 4. FreeLibrary 5. OleUninitialize
  • 9. 1. DLLRegisterServer / DLLUnregisterServer 유의 사항 3. DllRegisterServer or DllUnregisterServer 호출후 해당 함수에서 또 다른 Export 함수를 호출할 수 있음
  • 10. 1. DLLRegisterServer / DLLUnregisterServer 호출 방법 3. DllRegisterServer or DllUnregisterServer 호출 regsvr32.exe 파일에 의해서 실행시 호출됨 Ex> regsvr32.exe sample.dll (DllRegisterServer호출) regsvr32.exe /u sample.dll (DllUnregisterServer호출)
  • 11. 1. DLLRegisterServer / DLLUnregisterServer 분석 방법 1. OllyDbg를 이용해서 %system%regsvr32.exe를 연다.
  • 12. 1. DLLRegisterServer / DLLUnregisterServer 분석 방법 2. OllyDbg의 Debug -> Arguments 에서 분석 대상 DLL 파일을 연다.
  • 13. 1. DLLRegisterServer / DLLUnregisterServer 분석 방법 3. OleInitialize에 BreakPoint를 설정한다. 그런 다음 LoadLibrary로 분석 대상 DLL파일을 메모리에 맵핑후 GetProcAddress로 DLLRegisterServer 주소를 가져오는 코드를 볼 수 있다. 그리고 나서 해당 함수를 호출하는 CALL문에 진입하면 된다.
  • 14. 2. Export Function Names … etc 동작 원리 1. GetCommandLineW Export 함수명을 파싱 2. LoadLibrary to load the DLL GetProcAddress를 호출해서, Export 함수의 주소를 알아 낸 후, 3. Export 함수 호출 4. FreeLibrary
  • 15. 2. Export Function Names … etc 유의 사항 3. Export 함수 분석시 파일 하나에 Export 함수가 다수 존재할 수 있어서 어떤 함수를 가장 먼저 실행해 야하는지 알려면 관련 DLL 파일을 실행하는 파일 을 분석해야 알 수 있음 관련 Dll 파일이 없을 경우에는 각 Export 함수를 분석하여 어떤 함수가 가장 먼 저 실행해야하는지 유추할 수 있음
  • 16. 2. Export Function Names … etc 호출 방법 3. Export 함수 호출 rundll32.exe 파일에 의해서 실행시 호출됨 Ex> rundll32.exe sample.dll, ALSTS_ExecuteAction (ALSTS_ExecuteAction Export 함수 호출)
  • 17. 2. Export Function Names … etc 분석 방법 1. OllyDbg를 이용해 서 %system%rundll32.exe를 연다.
  • 18. 2. Export Function Names … etc 분석 방법 2. OllyDbg의 Debug -> Arguments 에서 분석 대상 DLL 파일을 연다. regsvr32.exe 와 다르게 Export 함수명을 인자로 추가해야함
  • 19. 2. Export Function Names … etc 분석 방법 3. LoadLibrary로 분석 대상 DLL파일을 메모리에 맵핑후 GetProcAddress로 Export 함수 주소를 가져오는 코드를 볼 수 있다. 그리고 나서 해당 함수를 호출하는 CALL문에 진입하면 된다.
  • 20. 3. ServiceMain 동작 원리 1. StartService SCM(ServiceControlManager)에 의해 하기 레지스트리에 등록된 서비스 실행 파일을 실행 경로 : HKEY_LOCAL_MACHINESystemCurrentControlSetService 2. ServiceMain 호출 SCM의 Dispatcher에 의해 ServiceMain 함수 호출 3. RegisterServiceCtrlHandler 서비스의 제어 신호를 처리하기 위해 핸들러를 SCM의 Dispatcher에 등록 4. SetServiceStatus 서비스 제어 신호를 SCM의 Dispatcher에 전달
  • 21. 3. ServiceMain 유의 사항 2. ServiceMain 함수 분석시 서비스로 등록하여 동작하기 때문에 rundll32.exe 파일로 ServiceMain 호출하 여 분석시 서비스를 열고 상태 정보를 얻는 과정에서 Exception 발생함. 따라서 서비스 등록하여 실행하는 또 다른 파일이 필요함. 해당 파일이 없을 경우에는 sc 명령을 이용하여 서비스 등록하여 실행하여야 함. Ex> sc create 서비스명 binPath= 서비스 DLL 파일 경로 설정 실행 조건에 인자가 필요하면 설정해주어야함.
  • 22. 3. ServiceMain 호출 방법 2. ServiceMain 호출 svchost.exe 파일에 의해서 실행시 호출됨 Ex> svchost.exe -k 서비스명 서비스 Dcomlunch, netsvcs 등에 의해 관련 DLL 파일의 ServiceMain함수를 호출함
  • 23. 3. ServiceMain 분석 방법 1. 분석 대상 DLL 파일이 서비스로 동작중이면 중지 한다.
  • 24. 3. ServiceMain 분석 방법 2. OllyDbg에서 Options -> Just-in-time debugging 로 가서 Make allyDbg just-in-time debugger 기능을 활성화한다. 그런 다음 Done을 클릭하고 OllyDbg를 종료한다.
  • 25. 3. ServiceMain 분석 방법 3. 분석 대상 DLL파일 ServiceMain 의 첫번째 1 Byte를 0xCC로 변경한다. 그렇게 하는 이유는 서비스를 시작하면 INT 3h 인터럽트가 발생하여 OllyDbg 가 자동으로 디버깅 가능하도록 Attach할 수 있기 때문이다. 먼저 ServiceMain의 주소를 확인하고 해당 주소는 RVA임으로 File Offset를 확인한다.
  • 26. 3. ServiceMain 분석 방법 4. 분석 대상 DLL 파일의 ServiceMain의 첫번째 1 Byte를 0xCC로 변경한다. 원본 1 Byte에 해당하는 바이너리는 기억한다. OllyDbg에 의해 Attach 한 후 원본 바이너리로 복원해야 하기 때문이다.
  • 27. 3. ServiceMain 분석 방법 5. 서비스를 시작하면, OllyDbg가 해당 서비스를 Attach하여 보여준다. 그런 다음 첫번째 1 Byte를 원본 바이너리로 복원한다.