2012年11月29日 星期四

Olly 用法筆記

在Section 上下break point 

Alt+M 開Section map 在code section 上 按F2 可以Set-break-on-access (一次性中斷點)

另一個Set memory breakpoint on access 則是 永久性中斷點, 不能用在DOS 上

對windows message 下中斷點

開windows 視窗 (View/windows) 對想中斷的物件(按鈕) 右鍵下 message break point on ClassProc 之後選 202 WM_LButtonUp

*如果有時候windows 視窗是空的 按右鍵選actualize 刷新*

取消中斷點

Alt+B 刪掉該中斷

Register 條件中斷點

想要中斷的點上按 Shift+F2 輸入條件式 eax==0400000  (也可以打command: bp <位置> eax==0400000)

Memory條件中斷點(指定function 參數值才break)

先設要設的中斷點 run第一次, 看到參數 stack, 如

ESP ==>  > 00401321  /CALL to CreateFileA from Conditio.0040131F
ESP+4    > 004060E8  |FileName = "c:\1212.txt"
ESP+8    > 80000000  |Access = GENERIC_READ
ESP+C    > 00000001  |ShareMode = FILE_SHARE_READ
ESP+10   > 00000000  |pSecurity = NULL
ESP+14   > 00000003  |Mode = OPEN_EXISTING
ESP+18   > 00000080  |Attributes = NORMAL
ESP+1C   > 00000000  \hTemplateFile = NULL

上面相對Esp 設法是 在Addr 上按右鍵 : addr/ Related to ESP

然後就可以直接在function 上 按 shift+F2 條件打法是 [STRING [esp+4]]= “c:\\1212.txt” (注意是二個反斜線, 看來olly沒有處理escape 的問題

command 的話則是打 bp CreateFileA, [STRING [esp+4]]= "c\\1212.txt" (未試,  它怎麼知道要找kernalbase 還是kernel32裡的?)

STRING 是指 0 結尾的ASCII字串