原創(chuàng):星綻紫輝 http://www.shnenglu.com/rawdata 2009-3-6
權作筆記。
如果要將某個dll注入PE文件(不需要裝載dll和運行PE),只需要拷貝原來的Import表,然后復制該表到文件對齊間隙區(qū),然后在后面寫入自定義的dll結構。一般新加的結構為0x14長,這個結構對應的值都是RVA,通過RVA計算出RAW,該RAW對應的便是dll名字,序數(shù),偏移地址等信息(可以先從dll的export表中讀取所以導出函數(shù)信息再寫入PE文件,export表的結構比Import表更簡單)。
通過RVA計算RAW,簡單計算方法:如果RVA被分成5塊,文件也肯定被分成5塊,只要保證塊塊之間一一對應,偏移相同就可以很容易在RVA和RAW之間相互轉換。
總結:
需要修改的地方:
1.Import表的表頭信息:位置,大小必須重新修訂
2.將新的Import表放入空白區(qū)(間隙處)
需要注意的地方:
△ 理論上任意跨區(qū)的空白區(qū)都可以,但是如果該區(qū)的屬性為只讀,且不為初始化數(shù)據(jù),就會執(zhí)行失敗。原因:PE加載后會自動修改該區(qū)的數(shù)據(jù)。比較好的做法是:不去尋找間隙,而是增加一個區(qū)段,然后設置該區(qū)段屬性為讀寫和初始化數(shù)據(jù),然后將新的Import表寫到該區(qū)。
△不需要修改IAT表
結果:dll在PE運行時自動加載。 (rawdata)