• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆-159  評論-223  文章-30  trackbacks-0
            Linux共享庫庫函數掛鉤主流兩種方法。一是替換函數對應的GOT/PLT條目,GOT/PLT原理類似Windows的IAT;二是inline掛鉤,即替換函數序言的幾個字節(x86是5或7字節)為jmp/call,若發現稍遠處有jmp或call(前提在入口基本塊內,若不在入口基本塊內要修改分支控制條件,這有點復雜也無必要),則其目標地址可被替換,這樣就不用替換序言的幾字節了。Windows的IAT掛鉤檢測很方便,因為dll的baseaddr及size可通過API VirtualQueryEx(https://learn.microsoft.com/zh-cn/windows/win32/api/memoryapi/nf-memoryapi-virtualqueryex)或toolhelp庫的Module32First/Module32Next(https://learn.microsoft.com/zh-cn/windows/win32/api/tlhelp32/nf-tlhelp32-module32first)接口來獲取。同理linux也可以拿到有兩種方法,一種是讀/proc/pid/maps(這里pid為實際目標進程號)獲取so庫代碼段的baseaddr和size,另一種用dl_iterate_phdr(https://man7.org/linux/man-pages/man3/dl_iterate_phdr.3.html)拿到代碼段(pt_load類型+可執行標志)的baseaddr及size。只要模塊(代碼段)的baseaddr及size確定了,檢測方法同IAT,即看替換函數地址是否不在代碼段空間內,若不在或地址不是原函數則認為被掛鉤了,否則需進一步用針對inline掛鉤法的檢測處理,見下文描述。另外dladdr(https://man7.org/linux/man-pages/man3/dladdr.3.html)判斷一個地址是否跟一個so庫及符號相關,因此也可用于檢測掛鉤。如果是inline掛鉤法,那么分析函數入口基本塊內(不管替換序言幾字節還是已有jmp/call目標地址,都在入口基本塊)jmp/call的目標地址(最好用成熟的反匯編引擎分析,比如llvm的mc庫反匯編功能,或https://salsa.debian.org/debian/distorm3),看是否超出so庫的代碼段空間
            posted on 2023-09-26 16:47 春秋十二月 閱讀(2149) 評論(0)  編輯 收藏 引用 所屬分類: System
            亚洲国产另类久久久精品黑人| 久久99久久成人免费播放| 国产成人精品久久亚洲高清不卡 国产成人精品久久亚洲高清不卡 国产成人精品久久亚洲 | 色妞色综合久久夜夜| 久久99精品久久久久久噜噜| 欧美va久久久噜噜噜久久| 综合久久给合久久狠狠狠97色| 久久久精品国产Sm最大网站| 九九久久精品无码专区| 国产真实乱对白精彩久久| 精品乱码久久久久久夜夜嗨| 超级碰久久免费公开视频| 草草久久久无码国产专区| 理论片午午伦夜理片久久| 亚洲欧美一级久久精品| 老男人久久青草av高清| 新狼窝色AV性久久久久久| 亚洲国产欧美国产综合久久| 久久精品亚洲中文字幕无码麻豆| 日本人妻丰满熟妇久久久久久| 久久久久亚洲AV无码观看| 99久久精品免费看国产一区二区三区 | 精品久久久久久久| 亚洲美日韩Av中文字幕无码久久久妻妇 | 麻豆精品久久久一区二区| 久久久www免费人成精品| 中文字幕无码免费久久| 久久99精品久久久久久久不卡| 精品久久久久久久| 欧美成人免费观看久久| 久久亚洲中文字幕精品有坂深雪| 精品午夜久久福利大片| 人妻丰满?V无码久久不卡| 久久久亚洲欧洲日产国码aⅴ| 国产激情久久久久影院| 18岁日韩内射颜射午夜久久成人| 精品久久人人爽天天玩人人妻| 久久精品国产亚洲AV久| 99久久精品午夜一区二区 | 久久国产成人精品国产成人亚洲| 久久久久久国产精品美女|