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