<progress id="yueoz"><code id="yueoz"><xmp id="yueoz">

      1. 吾愛破解 - LCG - LSG |安卓破解|病毒分析|www.13ee.cn

         找回密碼
         注冊[Register]

        QQ登錄

        只需一步,快速開始

        搜索
        查看: 8857|回復: 61
        上一主題 下一主題

        [PC樣本分析] 在看永恒之藍

          [復制鏈接]
        跳轉到指定樓層
        樓主
        Assassin_ 發表于 2020-6-9 11:00 回帖獎勵
        使用論壇附件上傳樣本壓縮包時必須使用壓縮密碼保護,壓縮密碼:52pojie,否則會導致論壇被殺毒軟件等誤報,論壇有權隨時刪除相關附件和帖子!
        本帖最后由 Assassin_ 于 2020-6-9 11:00 編輯

        再談永恒之藍

        前言

        文章本來想寫雙脈沖星后門,但是在調試過程中,發現永恒之藍這個調試過程有點長,所以單獨成文,之后有時間再看雙脈沖星后門。

        在分析過程中,可能有些結構或者過程和網上的不太一致,如果存在錯誤或者不準確的地方,還請海涵。如果在調試過程中存在疑惑,十分歡迎與小弟進行交流。

        漏洞背景

        永恒之藍是美國國家安全局開發的漏洞利用程序,于2017年4月14日被影子經紀人泄漏。該工具利用445/TCP端口的文件分享協議的漏洞進行散播,無需用戶任何操作,只要開機上網,就能在電腦中植入惡意程序

        前提知識

        SMB

        首先在講SMB之前,先要知道什么是SMB,以及SMB連接過程發生了什么事情,雖然網上已經有很多,但紙上得來終覺淺,所以就邊操作變寫這篇文章。

        先來百科一下SMB:

        SMB( Server Message Block ),服務消息塊,是 IBM 公司在 80 年代中期發明的一種文件共享協議,電腦上的網上鄰居就是靠它實現的 。它只是系統之間通信的一種方式(協議),并不是一款特殊的軟件。

        SMB 協議被設計成為允許計算機通過本地局域網(LAN)在遠程主機上讀寫文件。遠程主機上通過 SMB 協議開放訪問的目錄稱為 共享文件夾。

        生命周期

        一次普通的SMB會話一般經歷以下六方面

        SMB協議協商(Negotiate)

        在一個SMB還沒有開始的時候,由客戶端率先發出一個協商請求。在請求中,客戶端會列出所有它所支持協議版本以及所支持的一些特性(比如加密Encryption、持久句柄Persistent Handle、客戶端緩存Leasing等等)。而服務端在回復中則會指定一個SMB版本且列出客戶端與服務端共同支持的特性。

        建立SMB會話(Session Setup)

        客戶端選擇一個服務端支持的協議來進行用戶認證,可以選擇的認證協議一般包括NTLM、Kerberos等。按照選擇的認證協議的不同,這個階段可能會進行一次或多次SESSION_SETOP請求/回復的網絡包交換。至于NTLM或Kerberos認證協議的細節,我們會另文再敘。

        連接一個文件分享(Tree Connect)

        在會話建立之后,客戶端會發出連接文件分享的請求。源于文件系統的樹形結構,該請求被命名為樹連接(Tree Connect)。以SMB協議的阿里云NAS為例,一般的SMB掛載命令為:

        net use z: \\XXX.nas.aliyuncs.com\myshare

        其中的“ \XXX.nas.aliyuncs.com\myshare”便是我們將要連接的那個文件分享,也便是那棵“樹”。

        如果在“myshare”中創建有子目錄“abc”,那直接連接“abc”這棵子樹也是可以的:

        net use z: \\XXX.nas.aliyuncs.com\myshare\abc

        文件系統操作

        在文件分享連接成功之后,用戶通過SMB客戶端進行真正的對于目標文件分享的業務操作。這個階段可以用到的指令有CREATE、CLOSE、FLUSH、READ、WRITE、SETINFO、GETINFO等等。

        斷開文件分享連接(Tree Disconnect)

        當一個SMB會話被閑置一定時間之后,Windows會自動斷開文件分享連接并隨后中止SMB會話。這個閑置時間可以通過Windows注冊表進行設定。當然,用戶也可以主動發起斷開連接請求。

        終止SMB會話(Logoff)

        當客戶端發出會話中止請求并得到服務端發回的中止成功的回復之后,這個SMB會話至此便正式結束了。

        下圖為SMB2,其過程和SMB類似

        利用WireShark流量分析

        SMB結構

        在分析之前,先看一下SMB數據包的格式,如果需要更進一步的詳情,可查看官網

        SMB消息可分為三個部分:
        固定長度的標頭
        可變長度參數塊
        可變長度數據塊

        標頭標記消息標識為SMB消息,指定要執行的命令并提供上下文。在響應消息中,標頭還包含狀態信息,該狀態信息指示命令是成功還是失敗。

        參數塊是兩字節值(字)的簡短數組

        數據塊是最大64 KB的數組。這些塊的結構和內容就是不同的SMB消息。

        具體結構

        SMB_Header結構的長度固定為32個字節。

         SMB_Header
           {
           UCHAR  Protocol[4];
           UCHAR  Command;
           SMB_ERROR Status;
           UCHAR  Flags;
           USHORT Flags2;
           USHORT PIDHigh;
           UCHAR  SecurityFeatures[8];
           USHORT Reserved;
           USHORT TID;
           USHORT PIDLow;
           USHORT UID;
           USHORT MID;
           }

        SMB 參數

        SMB最初被設計為遠程過程調用協議,參數定義為WordCount大小的Short數組。SMB_Parameters. Words結構的格式是為每個命令消息單獨定義的。

        參數塊的一般格式如下。

         SMB_Parameters
           {
           UCHAR  WordCount;
           USHORT Words[WordCount] (variable);
           }

        SMB 數據塊,數據塊的一般結構與參數塊的結構相似,除了緩沖區部分的長度以字節為單位。

         SMB_Data
           {
           USHORT ByteCount;
           UCHAR  Bytes[ByteCount] (variable);
           } 

        一個典型的結構如下

        抓包分析

        1. 協商

        首先由客戶端向服務端發送數據包,并且包含其支持的所有協議版本

        服務端接收請求之后,選擇客戶端所支持的最高版本,返回給客戶端

        1. 認證

        協議確定后, 開始進行認證,客戶端通過發送用戶名/密碼進行認證

        服務端返回數據包們進行應答是否連接成功

        1. 連接

          此命令用于建立到服務器共享的客戶端連接。共享由名稱標識,連接一旦建立,就由返回給客戶端的TID標識。

          發送一個Tree connect rerquest SMB數據報并列出它想訪問網絡資源的名稱

        回復包提供回復連接成功或者拒絕,并且列出的操作的權限

        之后就是文件的讀寫,具體可以去官網查詢具體功能命令,就不一一描述了

        最后就是斷開分享連接并終止會話,釋放資源和鎖

        調試使用

        調試環境

        調試環境

        Win7 32 SP1

        srv.sys 6.1.7601.17514

        srvnet 6.1.7601.17514

        工具

        Shadow Brokers工具包 (https://github.com/misterch0c/shadowbroker)

        python2.6 ( https://www.python.org/download/releases/2.6/ )

        pywin32  ( [https://sourceforge.net/projects/pywin32/files/pywin32/Build%20212/](https://sourceforge.net/projects/pywin32/files/pywin32/Build 212/) )

        調試分析

        我們運行工具包,利用WireShark抓包,我們可以看到

        首先會發送 NT_Trans命令,然后后續發送一系列的Trans2 Secondary數據包,這里涉及到一個消息類型轉化Bug

        通常

        命令后面必須SMB_COM_TRANSACTION_SECONDARY命令

        SMB_COM_TRANSACTION2命令必須是SMB_COM_TRANSACTION2_SECONDARY命令

        SMB_COM_NT_TRANS命令必須 跟隨SMB_COM_NT_TRANS_SECONDARY命令。

        但是如果第一個SMB消息要發送的事務數據還沒有完成,此時服務器并不做檢測,我們就 可以發送任何類型的消息(只要TID,UID,PID和MID匹配)來完成這個事務。

        由上基礎知識可知服務器使用最后一個SMBCOM * _ SECONDARY命令來確定事務類 型。因此,我們可以將任何事務類型轉換為SMB_COM_TRANSACTION或 SMB_COM_TRANSACTION2。

        我們查看以上的數據包發現確實具有相同的TID,UID,PID和MID,所以,我們斷定該過程就是利用了上邊的BUG。

        我們查看這兩個消息的結構

         SMB_COM_NT_TRANSACT對應結構體
         SMB_Parameters
           {
           UCHAR  WordCount;
           Words
             {
             UCHAR  MaxSetupCount;
             USHORT Reserved1;
             ULONG  TotalParameterCount; 
             ULONG  TotalDataCount;    //四個字節
             ULONG  MaxParameterCount;
             ULONG  MaxDataCount;
             ULONG  ParameterCount;
             ULONG  ParameterOffset;
             ULONG  DataCount;                 
             ULONG  DataOffset;
             UCHAR  SetupCount;
             USHORT Function;
             USHORT Setup[SetupCount];
             }
           }
         SMB_Data
           {
           USHORT ByteCount;
           Bytes
             {
             UCHAR  Pad1[];
             UCHAR  NT_Trans_Parameters[ParameterCount];
             UCHAR  Pad2[];
             UCHAR  NT_Trans_Data[DataCount];
             }
           }
        SMB_COM_TRANSACTION2_SECONDARY
            SMB_Parameters
           {
           UCHAR  WordCount;
           Words
             {
             USHORT TotalParameterCount;
             USHORT TotalDataCount;   //兩個字節
             USHORT ParameterCount; 
             USHORT ParameterOffset;
             USHORT ParameterDisplacement;
             USHORT DataCount;              
             USHORT DataOffset;
             USHORT DataDisplacement;
             USHORT FID;
             }
           }
         SMB_Data
           {
           USHORT ByteCount;
           Bytes
             {
             UCHAR Pad1[];
             UCHAR Trans2_Parameters[ParameterCount];
             UCHAR Pad2[];
             UCHAR Trans2_Data[DataCount];
             }
           }

        其中我們看到數據結構中的TotalDataCount一個是四個字節,一個是兩個字節,當TotalDataCount為103d0時,FEA_LIST的長度為0x10000,但是如果是正常情況,兩個字節是怎么也不會有0x10000大小的FEA_LIST。

        這就導致FEA_LIST的SizeOfListInBytes大小高位為1.并且之后沒有檢查和重新賦值。

        然后接下來因為第一個BUG引發的第二個BUG

        在傳輸過程中,FEA_LIST需要轉化為NT_FEA_LIST

        FEA_LIST結構體

         SMB_FEA
            {
            UCHAR      ExtendedAttributeFlag;
            UCHAR      AttributeNameLengthInBytes;
            USHORT     AttributeValueLengthInBytes;
            UCHAR      AttributeName[AttributeNameLengthInBytes + 1];
            UCHAR      AttributeValue[AttributeValueLengthInBytes];
            }
          SMB_FEA_LIST
            {
            ULONG SizeOfListInBytes;
            UCHAR FEAList[];
            }

        定位到函數SrvOs2FeaListSizeToNt

        我們看到這里在重新寫入FEA_LIST的SizeOfListInBytes值時,是將si寫入到[eax]中,如果eax地址處的值大于0XFFFF則會導致錯誤

        接下來我們按照我們的猜測,進行windbg調試

        下斷點到關鍵位置

        bp SrvOs2FeaListSizeToNt+0x60 ".printf \"Fea_List_Originsize=%p, Fea_List_si=%p\\n\",poi(eax),esi;g"
        bp srv!SrvOs2FeaListSizeToNt+0x63 ".printf \"Fea_List_Fix_Size=%p\\n\",poi(eax);g"
        bp SrvOs2FeaListToNt+0x15 ".printf \"Nt_Fea_list_size=%p\\n\",eax;g"

        我們可以看到由于originsize沒有清零,直接賦值fixsize,得到大小為0x0001ff5d,是遠遠大于NT_Fea_List_Size 0x00010fe8的。

        接著向下看,根據NT_Fea_List_Size 大小申請一塊大非分頁池空間,然后對FEA_LIST象NT_FEA_LIST的轉化,


        在轉化過程中存在memmove操作

        我們下斷點分別對申請的空間大小和轉化過程中的memmove進行下斷點查看

        bp SrvOs2FeaListToNt+38 ".printf \"pool=%p\\n\",eax;g"
        bp srv!SrvOs2FeaToNt+2e ".printf \"MOV1: dst: %p src: %p size: %p\\n\",ebx,eax,poi(esp+8);g;"
        bp srv!SrvOs2FeaToNt+4d ".printf \"MOV2: dst: %p src: %p size: %p\\n\",ebx,eax,poi(esp+8);g;"

        看到pool起始為0x85f43008,大小為0x00010fe8,范圍就是0x85f43008~0x85F53FF0

        以MOV1和MOV2一對為一次,我們可以看到前邊前605次都是0,在第606次開始大小為f383

        可以看到最后幾次拷貝已經是越界拷貝了,不過第一次MOV1的size大小為0,看第二次拷貝情況,發現此時0x85F53FF9此時已經超過0x85F53FF0

        如果想查看最后一次內存情況也可下斷點查看

        bp srv!SrvOs2FeaToNt+0x4d ".if(poi(esp+8) != a8){g} .else {}" 

        覆蓋前

        覆蓋后

        我們查看其流量進行分析

        算一下,0x3cc+0x805=0xBD1, 0xBD1/5=605次正好是前邊的復制次數

        之后存在數據的傳輸的SMB_FEA_LIST大小

        最后一次傳輸,也就是溢出的SMB_FEA_LIST傳輸

        知道了溢出點,如何利用?也就是我們必須控制溢出內存的地址,使其可控。

        我們查看其溢出點位置。

        依舊下斷點

        bp srv!SrvOs2FeaToNt+0x4d ".if(poi(esp+8) != a8){g} .else {}"

        利用!pool ebx查看池


        然后!pool ebx+7查看池

        可以看到在復制的時候是橫跨兩個池的,那么查看這兩個池所在的模塊,這里需要看一下pooltag

        為了看一下現在的內存情況,利用同樣的方法我們可以看一下前后其他內存塊,最后查看內存塊排列基本如下

        可以看到這兩個池分別在srv.sys和srvnet.sys中

        通過觀察內存結構及其特征,我們可以下斷點

        bp srvnet!SrvNetAllocatePoolWithTag+0x1b ".if @esi > 0x0000f000 {.printf \"srvnet!SrvNetAllocatePoolWithTag Allocation Address: %p; Size: %p;\\n\",eax,esi;g}.else{g;}"
        
        bp srv!SrvAllocateNonPagedPool+0xe3 ".if @esi > 0x0000f000 {.printf \"srv!SrvAllocateNonPagedPool Allocation Address %p Size: %p;\\n\",eax,esi;g}.else{g}"

        其中兩個申請srv池,可以看到申請的地址一致,并且第二個值就是溢出的池的地址,所以中間應該有釋放空間

        所以重新下斷點進行查看

        bp srvnet!SrvNetAllocatePoolWithTag+0x1b ".if @esi > 0xf000 {.printf \"srvnet!SrvNetAllocatePoolWithTag Allocation Address: %p; Size: %p;\\n\",eax,esi;g}.else{g;}"
        
        bp srv!SrvAllocateNonPagedPool+0xe3 ".if @esi > 0x0000f000 {.printf \"srv!SrvAllocateNonPagedPool Allocation Address %p Size: %p;\\n\",eax,esi;g}.else{g}"
        
        bp SrvFreeNonPagedPool+0x3 ".printf\"SrvFreeNonPagedPool free Nopage:%p\\n\",eax;g;"

        這樣就可以控制srvnet在srv池的后邊了

        在通過wireshark抓包分析

        首先是一系列的srvnet池申請,該池是通過TCP發送SMB消息進行傳輸的,具體的內容可以查看官方文檔

        https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-smb/f906c680-330c-43ae-9a71-f854e24aeee6


        那么接下來我們還需要存在申請一段內存,并且該內存之后需要進行釋放,我們主要看一下,在其中存在這樣的一段流量信息,這里是創建會話的過程,如果失敗,此時就會自動釋放相關資源,正好符合我們的預想。

        為了探究這個是如何申請非分頁的大池的,我們還是下斷點

        bp srv!SrvAllocateNonPagedPool+0xe3 ".if @esi > 0x0000f000 {.printf \"srv!SrvAllocateNonPagedPool Allocation Address %p Size: %p;\\n\",eax,esi;g}.else{g}"

        在srv申請空間的時候斷下,;厮

        發現過程主要在srv!BlockingSessionSetupAndX中

        該函數的主要流程如下

        并且我們查找SMB_COM_SESSION_SETUP_ANDX 請求,存在有兩種格式:

        LAN Manager 1.0

        SMB_Parameters
           {
           UCHAR  WordCount;   0XD
           Words
             {
             UCHAR  AndXCommand;
             UCHAR  AndXReserved;
             USHORT AndXOffset;
             USHORT MaxBufferSize;
             USHORT MaxMpxCount;
             USHORT VcNumber;
             ULONG  SessionKey;
             USHORT OEMPasswordLen;
             USHORT UnicodePasswordLen;
             ULONG  Reserved;
             ULONG  Capabilities;
             }
           }
         SMB_Data
           {
           USHORT ByteCount;  
           Bytes
             {
             UCHAR      OEMPassword[];
             UCHAR      UnicodePassword[];
             UCHAR      Pad[];
             SMB_STRING AccountName[];
             SMB_STRING PrimaryDomain[];
             SMB_STRING NativeOS[];
             SMB_STRING NativeLanMan[];
             }
           }

        NTLMv2

         SMB_Parameters
           {
           UCHAR  WordCount;    0XC
           Words
             {
             UCHAR  AndXCommand;
             UCHAR  AndXReserved;
             USHORT AndXOffset;
             USHORT MaxBufferSize;
             USHORT MaxMpxCount;
             USHORT VcNumber;
             ULONG  SessionKey;
             USHORT SecurityBlobLength;
             ULONG  Reserved;
             ULONG  Capabilities;
             }
           }
         SMB_Data
           {
           USHORT ByteCount;
           Bytes
             {
             UCHAR      SecurityBlob[SecurityBlobLength];
             SMB_STRING NativeOS[];
             SMB_STRING NativeLanMan[];
             }
           }

        通過構建數據包,即smb中的Flag不包含 FLAGS2_EXTENDED_SECURITY 標志,則會進入 GetNtSecurityParameters 流程中,此時的解析就會按照0xD進行解析,此時SMB_DATA大小不會再為0x16而是0x87f8


        還是進行調試進行說明

        bp BlockingSessionSetupAndX+62E

        經過錯誤的解析結構體,返回錯誤的空間。

        通過 add esi,esi 和 SrvAllocateNonPagedPool 獲取大非分頁池

        接下來就看如何去執行惡意代碼,這時候就需要看之前池越界內容了。

        另外我們可以看到在后邊流量數據,顯示就斷開連接了。

        所以我們猜測srvnet模塊的越界內存空間應該是在釋放前后執行的代碼,首先我們再看一下他覆蓋的空間內存,著重注意此值

        我們下斷點 SrvNetFreeBuffer,進行;厮,查找srvnet模塊中是否存在相關的執行鏈

        ba e1 SrvNetFreeBuffer "kb;g"

        之前想過幾種方法來確定代碼的之后的執行shellcode的方法

        1. 利用 ba r4 addr    因為在溢出中的值中之后肯定會被讀取,會斷下來
        2. 利用shellcode的代碼進行回溯
        3. 利用流程下API斷點,這個就需要比較熟悉代碼了,如知道斷開連接會調用那些函數,直接去相關模塊去查找
        4. 根據已知條件去合理的猜,如我上邊的方法
        5. 根據補丁去回溯,這個應該是比較常用的方法,但這里并不是補丁的地方,而是利用鏈中的一個地方。
        6. 網上參考,就像很多文章,也不去驗證,反正文章說偏移+1就+1,加2就加2,這對于需要快速分析的,也不失為一種方法,但是如果想調試一手的漏洞代碼,就不能只是抄網上的

        嘗試下斷點

        bp SrvNetIndicateData

        進行調試

        之后我們就可以進一步下更準確的斷點

        bp SrvNetIndicateData ".if(edi != 0xffdff020){g} .else {}" 

        當然可以回溯到更上層

        bp srvnet!SrvNetWskReceiveComplete+0x13 ".if(poi(esi+0x24) == 0xffdff020) {} .else {gc}"

        然后就可以找到執行shellcode代碼,即雙脈沖星后門

        其棧調用

        接下來再看一下shellcode是如何寫入的

        我們在上邊知道了shellcode,這段代碼是如何寫入的,就可以很輕松的回溯了。

        直接寫斷點

        ba w4 0xffdff194

        可以看一下棧環境極其值,這里是什么對象就不去細細探究了。

        最后的最后,說一下為什么覆蓋的值是ffdf0000,經過資料

        // addressed from 0xffdf0000 - 0xffdfffff are reserved for the system
        // begin_ntddk begin_ntosp
        #define KI_USER_SHARED_DATA         0xffdf0000
        #define SharedUserData  ((KUSER_SHARED_DATA * const) KI_USER_SHARED_DATA)

        這塊內存是系統預留的,里面保存了系統的一些信息,像時鐘,版本,配置之類。注意這個地址在win10下是不可以執行的。所以這個利用方法在win10下是不可用的。

        參考

        永恒之藍

        SMB協議

        SMB

        eternalblue-everything-know

        免費評分

        參與人數 49吾愛幣 +47 熱心值 +44 收起 理由
        terribleme + 1 用心討論,共獲提升!
        666789kk + 1 + 1 熱心回復!
        Peppermint + 1 謝謝@Thanks!
        sumuzhi + 1 + 1 謝謝@Thanks!
        乄落日乀 + 1 + 1 用心討論,共獲提升!
        幽夜寒香 + 1 + 1 用心討論,共獲提升!
        hostwj + 1 + 1 謝謝@Thanks!
        Edison_zhu + 1 + 1 看不懂看不懂
        天蝎浪花 + 1 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
        阿霖大寶貝 + 1 + 1 我很贊同!
        spctiger + 1 + 1 熱心回復!
        小宇同志 + 2 + 1 熱心回復!
        xiong_online + 1 + 1 用心討論,共獲提升!
        Issac=Li + 1 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
        5omggx + 1 + 1 用心討論,共獲提升!
        賢士的禮物 + 1 謝謝大佬
        woyucheng + 1 + 1 謝謝@Thanks!
        魅夜 + 1 + 1 熱心回復!
        維系小冉 + 1 用心討論,共獲提升!
        Niko.Zhao + 1 + 1 用心討論,共獲提升!
        躲在角落看繁華 + 1 用心討論,共獲提升!
        konglsh + 1 + 1 謝謝@Thanks!
        時光遺舊201211 + 1 + 1 膜拜大佬
        yjdh3344 + 1 謝謝@Thanks!
        卡拉肖克倩 + 1 + 1 膜拜大佬
        鯨落 + 1 + 1 歡迎分析討論交流,吾愛破解論壇有你更精彩!
        wbzb + 1 + 1 樓主牛人是也!
        _知魚之樂 + 1 + 1 我很贊同!
        lmxhn + 1 + 1 我看不懂,完全是來支持樓主的。
        x51zqq + 1 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
        Likey + 1 + 1 歡迎分析討論交流,吾愛破解論壇有你更精彩!
        寂兮廖兮 + 1 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
        hgfty1 + 1 + 1 謝謝@Thanks!
        陌上人 + 1 + 1 謝謝@Thanks!
        曾慶松 + 1 + 1 歡迎分析討論交流,吾愛破解論壇有你更精彩!
        deoplljj + 1 + 1 大佬大佬
        2370177068 + 1 + 1 大佬大佬,完全看不懂......
        侃遍天下無二人 + 1 所以說win10的安全性更高,是嗎
        莫失莫忘angle + 1 完全看不懂
        小龍飛 + 1 + 1 熱心回復!
        kk52140 + 1 + 1 歡迎分析討論交流,吾愛破解論壇有你更精彩!
        kerwincsc + 1 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
        三葉草的絕望 + 1 + 1 熱心回復!
        Pandolar + 1 用心討論,共獲提升!
        m-10306 + 1 + 1 很詳細呢 謝謝分享 用心討論,共獲提升!
        不想當咸魚 + 1 + 1 雖然看不懂,但字多就是nb
        Hacker_Xi + 1 + 1 用心討論,共獲提升!
        JuncoJet + 3 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
        kbit + 1 膜拜大神

        查看全部評分

        發帖前要善用論壇搜索功能,那里可能會有你要找的答案或者已經有人發布過相同內容了,請勿重復發帖。

        推薦
        JuncoJet 發表于 2020-6-9 11:30
        Assassin_ 發表于 2020-6-9 11:23
        那個系統預留如果不能確定,就不能確定下一步shellcode的穩定寫入和執行。感覺這個固定值的逆向(確定)確 ...

        從內核到用戶態利用這個內存空間確實不錯的方法,而且是全局的。
        0xf194這個偏移應該是空地址,所以隨便寫入。期待分析之后怎么被調用的。
        推薦
        JuncoJet 發表于 2020-6-9 11:18
        關于SharedUserData ,下面就當是擴展閱讀了(才不會說來蹭大神熱度的)

        深入游戲變速底層原理以及內核變速的實現
        http://www.13ee.cn/thread-951616-1-1.html
        (出處: 吾愛破解論壇)
        沙發
        yunkof 發表于 2020-6-9 11:14
        看了大神帖子就給了自己一巴掌,這特么都看不懂,還活著干嘛

        免費評分

        參與人數 1熱心值 +1 收起 理由
        hill_king + 1 麻煩多打你一巴掌,我也不會

        查看全部評分

        3#
        JuncoJet 發表于 2020-6-9 11:17
        又出現 SharedUserData  
        5#
        金不敗地 發表于 2020-6-9 11:21
        越看越懵,,太難了
        6#
        alittlebear 發表于 2020-6-9 11:22
        厲害,完全看不懂,肯定又是一個精華
        7#
         樓主| Assassin_ 發表于 2020-6-9 11:23 |樓主
        JuncoJet 發表于 2020-6-9 11:17
        又出現 SharedUserData

        那個系統預留如果不能確定,就不能確定下一步shellcode的穩定寫入和執行。感覺這個固定值的逆向(確定)確實是個坑。
        8#
         樓主| Assassin_ 發表于 2020-6-9 11:24 |樓主
        yunkof 發表于 2020-6-9 11:14
        看了大神帖子就給了自己一巴掌,這特么都看不懂,還活著干嘛

        一步一步來,可以的。
        9#
         樓主| Assassin_ 發表于 2020-6-9 11:27 |樓主
        JuncoJet 發表于 2020-6-9 11:18
        關于SharedUserData ,下面就當是擴展閱讀了(才不會說來蹭大神熱度的)

        深入游戲變速底層原理以及內核 ...

        拜讀過大佬的文章?梢缘。
        10#
        china-ray 發表于 2020-6-9 11:28
        看單個字認識,連起來就不行了。膜拜。。!
        您需要登錄后才可以回帖 登錄 | 注冊[Register]

        本版積分規則 警告:本版塊禁止灌水或回復與主題無關內容,違者重罰!

        快速回復 收藏帖子 返回列表 搜索

        RSS訂閱|小黑屋|聯系我們|吾愛破解 - LCG - LSG ( 京ICP備16042023號 | 京公網安備 11010502030087號 )

        GMT+8, 2020-6-28 21:02

        Powered by Discuz!

        Copyright © 2001-2020, Tencent Cloud.

        快速回復 返回頂部 返回列表
        快三开奖结果