angr学习笔记(13)(static_binary)
生活随笔
收集整理的這篇文章主要介紹了
angr学习笔记(13)(static_binary)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
angr系列
00_angr_find
01_angr_avoid
02_angr_find_condition
03_angr_symbolic_registers
04_angr_symbolic_stack
05_angr_symbolic_memory
06_angr_symbolic_dynamic_memory
07_angr_symbolic_file
08_angr_constraints
09_angr_hooks
10_angr_simprocedures
13_angr_static_binary
文章目錄
- angr系列
- 00_angr_find
- 01_angr_avoid
- 02_angr_find_condition
- 03_angr_symbolic_registers
- 04_angr_symbolic_stack
- 05_angr_symbolic_memory
- 06_angr_symbolic_dynamic_memory
- 07_angr_symbolic_file
- 08_angr_constraints
- 09_angr_hooks
- 10_angr_simprocedures
- 13_angr_static_binary
- 偽代碼分析
- 腳本
- 驗證
偽代碼分析
(觀察以上函數(shù),都是利用靜態(tài)鏈接編入文件,并非調(diào)用動態(tài)鏈接庫,想要提高程序執(zhí)行效率需要把它們利用內(nèi)置的libc函數(shù)進行替換)
angr里頭寫好了很多內(nèi)置的libc函數(shù),從而讓我們用hook來提高符號執(zhí)行的速度。
要知道更多的函數(shù),可以訪問下面的網(wǎng)址:
https://github.com/angr/angr/tree/master/angr/procedures/libc
找出靜態(tài)鏈接的函數(shù)地址:
printf_addr=0x0804ED40scanf_addr=0x0804ED80strcmp_addr=0x08048280puts_addr=0x0804F350libc_start_main=0x08048D10利用內(nèi)置的libc函數(shù)進行替換操作:
p.hook(printf_addr,angr.SIM_PROCEDURES['libc']['printf']())p.hook(scanf_addr,angr.SIM_PROCEDURES['libc']['scanf']())p.hook(strcmp_addr,angr.SIM_PROCEDURES['libc']['strcmp']())p.hook(puts_addr,angr.SIM_PROCEDURES['libc']['puts']())p.hook(libc_start_main,angr.SIM_PROCEDURES['glibc']['__libc_start_main']())注意,這個__libc_start_main是屬于glibc庫,并非libc,如果寫成libc的話,那么最后沒有結(jié)果產(chǎn)生。
腳本
import angr import sys def main(argv):bin_path=argv[1]p=angr.Project(bin_path)init_state=p.factory.entry_state()printf_addr=0x0804ED40scanf_addr=0x0804ED80strcmp_addr=0x08048280puts_addr=0x0804F350libc_start_main=0x08048D10p.hook(printf_addr,angr.SIM_PROCEDURES['libc']['printf']())p.hook(scanf_addr,angr.SIM_PROCEDURES['libc']['scanf']())p.hook(strcmp_addr,angr.SIM_PROCEDURES['libc']['strcmp']())p.hook(puts_addr,angr.SIM_PROCEDURES['libc']['puts']())p.hook(libc_start_main,angr.SIM_PROCEDURES['glibc']['__libc_start_main']())def is_good(state):return b'Good Job.' in state.posix.dumps(1)def is_bad(state):return b'Try again.' in state.posix.dumps(1)sm=p.factory.simgr(init_state)sm.explore(find=is_good,avoid=is_bad)if sm.found:found_state=sm.found[0]print("Solution: {}".format(found_state.posix.dumps(0)))else:raise Exception('Solution not found')if __name__=='__main__':main(sys.argv) PNMXNMUD驗證
總結(jié)
以上是生活随笔為你收集整理的angr学习笔记(13)(static_binary)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: angr学习笔记(11)(SimProc
- 下一篇: frida框架