從附加資料Overlay說開去-記一次討論
阿新 • • 發佈:2019-01-11
今天和兩個小夥伴討論了幾個問題,我對問題的回答和討論作以記錄.方便後來者學習.
怎麼判斷一個程式是否有附加資料呢?
人物:
Kitty,柱子,琦哥
開始
柱子:怎麼判斷一個程式是否有附加資料呢Kitty?
Kitty:如你所知我們的exe程式在有很多個段,在執行後會被對映到記憶體中.最後一個段的結束處後面的資料不會被對映到記憶體中.這一部分叫附加資料-Overlay.
柱子:附加資料聽這名字似乎和附加段暫存器有關係嗎?我好像在DLL匯入的學習中見過有附加段.
Kitty:你是說DLL中的匯入表和匯出表嗎?這和附加資料無關.附加段暫存器是指ES-Extra Segment是一個暫存器,我們在串操作的時候用來儲存目的運算元地址.
琦哥:那這個附加資料有什麼用途嗎?
Kitty:嗯.它常被用來附加一些程式自己需要的資料.因為單檔案傳遞比較方便且更安全.就像人們在開啟一個免安裝程式的壓縮包的時候經常直接雙擊壓縮包的程式,這樣常常會因為該程式的其它輔助檔案沒有被壓縮到該程式的目錄下而報錯.解決方法之一便是將一些輔助檔案做成主程式的附加資料.有時候也被用於防破解程式驗證.有些程式也可能把音樂電影放在自己的身體裡,如果不使用附加資料,想想,10G的電影如果被對映進記憶體該多麼恐怖.
琦哥:一些螢幕錄影軟體也是這樣嗎?
Kitty:是的.
琦哥:可是它們通常很小.
Kitty:螢幕錄影軟體記錄的內容大約有兩種方法,第一種是差別記錄,就是隻記錄你滑鼠或者螢幕變化位置的資料,另一種方法是,隔行掃描,這種方法每次不對全螢幕的內容進行記錄,而是隔幾個畫素行進行記錄一次.這些技術常常被用於遠控(遠端控制軟體),這樣就不至於每次遠端控制都卡得要死.
`(∩_∩
2015年6月27日 22點.
新增附加資料的方法
- 正常思維:找到檔案的尾部.新增資料長度和資料本身。我們的程式如何找到資料的起始呢?
- 極客思維:在PE結構上找廢結構,來填充我們的內容。或者直接預留一個DWORD在程式Build的時候。如何定位這個DWORD?
- 逆向思維:既然從前往後讀遇到這麼多不定障礙,那麼從後往前讀。最後的位置放一個數據長度,倒數第二個位置放資料。(大部分Overlay都是這麼做的,汗)
星期五 14:12,2017年1月20日更新。
拓展知識
如果你想了解更多關於附加資料的知識可以看這裡:什麼是Overlay.