2013年9月25日 星期三

Pop Quiz of Dump Sharing (3) – Dump introduction

 

上課Vedio (待補)

1) Physical memory 大小是8G的Page file size要設多大才能做出完整的complete memory dump?

8G+1MB

2) kernel dump 包含的內容是那些?

只有正在read/write 的kernel memory page

3) Microsoft 如果程式出問題了會回傳的dump 是那一種? 內容大概是什麼? 大小是多少?

small memory dump, 只有程式的一些information summary, x86: 64 KB, x64:128KB

4) user dump 中, mini 和full 最大的差別

Handle table的有無

5) 如何enable complemte full memory dump

1. 設CrashControl registry 把CrashDumpEnabled 設成1

2. 調大page file size 成physical memory+1MB

6) 如何拿到user dump

Vista 之前 用process explorer, Vista之後直接用Taskmgr

7)試舉出 一種 crash 機器的tool

NotMyFault

8)windbg 做kernel mode dump的指令

.crash .dump

9)windbg 做user mode mini-full dump 的指令

.dump /mfh <filepath>

10)試舉出可能產生不出dump 的原因

1. 在session manager 起來之前的native application 有問題

2. dump driver 有問題

11)打lm確定module的symbol 有load 進來, 狀態有那幾種, 各代表什麼意思

pdb: symbol load 成功

deffered: 找到但還沒有用到, 用到才load

export: 從module 的export table 找到的symbol

12) 基本判斷symbol 有load 對的方式是在xp 和win7中各看到什麼start function name?

xp: kernel32!BaseProcessStart,  win7: ntdll!_RtlUserThreadStart

13) Load symbol 如果太慢可以用什麼指令來開load symbol 的Debug message

.sym noisy

14) 什麼指令可以強迫load symbol 不檢查checksum

.symopt+0x40

15) 拿到dump 要check的三件事

windbg 版本有支援, Dump 的完整性, symbol 的版本

2013年9月16日 星期一

Ollydbg 看malware 小技巧

1. 如果Create svchost 要inject 用. CreateProcess時把path 改成 notdpad

2. 如果過程有SetContextThread, 不能attach 先把context eip改到一個

3. 如果過程有WriteProcessMemory, 也不能先attach, 要先等它寫完, ResumeThread的時候再 attach上去

4. 如果過程中有CreateProcess 後再CreateRemoteThread, Attach上target process 時要讓tragetProcess 先跑一陣子 (理想上大概是attach進去 會到到KiFastSystemCallRet). 再執行CreateRemoteThread 不然 有時候太早attach 進去target process 會一直access violation 或exception 而讓malware 的behavior 沒有跑起來 (查原因...)

5. olly2 可以Attach suspend 的process 但olly1不行, 但olly2 看不到handle table, 所以同場加映....

 

用process explorer 看特定process 的handle table

如圖 在View DLL 或View Handle 中 選View Handle

image

 

image

然後把handle value勾選起來

image

就可以看到和olly 一樣的handle 對照表 (還更清楚, olly1中process 和thread看不到name )

6. 如果WinExec(底下是call CreateProcessInternalW) 或create process 用gflags 或直接去下 Image File Execution Options Registry 來讓process 一開始就用olly 跑起來沒有用的話,  可以試著改target image file 的Entry point 往前提早2byte 插EBFE (2byte jump 自己指令) 來做busy loop 就讓它create 起來 等attach之後再改 start from real entry point. 以下是細步:

6.1 改entry point 往前提2 byte

按enter 切到hex mode後 用F8 看header, 按F5到entry point 後往前2byte 按FE (edit)改EBFE

image

之後再開一次 找到entry point  改成-2的值 (如此例是2c91) 一樣是F3-Edit/F9-Update

image

改完後再開一次header 來看(F8), 確定entry point 有改對,

image

跳過去(F5)值有對 EBFE

image

改完就可以讓malware 把target image 執行起來, 以下是直接執行示範, 理論上都會讓某顆CPU high (因為我是4核, 所以只有其中一顆busy)

image

olly 進去會看到它停在剛剛的entry point

…做到這裡發現... 在我x64的主機上居然失敗. (x86VM裡改會成功)  這裡就先把流程記下來吧 >"< 之後再找原因

2013年9月15日 星期日

[olly 使用筆記]- 觀察新跑起來的process

 

首先 找到你的Gflag (如果是win 7 可以直接 用global flag 找 start menu)

image

在image file 那一頁可以設default debugger

image

