如何进行编译UPX
请参考http://www.cnblogs.com/oloroso/p/6377807.html
Android so加密遇到的问题,参考自http://www.th7.cn/Program/Android/201606/885235.shtml
1、40k以下so不能加壳
kiiim@ubuntu:~/src$ upx.out a.out
Ultimate Packer for eXecutables
Copyright (C) 1996 - 2011
UPX 3.08 Markus Oberhumer, Laszlo Molnar & John Reiser Dec 12th 2011
File sizeRatioFormatName
-------------------- ------ ----------- -----------
upx.out: a.out: NotCompressibleException
Packed 1 file: 0 ok, 1 error.
解决,添加下面代码
int const dummy_to_make_this_compressible[10000] = {1,2,3};
2、无INIT节区的so不能加壳
kiiim@ubuntu:~/src$ readelf -d a.out
Dynamic section at offset 0xe28 contains 24 entries:
Tag TypeName/Value
0x0000000000000001 (NEEDED)Shared library: [libc.so.6]
0x000000000000000c (INIT) 0x400460
0x000000000000000d (FINI) 0x400694
0x0000000000000019 (INIT_ARRAY)0x600e10kiiim@ubuntu:~/src$ upx_diy.out libcmxsecd.so
Ultimate Packer for eXecutables
Copyright (C) 1996 - 2016
UPX 1.02 Markus Oberhumer, Laszlo Molnar & John Reiser Mar 30th 2016
File sizeRatioFormatName
-------------------- ------ ----------- -----------
upx_diy.out: libcmxsecd.so: UnknownExecutableFormatException
Packed 0 files.
以上,没有(INIT)的so不能进行加壳,解决办法:
在native代码中声明_init()函数,用于在编译时生成_init段,例如:
C++:extern "C" {void _init(void){}}
注意:C和C++代码定义或声明的方式是有所区别的,在C++中必须使用extern “C”关键 字进行修饰,被extern "C"修饰的变量和函数是按照C语言方式编译和连接的
编译时在Android.mk添加编译选项,
LOCAL_CFLAGS += -Wl,-init=my_init
3.由于UPX无法对小于40kB 的so进行加壳,在native代码中定义全局变量用于增加生成的二进制的体积,例如:
C:int const dummy_to_make_this_compressible[100000] = {1,2,3};
C++:extern "C" int const dummy_to_make_this_compressible[100000] = {1,2,3};
注意:如果编译出来的库本身足够大,则此步骤可省略。
3、用于Android so加固?
经过UPX加壳后的so,通过IDA不能静态分析,有比较好的保护能力。但弱点也很明显,通过 upx -d参数就可以完美扒掉。
4、在native代码中使用宏定义混淆函数名,用于增加静态反汇编分析难度,例如:
#define startSimpleWifi sSW
#define sendData sD
……
除了通过编译源码,隐藏UPX版本、标志等信息外,还有另外的方法达成UPX防脱效果,项目保密咯;)
对于防止被直接./upx.out -d 直接脱壳,吾爱上有一篇可以进行参考http://www.52pojie.cn/thread-326995-1-1.html
关于想要修改upx源码的,可以参考下面的这篇文章。
https://my.oschina.net/ichunqiu/blog/844660
这个是我编译后的,如果你嫌编译比较麻烦,就我这个吧,3.9.3版本,Linux端 X86 64测了,可以用,其他指令集和操作系统没试。
http://pan.baidu.com/s/1hrTUJ8w