SlideShare uma empresa Scribd logo
1 de 19
•
•
•
•
•
•
•
0x00040100
Code
ESP
Memory
0x00040100
0xFF 0xE4 (JMP ESP)
RET
JMP ESP
•
•
• 0x00040100
Code
ESP
Memory
0x00040100
0xFF 0xE4 (JMP ESP)
RET
JMP ESP
EXCEPTION!
•
•
•
•
•
•
UINT WinExec(
LPCSTR lpCmdLine, // コマンドラインへのポインタ
UINT uCmdShow // ウィンドウの表示状態
);
•
•
•
•
•
•
•
STACK
VirtualAlloc
memcpy
CreateFile
Args for
VirtualAlloc
Args for
memcpy
Args for
CreateFile
VirtualAlloc
memcpy
CreateFile
(Somewhere)
•
•
•
??????
Code
ESP
Memory
??????
0xFF 0xE4 (JMP ESP)
RET
JMP ESP
•
•
•
•
•
•
•
•
...
pop eax
pop ecx
mov
pop eax
ret
pop ecx
ret
mov [ecx], eax
ret
0x12345678
0x07FF5090
STACK
RET
RET
RET
•
•
•
•
•
•
•
•
•
call後のSTACK
ret
args
…
…
Push 0
push eax
call WinExec
mov [edx], eax
…
1番目の関数
呼び出し後のSTACK
ret
args
…
1番目の関数
…
ret
次に実行したい関数
…
ret
普通の関数呼び出し
ROP
????
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
FROM1
LBR Stack
TO1
FROM2 TO2
FROM3 TO3
FROM0 TO0
MyDbgPrint("Address 'add' : %pn", add); // Print address of “add”
__writemsr(IA32_DEBUGCTL, 1); // 0x1D9 Start Branch Recording
tmp = add(10,20); // The Address Here is 0x9db8f258
tmp += add(10,30); // The Address Here is 0x9db8f264
__writemsr(IA32_DEBUGCTL, 0); // End Branch Recording
TOS = __readmsr(MSR_LASTBRANCH_TOS); // 0x1C9 Get Top of the Stack
MyDbgPrint("TOS:%d", TOS);
for( i = 0; i<4 ; i++ ){
FROM_IP[i] = __readmsr(MSR_LASTBRANCH_0_FROM_IP+i); // 0x680 + i
TO_IP[i] = __readmsr(MSR_LASTBRANCH_0_TO_IP+i); // 0x6C0 + i
}
for( i = 0 ; i < 4; i++ ){
MyDbgPrint("FROM_IP%d : 0x%016I64xn", i, FROM_IP[i]);
MyDbgPrint("TO_IP%d : 0x%016I64xn", i, TO_IP[i]);
}
Address 'add' : 9DB8F180
TOS:3
FROM_IP0 : 0x000000009db8f258 // From first add() call
TO_IP0 : 0x000000009db8f180 // To “add” function
FROM_IP1 : 0x000000009db8f18c // From end of “add” function (return)
TO_IP1 : 0x000000009db8f25d // To next of “FROM_IP0”
FROM_IP2 : 0x000000009db8f264 // From second add() call
TO_IP2 : 0x000000009db8f180 // To “add” function
FROM_IP3 : 0x000000009db8f18c // From end of “add” function (return)
TO_IP3 : 0x000000009db8f269 // To next of “FROM_IP2”
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•

Mais conteúdo relacionado

Destaque

CTF, What's in it for me?
CTF, What's in it for me?CTF, What's in it for me?
CTF, What's in it for me?Hiromu Yakura
 
ナウいAndroidセキュリティ
ナウいAndroidセキュリティナウいAndroidセキュリティ
ナウいAndroidセキュリティHiromu Yakura
 
SEAndroid -AndroidのアーキテクチャとSE化について-
SEAndroid -AndroidのアーキテクチャとSE化について-SEAndroid -AndroidのアーキテクチャとSE化について-
SEAndroid -AndroidのアーキテクチャとSE化について-Hiromu Yakura
 
Why don't you learn programming?
Why don't you learn programming?Why don't you learn programming?
Why don't you learn programming?Hiromu Yakura
 
OSS奨励賞受賞プレゼン 活動紹介
OSS奨励賞受賞プレゼン 活動紹介OSS奨励賞受賞プレゼン 活動紹介
OSS奨励賞受賞プレゼン 活動紹介Hiromu Yakura
 
Androidにおける強制アクセス制御
Androidにおける強制アクセス制御Androidにおける強制アクセス制御
Androidにおける強制アクセス制御Hiromu Yakura
 
