Android SO UPX壳问题小记
2024-08-26 16:32:49
网上有篇 Android SO(动态链接库)UPX加固指南,详细介绍了如何使用UPX给Android SO加壳,尝试做了一下结果ok,这里只记录遇到的几个小问题。
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 size Ratio Format Name
-------------------- ------ ----------- -----------
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 Type Name/Value
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
0x000000000000000c (INIT) 0x400460
0x000000000000000d (FINI) 0x400694
0x0000000000000019 (INIT_ARRAY) 0x600e10
kiiim@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 size Ratio Format Name
-------------------- ------ ----------- -----------
upx_diy.out: libcmxsecd.so: UnknownExecutableFormatException
Packed 0 files.
以上,没有(INIT)的so不能进行加壳,解决办法,通过编译选项加入:
首先定义一个函数,
void my_init(){}
编译时在Android.mk添加编译选项,
LOCAL_LDFLAGS += -Wl,-init=my_init
3、Android N版本更新
Android N-Preview 即 API24中,为了SO的完整性,加入了对ELF Section Header的校验,而UPX会抹去这块信息,导致SO在dlopen加载时失败
ChangeLog位置:http://android-developers.blogspot.hk/2016/06/android-changes-for-ndk-developers.html
想了两个办法,1.手工修复Section Header信息
http://bbs.pediy.com/showthread.php?t=192874
但一个必要条件,***直接移动到末尾读取到shstrtab section***无法满足。
2.查看Google的校验逻辑,针对性绕过;也完成不了,它的逻辑就是解析动态节区信息,与运行时的Segment做比对验证其完整性。而Dynamic节通过Section Header定位的,也就是Section Header信息必修复。
目前未解决此问题。
4、关注changelog
https://www.pysol.org:4443/hg/upx.hg/log
https://sourceforge.net/p/upx/bugs/
特别关注下这个讨论:https://sourceforge.net/p/upx/bugs/223/
最新文章
- 如何通过JQuery将DIV的滚动条滚动到指定的位置
- 【OpenCV】图像的遍历
- asynchronous vs non-blocking
- php的分页查询建立分页类
- C语言文件操作函数
- 基于VPN搭建混合云架构需要考虑的网络因素
- c++,模板函数的定义和使用【初探】
- Linux下给mysql创建用户分配权限
- CVE-2016-10190 FFmpeg Http协议 heap buffer overflow漏洞分析及利用
- django 静态css js文件配置
- android studio 添加get,set方法快捷方式
- Fedora 全局代理上网设置
- JS 对象(对象遍历,拷贝)
- list 转datatable
- Python模块调用方式详解
- eclipse 在Servers窗口创建一个Tomcat 6.0 Server失败
- 查找文本工具grep
- Ubuntu下载及安装
- Ubuntu下配置eclipse环境
- MooseFS及其高可用部署
热门文章
- 【转】jquery.validate.js表单验证
- 使用MongoDB数据库(1)(三十五)
- 把旧系统迁移到.Net Core 2.0 日记(9) -- T4 Template
- 把旧系统迁移到.Net Core 2.0 日记(7) Tag Helpers /ResponseCache
- 回声TCP服务器端/客户端
- 中国队再创佳绩,IOI2018喜获四金
- vue数据请求显示loading图
- el表达式原样输出,不被解析
- js 设置img标签的src资源无法找到的替代图片(通过img的属性设置)
- python笔记1-基础概念、python安装使用配置