日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

005 NsPack 1.4 之附加数据初探

發(fā)布時間:2025/3/21 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 005 NsPack 1.4 之附加数据初探 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

      • 查殼
      • OD脫殼
      • 修復導入表
      • 處理附加數(shù)據(jù)
      • 關于附加數(shù)據(jù)
        • NO.1
        • NO.2
        • NO.3

查殼

拿到樣本之后先查殼 發(fā)現(xiàn)是NsPack 后面還有個Overlay 看到這個就要警惕了 說明PE程序尾部有附加數(shù)據(jù)

OD脫殼


載入OD之后在入口點發(fā)現(xiàn)了pushfd和pushad 于是采用最快的脫殼方法
使用Ctrl+S鍵 查找所有命令

查找對應的兩條命令

在jmp的地方下斷點 F7就能到達OEP 之后dump文件

修復導入表

這一次我們使用LoadPE脫殼 選中目標進程 依次執(zhí)行下面兩個步驟

  • 修正鏡像大小
  • 完整轉(zhuǎn)存

  • 接著使用ImportREC修復導入表

    查找到的IAT只有兩條 明顯有問題 直接dump文件


    運行之后 顯示文件中的數(shù)據(jù)無效 應該是剛剛的附加數(shù)據(jù)的問題

    處理附加數(shù)據(jù)


    將原程序用LoadPE查看 計算出PE文件的結(jié)束位置 即ROffset+RSize=0xCA00
    將目標程序拖進010Edit 找到0xCA00的位置 右鍵選擇 標記選擇開始


    然后拖到最下面 右鍵選擇 標記選擇結(jié)束 復制數(shù)據(jù)


    接著打開已經(jīng)脫殼修復好的文件 拖到文件末尾 粘貼數(shù)據(jù) 保存

    程序正常運行 脫殼完成

    關于附加數(shù)據(jù)

    關于附加數(shù)據(jù) 不同的殼情況也不一樣 總的來說 會有三種情況

    NO.1

    有些殼雖然有overlay但是卻不用特別處理 因為他根本就沒有用到過這些數(shù)據(jù)

    NO.2

    為什么有些殼要定位指針? 所謂的dump就是把內(nèi)存中的數(shù)據(jù)轉(zhuǎn)儲到磁盤 dump下來之后 文件對齊和內(nèi)存對齊粒度不一樣 overlay數(shù)據(jù)的起始地址就相應的發(fā)生了改變 所以在這個時候直接粘貼附加數(shù)據(jù)是行不通的 當需要重設指針的時候需要在脫殼后的程序的SetFilePointer下斷點 然后對原先的文件指針進行棧回溯跟蹤 一直往上找到賦值的位置 然后修改會正確的指針 就可以了

    NO.3

    但是為什么有些殼可以直接粘貼overlay數(shù)據(jù)呢 這是因為目標程序在使用附加數(shù)據(jù)的時候需要用到兩個函數(shù) 一個是CreateFile SetFilePointer 一個用于打開文件 一個用于設置文件指針

    DWORD SetFilePointer(HANDLE hFile, //在用CreateFileA打開后得到的文件句柄LONG lDistanceToMove, //要移動的距離,這個是低32位PLONG lpDistanceToMoveHigh, //要移動的距離,這是高32位,要注意這是一個指向數(shù)據(jù)的指針DWORD dwMoveMethod //表示指針開始的位置);

    使用這個函數(shù)的時候會出現(xiàn)一種情況 就是講第四個參數(shù)直接設置為FILE_END 然后將第二個參數(shù)設置為一個負值 負數(shù)表示向前移動 FILE_END表示設置到文件末尾 而附加數(shù)據(jù)無論在原來未脫殼的文件中和還是在脫殼的文件中,因為我們復制的是整個overlay區(qū)域,他的overlay部分的數(shù)據(jù)對于最后的一個字節(jié)的距離是不變的。他每次都用FILE_END當然我們這樣復制就不需要重定位指針了,也就是說即使我們把原來的文件(從0地址開始)全部復制到脫殼后的文件中也是能夠運行的,因為他是靠與最后的地址的距離來定位讀取數(shù)據(jù)。換個說法,如果這個時候你把最后一個數(shù)據(jù)刪掉,或者少復制哪怕是一個字節(jié),就不能運行了。這也是我們?yōu)槭裁匆刃迯蛯氡淼脑?br /> 總結(jié):也就是說如果你把附加數(shù)據(jù)復制到脫殼后的程序發(fā)現(xiàn)能夠運行,呵呵~恭喜你,你碰巧遇到用FILE_END為指針的程序。
    關于附加數(shù)據(jù)可以去看Lenux大神的淺談脫殼中的附加數(shù)據(jù)問題(overlay) 附上看雪鏈接 以上三個問題也是我從這篇文章中得到答案的
    https://bbs.pediy.com/thread-9182.htm

    需要相關文件可以到我的Github下載:https://github.com/TonyChen56/Unpack-Practice

    總結(jié)

    以上是生活随笔為你收集整理的005 NsPack 1.4 之附加数据初探的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。