二進位制插樁作用
1. 程式執行時攔截,在執行時向程式注入我們自己的**。
2. 除錯程式
3. tracing and logging, 分析函式呼叫關係圖,api覆蓋資料。
4. 提取資料,從程式中提取一些感興趣的關鍵data。
5. 改變程式行為,如程式打補丁,模擬資料(emulation)。
一般二進位制插樁方法
ld_preload設定乙個動態庫路徑,該動態庫會在其他庫(包括the c runtime, libc.so)之前載入。下面可以使程式ls使用我們自己編寫的malloc ()
$ ld_preload=/path/to/my/ libmalloc.so /bin/ls
編寫攔截函式,載入原來系統的動態庫。
注入指令(inject)
函式位址查詢,插入和移除插樁,呼叫原始函式位址(寫回原指令,並重新整理cache)。
注入動態庫
補丁(patch)
proc檔案,/proc//maps
elf檔案,符號段裡面查詢符號。
計算絕對位址,相對位址+基址(symbol address + base address)
記憶體洩漏check動態庫
使用我們自己的malloc hook程式的malloc呼叫。
/* lcheck() is for memory leak check; its code is not shown
here */
void lcheck(void);
void* malloc(size_t size)
void lcheck(void)
編譯和執行
gcc -shared -wl,--no-as-needed -ldl -fpic prog2.c -o libprog2.so
ld_preload=/home/wuchao/sbox/kernel/hook/libprog2.so /bin/ls
intel pin工具
解壓後就可以使用。
編譯pintool工具
$ cd source/tools/manualexamples
$ make strace.test
檢查ls程式
pin-2.13-65163-gcc.4.4.7-linux$ ./pin -t source/tools/manualexamples/obj-ia32/strace.so -- /bin/ls
$ cat ./strace.out
0xb77b5f92: 45(0x0, 0xb77c0ff4, 0x0, 0xb779f000, 0x9, 0xb779f414)returns: 0x9f59000
0xb77b7caf: 33(0xb77ba0e5, 0x0, 0xb77c0ff4, 0xb779f1f4, 0x4, 0xbf831138)returns: 0xffffffff
0xb77b7d61: 192(0x0, 0x2000, 0x3, 0x22, 0xffffffff, 0x0)returns: 0xb6063000
0xb77b7caf: 33(0xb77b9d96, 0x4, 0xb77c0ff4, 0xb77b9d96, 0xb77c1c14, 0xbf8312a8)returns: 0xffffffff
0xb77b7b72: 5(0xb77ba081, 0x80000, 0x0, 0xb77c189c, 0xb77c1b00, 0x1)returns: 0x4
0xb77b7afb: 197(0x4, 0xbf830c40, 0xb77c0ff4, 0xb77c189c, 0x4, 0x1)returns: 0x0
AFL模糊測試學習(二)二進位制插樁
上一節一起學習了使用afl gcc對有原始碼的程式如何插樁,並且插樁的機制,這一節我們來一起學習如何使用qemu對沒有原始碼的二進位制程式進行插樁。首先要執行build qemu support.sh這個指令碼,這個時候如果有沒安裝pixman的錯誤的時候直接用apt安裝即可。apt get ins...
二進位制 二進位制起源
現代通訊技術的基礎是二進位制編碼。早在1865年麥克斯韋總結出麥克斯韋方程組之前,美國人摩斯 morse 於1837年發明了摩斯電碼和有線電報。有線電報的出現,具有劃時代的意義 它讓人類獲得了一種全新的資訊傳遞方式,這種方式 看不見 摸不著 聽不到 完全不同於以往的信件 旗語 號角 烽火,這也是二進...
判斷二進位製半整數(二進位制)
10年後,tokitsukaze大佬已經變成了年收入超百萬的的精英程式設計師,家裡沒錢也沒礦的teitoku,找tokitsukaze大佬借1000塊錢,然後tokitsukaze大佬說,借你1024吧,湊個整數。沒錯在2進製下1024是 二進位制整數 乙個正整數滿足其值為2的k次方 k為正整數 我...