2013年12月11日 星期三

碎片的生命感

 

最近的日子急劇變化.

從懷孕開始,我就知道是一個時代的結束.只是懞懂的不知道是從什麼樣的時代結束.

之後緊接著準備訂婚,面對孕期各式各樣快速變化的不適,搬到公婆家附近的新家,寶寶出生的醫院生活,北醫月子期, 住在公婆家補最後一周的月子, 搬回新家學著帶小生命

每一個時期都是一個大變化,都需要重新調整, 幾乎每個都是才剛習慣了一個生活方式,就換了下一個.

所以, 我在這時候勇敢的建議了老公, 不如在這個比較習慣變化的時候, 換工作到大陸去.

雖然以我對自己的了解, 另一半在同公司一直對我而言很重要, 給我很大的安全感和幸福感.

這也是我第一次主動建議另一半離開我工作/念書環境.

主要原因當然是因為想給寶寶比較好的生活環境. 但是,

次要的原因則是, 心裡其實早就暗暗的覺得老公為了我放棄了很多機會, 明白這樣的"放棄"不會是最終的解法.

所以, 就像選擇模擬考結果當最後結果一樣, 我選了這一次, 因為我覺得這次成功的機會最大.

在這麼多變化之後,再接著一個, 或許, 會比較無感.

原本結束產假回去, 就會有一段努力期. 在我回公司之前, 老公離開公司. 只是在苦瓜上淋上檸檬汁. 不會再更難吃到那裡去.

在那之前, 我還在習慣新家裡的新生命的這個變化裡. 進度: 迎接新家自己帶第四夜的到來. 自認上手程度:40%

2013年11月7日 星期四

2013年10月23日 星期三

Pop Quiz of Dump Sharing (6) – windbg script writing

 

上課Vedio (to be add)

1) KD 檢查thread hang, 通常都已經進到kernel context , 切回user mode 的Context, 要先怎麼什麼k command 的參數來把trapframe秀出來

.kvn

2)承1,找到trapframe number之後下什麼command 來切回user mode context

.trap

3)承2, 在此x64 user context中,找那一個register 來做stack reconstruct, 指令怎麼下

dps <rsp> Lxx

4)  下什麼command 來把thread 切到wow64 的32 bit context

.thread /w <thread>

5) 怎麼檢查目前是那一種expression

.expr

6) 怎麼切成c++ expression

.expr /s c++

7)試解釋為什麼 bp main+5c 只能在MASM expression 用, 但不能在C++用

因為masm 會把symbol (main) 當成一個address, 可以相加, 但是c++ expression 無法知道symbol +數字的意思(type 不能混用)

8)??是那一個expression 的evaluation

C++

9)要指定expression 要用什麼evaluator

@@

2013年10月16日 星期三

Pop Quiz of Dump Sharing (5) – x64 platform introduction

 

上課Vedio (youtube)

1) 要看thread目前用的stack 範圍要用那二個值夾擠?

.teb的stack base 和 register 的 esp

2)x86下, Q1中要用什麼指令來方便找ebp chain

dps

3) 如果手動找到ebp, 要怎麼下k 指令來重建stack

k = ebp esp eip

4) Q3中, 要檢查什麼?

1.Start Function是不是 BaseThreadStart

2. 看stack frame 合不合理

5) 切回exception 前的context 要用什麼指令

.cxr

6) x64 有幾種Calling convention

只有一種fastcall

7)x64  的fastcall 是用那幾個register 傳

cd89

8)試解釋homing 是什麼

雖然參數用register 傳 但是也會把參數放在stack中, 方便debug

9)Reverse 時, memory 視窗打@$csp的目的是

保持memory 視窗show 出目前用到的stack

 

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>