<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    InfinityHook 實踐紀錄武俠版

    VSole2022-12-12 10:40:52

    在我折騰InfinityHook的時候我發現2004下系統沒啥作用,原因是在2004系統上 WMI_LOGGER_CONTEXT->GetCpuClock已經不是rdtsc()函數了,而是一個叫做 EtwpGetLoggerTimeStamp的函數。

    那我們試探下直接拉它看。

    網上資料:EtwpGetLoggerTimeStamp函數按照WMI_LOGGER_CONTEXT->GetCpuClock的值有如下操作:

    大于3拋異常

    等于3用rdtsc

    ////等于2用off_140C00A30 這里是140C01e00

    等于1用KeQueryPerformanceCounter

    等于0用RtlGetSystemTimePrecise

    3,1,0都好說,但是這個2的off_140C00A30 這里是140C01E00。

    看交叉引用。

    放大看:

    他是一個在data上,指向HalpTimerQueryHostPerformanceCounter的指針。

    請看下圖:

    請看下圖:

    追本溯源大概梳理下:

    來源是這里寫

    w 寫入交叉引用,指出了修改變量內容的程序位置。

    這是來源

    lea rax lpTimerQueryHostPerformanceCounter

    mov qword ptr cs:off_140c01e00,rax

    這是出接口

    ((ULONG64)PtrOff140c01e00) = (ULONG64)HookHalpTimerQueryHostPerformanceCounter;

    總結是緣起緣滅。

    思路整理下:

    reinterpret_cast((uintptr_t)CkclWmiLoggerContext + OFFSET_WMI_LOGGER_CONTEXT_CPU_CYCLE_CLOCK) = 2;

    這不就來了么

    lea rax lpTimerQueryHostPerformanceCounter

    mov qword ptr cs:off_140c01e00,hk函數

    這是出接口

    ((ULONG64)hk函數) = (ULONG64)HalpTimerQueryHostPerformanceCounter;

    總結移魂大法。

    資料二:

    再次偉大!

    重操舊業再換個路也能到北京,條條大路通北京。

    這兩個指針其實就是得到系統時間。而且是唯一在HalpTimerQueryHostPerformanceCounter用到的指針。

    如果之前的off_140C00A30是被PG監控的,這兩個指針會不會被監控呢?能不能利用呢?

    此外不僅這個off_140C00A30函數,還有幾個在ETW上必call的函數指針,這些指針有沒有被監控呢?

    讓我們跟蹤這個HalpTimerQueryHostPerformanceCounter上的兩個函數:

    在HalpTimerQueryHostPerformanceCounter中,往下看:

    微軟在棧上初始化了一個數組,然后依次給這個數組賦值,根據賦值的信息,我們可以逆向推導出函數名字:

    HalpTimerInitSystem 140c61f80

    第三個箭頭在48的數組上沒有截圖到(就是追的數據其中之一)。

    劃重點:

    微軟在棧上初始化了一個數組,然后依次給這個數組賦值,根據賦值的信息,我們可以逆向推導出函數名字。

    人家的有函數名字,上面的不知道怎么搞,希望有大佬能具體教一下。修復函數我直接重命名。

    不會搞,無法重塑,就來個原圖。

    從而得知如下信息:

    就從這個HvlGetQpcBias下手:

    他會查詢一個HvlpReferenceTscPage表,我們手動定位:

    mov cs:HvlpReferenceTscPage,rdi

    替換這個表地址

    mov cs:HvlpReferenceTscPage,函數地址

    移魂大法走起。

    發現都是在出接口 hook。

    指針賦值
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    判斷父進程是否存在,不存在則退出,否則,調用PspCreateProcess。判斷創建標志是否包含除DEBUG_PROCESSDEBUG_ONLY_THIS_PROCESS,CREATE_SUSPENDED之外其它標志, 如果包含其他的標志,則報錯退出。該函數會調用SeSubProcessToken函數來設置新進程對象的令牌對象。
    網上關于ShellCode編寫的文章很多,但介紹如何在ShellCode里面使用異常處理的卻很少。Windows程序的異常處理,其實是三者結合的:操作系統、編譯器和程序代碼。因為x86下異常處理的文章太多,所以本文只介紹Win64下的。而Win64的異常處理,是基于表的。也就是說,編譯器在編譯代碼的時候,會同時對每個函數生成一個異常表,最后鏈接到PE的異常表里。相對來說,這個比X86更加安全和高效。
    因此參考了《黑客免殺攻防》中的代碼對DLL型殼編寫的結構進行了一次歸納整理,并附上相應代碼解析。
    文中使用的示例代碼可以從 這里 獲取。的功能是在終端打印出hello這6個字符(包括結尾的?編譯它們分別生成libtest.so和?存在嚴重的內存泄露問題,每調用一次say_hello函數,就會泄露1024字節的內存。
    安裝app后打開,點擊驗證提示我們flag格式錯誤,請重試。紅色圖部分為源碼目錄,也就是dex文件反編譯后的源碼。R文件存儲了資源相關的id,比如圖片資源,按鈕,文字等信息都存儲在這個R文件里。在需要使用時就用R.xxx.xxx調用即可。
    假如想在x86平臺運行arm程序,稱arm為source ISA, 而x86為target ISA, 在虛擬化的角度來說arm就是Guest, x86為Host。這種問題被稱為Code-Discovery Problem。每個體系結構對應的helper函數在target/xxx/helper.h頭文件中定義。
    之前在網上看到很多師傅們總結的linux反彈shell的一些方法,為了更熟練的去運用這些技術,于是自己花精力查了很多資料去理解這些命令的含義,將研究的成果記錄在這里,所謂的反彈shell,指的是我們在自己的機器上開啟監聽,然后在被攻擊者的機器上發送連接請求去連接我們的機器,將被攻擊者的shell反彈到我們的機器上,下面來介紹分析幾種常用的方法。
    控制流劫持攻擊是當前較為主流的攻擊方式之一,包括ROP、JOP等等。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类