UPX爲APK加殼中.init段相關問題[補充]

今天無心中登入了oschina(真的是無心),看到有小夥伴發評論給我提了一些問題.隨着對SO研究的深刻,我對文章中語焉不詳之處,進行一些補充.windows

  1. UPX可否用VisualStudio進行編譯?如何編譯? 看這裏:UPX-windows版本的編譯-待修正
  2. "INIT段"是什麼鬼? "INIT"段是ELF文件結構中:Dynamic表中的一個表項結構.它包含一個地址.該地址指向啓動代碼. 並不是真的段.也並不是必須是一個區段.這是一個誤解. 這個表項結構不是必需的.因此會在沒有"_init"函數聲明的狀況下,編譯器不會添加它. 隨意聲明一個便可.
void _init(){}
    ```
3. 那麼可否給不存在"INIT段"的SO文件添加這個東東?也就是UPX可否給沒有INIT函數的SO文件加殼?
仔細想一想並非非加"INIT函數"不可.其原理是在Dynamic表中增長了一條INIT表項.由於UPX只是簡單的查找Dynamic中是否存在INIT表項結構.若是找不到就會報錯,它本身不會主動去作添加操做.
咱們能夠對任意沒有INIT的SO進行添加INIT表項的簡單處理.可是須要注意的一點是:INIT的地址處理.由於據我試驗,UPX在執行完自身解密代碼後,會執行原INIT內的代碼.若是隨意給一個地址一定出錯.因此在沒有代碼的狀況下嘗試構造一個空函數是一個好主意.

固然你能夠有其它辦法可是比較複雜,好比修改UPX中load的代碼.使其忽略原init段.若是你完成了這個操做,請@我哦.


2016Year4月16日 13:01:06
相關文章
相關標籤/搜索