在文件裡找到了這幾個看上去用得上的函式
乙個pydbg模板如下,**書籍r3kapig戰隊的《ctf特練營》dbg_print_all_debug_registers(self)
bp_set(self, address, description=
'', restore=
true
, handler=
none
)get_register(self, register)
@param register: one of eax, ebx, ecx, edx, esi, edi, esp, ebp, eip
hex_dump(self, data, addr=
0, prefix='')
read(self, address, length)
terminate_process(self, exit_code=
0, method=
'terminateprocess'
)write(self, address, data, length=0)
set_register(self, register, value)
load(self, path_to_file, command_line=
none
, create_new_console=
false
, show_window=
true
)
pydbg的相較於od等傳統偵錯程式的優點在於能和python互動,方便寫偵錯程式指令碼,於是我打算用pydbg寫乙個能自動輸入flag,然後下斷點,輸出關鍵的比較資料的指令碼,通過輸出的關鍵資料可以進行爆破。from pydbg import
*from pydbg.defines import
*def
handler1
(dbg)
:# some code here
return dbg_continue
defmain()
: target =
'./reverse0.exe'
dbg = pydbg(
) dbg.load(target,create_new_console=
true
)#set a break point
dbg.bp_set(
0x411a62
,handler=handler1)
dbg.run(
)main(
)
我先寫了個簡單的題目
為了爆破這個程式,我寫了這個指令碼(有問題待解決)#include
#include
#include
void
change
(char
*flag)
}char data[37]
="cj`a|2|ezs^b`w]mdvpdh^
system
("pause");
system
("pause");
return0;
}//flag
我原本想利用subprocess實現自動輸入的,但是發現pydbg attach到這個程式後,subprocess就不能利用管道自動輸入了,因為父程序易主了,subprocess失去了對程式的控制,所以需要手動輸入flag。這與我一開始的想法相違背,但是我嘗試了很多方法均以失敗告終from pydbg import
*from pydbg.defines import
*import subprocess
defcall_back1
(dbg)
:global index
("hello"
) ebp = dbg.get_register(
'ebp'
) read_data = dbg.read(ebp-
0x2c
+index,
36-index)
(read_data)
(len
(read_data)
)return dbg_continue
defcall_back2
(dbg)
: dbg.terminate_process(
)return dbg_continue
defburst()
: brust_str =
'flag'
target = r'd:\0study2\explore\pydbg.exe'
p = subprocess.popen(target)
pid = p.pid
dbg = pydbg(
) dbg.attach(pid)
dbg.bp_set(
0x411a62
,handler=call_back1)
dbg.bp_set(
0x411a93
,handler=call_back2)
dbg.run(
("hello"
)if __name__ ==
'__main__'
: index,char =1,
0 burst(
)
雖然不能自動輸入,但是如果程式是以讀檔案的方式寫入flag的話就沒有這個問題了,這樣我們就能下斷點讀取某個記憶體的值實現爆破了
2021.3.29更新
利用斷點+修改eip克服了自動輸入的問題,可以進行爆破了,但是程式會輸出很多字元,極大降低了爆破的效率,後面我連輸出也繞過了,發現還是慢,偵錯程式爆破就是慢吧
pythongdb使我們可以通過python指令碼來編寫gdb除錯指令碼,詳細文件from pydbg import
*from pydbg.defines import
*# 411a25
cmp_data =
'cj`a|2|ezs^b`w]mdvpdh^_'
max_num =
0num =
0max_char =
''flag =
''if __name__ ==
'__main__'
:for i in
range(36
):max_num =
0for j in
range
(len
(print_table)):
brust_str =
'x'*i + print_table[j]
+'x'*(
35-i)
burst(
)if num > max_num:
max_num = num
max_char = print_table[j]
flag += max_char
(flag)
#flag
(flag)
環境我沒搭建成功,這方面的資料太少了,我這裡提一下,讓大家知道有這樣乙個自動化除錯工具
這個重要性不必多說,官方文件 ,官方文件裡的函式太多了,看起來很痛苦,國內似乎也沒有很好的歸納文章,列乙個勉強還可以的
逆向的話用的最多的就是idc庫的get_bytes
和patch_bytes
了
自動化測試 Python指令碼除錯知識
本次除錯使用到的庫websocket uuid codecs subprocess幾個庫 subprocess.popen類用於在乙個新程序中執行乙個子程式,上述subprocess函式均是基於subprocess.popen類 subprocess.popen args bufsize,stdin...
python 讓繁瑣工作自動化 除錯
將可能出錯的程式放在try子句中,如果出現乙個錯誤,程式就會立刻轉到except處,執行完except處的 後,程式繼續往下執行。def spam divideby try return 42 divideby except print erro invalid argument print spa...
python自動化測試
為了讓單元測試 能夠被測試和維護人員更容易地理解,最好的解決辦法是讓開發人員遵循一定的規範來編寫用於測試的 具體到python程式設計師來講,則是要採用pyunit這一自動測試框架來構造單元測試用例。目前pyunit已經得到了大多數python開發人員的認可,成了事實上的單元測試標準。1.要被測試的...