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
相关文章
相关标签/搜索