其實他做的事情就是去設一個registry

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\calc.exe]
"Debugger"="\"C:\\Program Files\\Debugging Tools for Windows (x64)\\windbg.exe\""

手動設也是可以(如果沒有裝debugging tool)

 

***這個作法對於injection 的malware 需另外調整, 請看下一篇文章***

2013年9月11日 星期三

關windbg 的C++ exception event filter

 

之前有提到怎麼看c++ exception on crash dump

後來我自己用另一台VM做keiko chou的作業, 有遇到user mode debuggin c++ exception 沒有停下來的狀況

原來是c++ exception 被windbg handle 掉了

(如果沒有被handle 掉就可以看到以下畫面, exception number + register context, k的話會停在cxxthrowException

image

但如果被handle 掉就只有會 exception number

怎麼關掉windbg handle c++ exception呢(default是關的)

Debug/Eventfilters..

image

把c++ exception 設成 not handled 就好了 (enable)

2013年9月9日 星期一

[網路轉載]美國幼稚園給爸爸媽媽的19點備忘錄

 

很喜歡 所以記在這


1.別溺愛我。我很清楚的知道,不應該得到每一樣我所要求的東西。 我只是在試探妳。
2.別害怕對我保持公正的態度。它反倒讓我有安全感。
3.別讓我養成壞習慣。在年幼的此刻,我得依靠你來分辨它。
4.別讓我覺得我比實際的我還要渺小。它只會讓我愚蠢的裝出超出我實際年齡的傻模樣。
5.如果能夠,請別在人前糾正我的錯誤。你私下的提醒,會讓我更加的注意自己的行為。
6.別讓我覺得我犯的錯誤是一種罪。它會降低我的人生價值觀。
7.當我說「我恨你」的時候別太沮喪。我恨的絕不是你,而是那降生在我身上的壓力。
8.別過度的保護我,怕我無法接受一些「後果」。有的時候,我需要經由痛苦的方式來學習。
9.別太在意我的小病痛。有時候,我只是想得到你的注意。
10.別嘮叨不休,否則有時候我會裝聾作啞。
11.別在倉促或無意中做下允諾。請記住,當你不能信守諾言時,我會是多麼的難過。
12.別忘了我還不能把事情解釋的很清楚,雖然有時候我看起來是有能力的。這也是為什麼我不能事事正確無誤的緣故。
13. 別太指望我的誠實,我很容易因為害怕而撒謊。
14.請別在管教原則上前後不連貫、不持續。它會使我疑惑,而對你失去了信任。
15.當我問問題的時候,別敷衍我或拒絕我。否則你會發現我終將停止對你發問,而向它處尋求答案。
16.別告訴我說,我的害怕很傻、很可笑。如果你試著去了解,便會發現它對我是多麼的真實。
17.別暗示或讓我感覺到你是完美、無懈可擊的。當我發現你並非如此的時候,對我將是一項多麼大的打擊。
18.別認為向我道歉是沒有尊嚴的事。一個誠實的道歉,會讓我對你更接近,對你感覺更溫暖。
19.別忘記我最愛做實驗。

2013年9月6日 星期五

Pop Quiz of Dump Sharing (2) – 常用指令

 

上課Vedio (待補)

1)  要看process example.exe 所有symbol的指令

x emample!*

2)  看load module 和unloaded module的指令

lm

3) 如果module 已經被unload了, 可以用那一個指令來Reload symbol

.reload /unl

4) 上次提到context 有五種, 試舉出三種

session context, process context , user mode address context, register context, local  context

5) session 0在 xp和在vista 代表的有什麼不同

session 0 在xp中是service 和console session, 在vista之後是service session

6) 在kd下, 切process context的指令, 請reload symbol, 並切需要的page table

.process /r /p /P <eprocess>

7)如果process example.exe 的所有thread hang住了, 可以用什麼指令觀察, 要看什麼欄位

!process <eprocess> 7

看thread 的Ticks

8)user mode debugging下, 看所有thread的stack要用什麼指令

~*k

9)Diassembly process example.exe 裡的winmain function要怎麼下

uf example!winmain

10)印出 example.exe 的g_var1 這個變數 成長度為1的dword

dd example!g_var1 L1

11)印出windows 內部的data structure _eprocess長相

dt _eprocess

12)列出所有CS的指令

!cs

13) 看CS 的dead lock的, 要找那一個function來找cs的pointer, 指令要怎麼下

RtlEnterCriticalSection

!cs <addr>