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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

TLS回调函数(2)

發(fā)布時間:2025/3/21 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TLS回调函数(2) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

手動添加TLS回調(diào)函數(shù)

設(shè)計規(guī)劃

首先要確定IMAGE_TLS_DIRECTORY結(jié)構(gòu)體與TLS回調(diào)函數(shù)放到文件的哪個位置。向某個PE文件添加代碼或數(shù)據(jù)時,有如下3種方法查找合適位置:

  • 添加到節(jié)區(qū)末尾的空白區(qū)域
  • 添加到最后一個節(jié)區(qū)的大小
  • 在最后添加新節(jié)區(qū)
  • 這里呢,我們采用第二種方法,即增加最后一個節(jié)區(qū)(.rsrc)的節(jié)區(qū)頭。

    可以看到,最后一個節(jié)區(qū)(.rsrc)的Pointer to Raw Data=9200,Size of Raw Data=600。所以PE頭中定義的文件整體大小為9800。考慮到要添加的代碼與數(shù)據(jù)的大小,我們將最后一個節(jié)區(qū)的大小增加200(文件的大小增加到9A00)。使用HxD工具打開需要操作的程序,移動光標至最后位置,在菜單欄中選擇Edit-Insert bytes 菜單,打開插入字節(jié)對話框,然后向Bytecount中輸入200,單擊OK按鈕后,即從光標當前位置添加了200個字節(jié)(即512個字節(jié))
    另一種方法,直接復制最后很多的零字節(jié)內(nèi)存單元格,然后從文件尾部直接粘貼就行,多粘貼幾次,512字節(jié)就出來了

    注意:
    圖中virtual size為43C,PE裝載器會按照Section Alignment值對齊該值,即加載到內(nèi)存中的大小為1000(一定要理解好這個關(guān)系)。所以將節(jié)區(qū)的文件大小增加200后,實際virtual size 變?yōu)?3C,它比加載到內(nèi)存中尺寸1000要小,所以不需要再單獨增大virtual size 的值

    這里加的時候,如果改了之后沒法保存的話,記得用 管理員權(quán)限來打開編譯exe的程序(即打開visual stido),我就是這種情況。。。

    編輯PE文件頭

    .rsrc節(jié)區(qū)頭
    分別修改.rsrc節(jié)區(qū)頭中的Size of raw data與Characteristics的值,即size of Raw data =800,characteristics=E0000060,如下所示

    修改后:

    Characteristics=E0000060的含義如下所示:

    Characteristics屬性
    00000020IMAGE_SCN_CNT_DODE
    00000040IMAGE_SCN_CNT_INITIALIZED_DATA
    20000020IMAGE_SCN_MEM_EXECUTE
    40000020IMAGE_SCN_CNT_READ
    80000020IMAGE_SCN_CNT_WRITE

    即在原有屬性的基礎(chǔ)上增加了IMAGE_SCN_CNT_DODE | IMAGE_SCN_MEM_EXECUTE| IMAGE_SCN_CNT_WRITE屬性

    注意:
    由于要在擴展區(qū)域內(nèi)創(chuàng)建IMAGE_TLS_DIRECTORY結(jié)構(gòu)體與TLS回調(diào)函數(shù),所以需要向節(jié)區(qū)添加IMAGE_SCN_CNT_DODE | IMAGE_SCN_MEM_EXECUTE屬性,此外,還必須包括IMAGE_TLS_DIRECTORY 結(jié)構(gòu)體的節(jié)區(qū)添加 IMAGE_SCN_CNT_WRITE屬性,才能保證正常運行

    IMAGE_DATA_DIRECTORY[9]

    接下來要設(shè)置TLS表(IMAGE_NT_HEADERS-IMAGE_OPTIONAL_HEADER-IMAGE_DATA_DIRECTORY[9])。在PRVIEW中查看該地址為9800(RVA地址),我們將從改地址創(chuàng)建IMAGE_TLS_DIRECTORY結(jié)構(gòu)體。因此要修改PE文件投中的IMAGE_DATA_DIRECTORY[9],即(RVA=9800,Size=18)

    改完之后用PEview查看一下是否改好即可。

    設(shè)置IMAGE_TLS_DIRECTORY結(jié)構(gòu)體

    接下來設(shè)置 IMAGE_TLS_DIRECTORY 結(jié)構(gòu)體,只要把TLS回調(diào)函數(shù)注冊到其中即可,編輯設(shè)置IMAGE_TLS_DIRECTORY結(jié)構(gòu)體

    我們在文件偏移9800地址處創(chuàng)建了IMAGE_TLS_DIRECTORY結(jié)構(gòu)體。AddressOfCallbacks成員的值為 假設(shè)為0x40C224 ,它是array of TLS CallBack Function (TLS回調(diào)函數(shù)數(shù)組)的起始地址。只要把TLS回調(diào)函數(shù)的地址(40C230)放入該數(shù)組,即可成功注冊TLS回調(diào)函數(shù)

    TLS系列

    TLS回調(diào)函數(shù)(1)

    TLS回調(diào)函數(shù)(2)

    總結(jié)

    以上是生活随笔為你收集整理的TLS回调函数(2)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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