Arduinoでプログラミングに触れてみよう
Arduinoでプログラミングに触れてみようArduinoでプログラミングに触れてみよう
Arduinoでプログラミングに触れてみようHiromu Yakura
 
Trendmicro Security Award 2012 Final Presentation
Trendmicro Security Award 2012 Final PresentationTrendmicro Security Award 2012 Final Presentation
Trendmicro Security Award 2012 Final PresentationHiromu Yakura
 
GAME ON 特別イベント 「ゲームってなんでプログラミング?」
GAME ON 特別イベント 「ゲームってなんでプログラミング?」GAME ON 特別イベント 「ゲームってなんでプログラミング?」
GAME ON 特別イベント 「ゲームってなんでプログラミング?」Hiromu Yakura
 
Arduinoでプログラミングに触れてみよう 続編
Arduinoでプログラミングに触れてみよう 続編Arduinoでプログラミングに触れてみよう 続編
Arduinoでプログラミングに触れてみよう 続編Hiromu Yakura
 
数式を使わないJubatus入門
数式を使わないJubatus入門数式を使わないJubatus入門
数式を使わないJubatus入門Kenji Aiko
 
セキュリティ・キャンプのススメ
セキュリティ・キャンプのススメセキュリティ・キャンプのススメ
セキュリティ・キャンプのススメHiromu Yakura
 
CTFはとんでもないものを 盗んでいきました。私の時間です…
CTFはとんでもないものを 盗んでいきました。私の時間です…CTFはとんでもないものを 盗んでいきました。私の時間です…
CTFはとんでもないものを 盗んでいきました。私の時間です…Hiromu Yakura
 

Destaque (17)

CTF, What's in it for me?
CTF, What's in it for me?CTF, What's in it for me?
CTF, What's in it for me?
 
ナウいAndroidセキュリティ
ナウいAndroidセキュリティナウいAndroidセキュリティ
ナウいAndroidセキュリティ
 
SEAndroid -AndroidのアーキテクチャとSE化について-
SEAndroid -AndroidのアーキテクチャとSE化について-SEAndroid -AndroidのアーキテクチャとSE化について-
SEAndroid -AndroidのアーキテクチャとSE化について-
 
Why don't you learn programming?
Why don't you learn programming?Why don't you learn programming?
Why don't you learn programming?
 
OSS奨励賞受賞プレゼン 活動紹介
OSS奨励賞受賞プレゼン 活動紹介OSS奨励賞受賞プレゼン 活動紹介
OSS奨励賞受賞プレゼン 活動紹介
 
検証、SEAndroid
検証、SEAndroid検証、SEAndroid
検証、SEAndroid
 
Androidにおける強制アクセス制御
Androidにおける強制アクセス制御Androidにおける強制アクセス制御
Androidにおける強制アクセス制御
 
Arduinoでプログラミングに触れてみよう
Arduinoでプログラミングに触れてみようArduinoでプログラミングに触れてみよう
Arduinoでプログラミングに触れてみよう
 
Trendmicro Security Award 2012 Final Presentation
Trendmicro Security Award 2012 Final PresentationTrendmicro Security Award 2012 Final Presentation
Trendmicro Security Award 2012 Final Presentation
 
ICTのちから
ICTのちからICTのちから
ICTのちから
 
GAME ON 特別イベント 「ゲームってなんでプログラミング?」
GAME ON 特別イベント 「ゲームってなんでプログラミング?」GAME ON 特別イベント 「ゲームってなんでプログラミング?」
GAME ON 特別イベント 「ゲームってなんでプログラミング?」
 
Nyarlathotep
NyarlathotepNyarlathotep
Nyarlathotep
 
Arduinoでプログラミングに触れてみよう 続編
Arduinoでプログラミングに触れてみよう 続編Arduinoでプログラミングに触れてみよう 続編
Arduinoでプログラミングに触れてみよう 続編
 
数式を使わないJubatus入門
数式を使わないJubatus入門数式を使わないJubatus入門
数式を使わないJubatus入門
 
Arrow Judge
Arrow JudgeArrow Judge
Arrow Judge
 
セキュリティ・キャンプのススメ
セキュリティ・キャンプのススメセキュリティ・キャンプのススメ
セキュリティ・キャンプのススメ
 
CTFはとんでもないものを 盗んでいきました。私の時間です…
CTFはとんでもないものを 盗んでいきました。私の時間です…CTFはとんでもないものを 盗んでいきました。私の時間です…
CTFはとんでもないものを 盗んでいきました。私の時間です…
 

Kbouncer