文档章节

UPX为APK加壳中.init段相关问题

RenKaidi
 RenKaidi
发布于 2016/02/04 23:44
字数 856
阅读 573
收藏 1
点赞 1
评论 4

感谢UPX的维护者们.最近在读UPX源码,目的是为.so文件加壳玩.
在此之前阅读了大部分我能搜到的中文相关内容.很多语焉不详,所以综合了一下,编译出了Linux下的版本.
本文简单说明了以下内容:

  • 为什么一些.so在新版编译的UPX中压缩无法通过.
  • .init段的一些简单探索

编译UPX

你可以参考这里,step by step.Android NDK UPX加固作者:fallrain

无法编译的一点情况

UPX最新版d9e7cb4b5485用VS编译会报错-无法识别的导出符号.另外还有一些问题,动态结构体数组不能直接声明.需要动态申请.这都是小问题,根据报错信息很容易解决.真正的关键在于对于加壳.so动态链接库会提示无法识别的文件格式.当前我还没有在windows平台编译成功最新版.

编译的小科普

源代码如果跨平台,通过不同的编译选项可以编译成不同平台的程序.
功能不变.

无法加壳

我编译成功UPX的Linux版后,发现加壳Android上的.so动态链接库文件会报“未知文件格式”.在使用一定数量的不同类型.so后.认为要么UPX压缩.so的传言为虚,要么我们的.so文件统统有问题..init多篇网文反复提到UPX只能压缩具有该”区段”的内容.

UPX区分格式的方法

压缩可执行程序肯定不能像压缩软件那样直接一套通用算法就能搞定,得针对不同格式做出相应安排,UPX是如何区分文件格式的呢?
它是确定大致可执行文件类型,然后挨个格式试验canPack,一旦发现格式不对,不符合此种格式的标准就抛异常.
最后一个canPack也不符合就告诉大家这个文件”未知文件格式”.

听说必须要有.init段才能运行时解压缩,手头的.so文件都没有.init段.那是不是随便找个段添加进去就可以了呢?还是找个段改个名字?我们调试一下,它是在什么时候pass我们的.

问题锁定

UPX支持的格式果然很多,然后各种不好找.最终找到.so文件判断过程的过程在p_lx_elf.cpp

if (/*jni_onload_sym ||*/ elf_find_dynamic(Elf32_Dyn::DT_INIT)) {
......

DT_INIT不存在就会跳过.DT_INIT是什么东东?查看ELF格式的解析,好像是北大软件学院做的.里面有一句说:dynamic区段中标志为0xC的内容为init,即后面的值指向初始化地址.

经过验证:如果你的.so文件有_init段,区段dynamic中就会有一个标志等于0xC,其地址指向初始化区段文件偏移地址.
另外_init并非区段,只是一个导出函数.NDK会生成对应的区段并融合在某个大区段中,所以你从区段表看不到它.至于它的作用如何网文介绍很多,不再赘述.

结语

最终我完成了它的Linux版编译和.so加壳.

书写2016年1月28日 21:59:07
修订2016年2月4日 23:39:40

© 著作权归作者所有

共有 人打赏支持
RenKaidi
粉丝 5
博文 9
码字总数 5103
作品 0
其他
程序员
加载中

评论(4)

RenKaidi
RenKaidi

引用来自“hsxf”的评论

你好,那你最终是在so上加.init段?还是做了什么修改?假设你有一个.so文件但是没有这个文件的源码,你怎么给这个.so加init段?

不好意思,最近几个月没上oschina@hsxf 仔细想想并不是非加不可.因为加上的目的也只是在Dynamic表中增加了一个地址罢了.关键是UPX只是简单的查找Dynamic中是否存在指向init的结构.如果找不到就会报错.我们可以对任意没有INIT的SO进行添加INIT的简单处理.但是需要注意的一点是:INIT的地址处理.因为据我试验,UPX在执行完自身解密代码后,会执行原INIT内的代码...
hsxf
hsxf
你好可以加你QQ么
hsxf
hsxf
你好,那你最终是在so上加.init段?还是做了什么修改?假设你有一个.so文件但是没有这个文件的源码,你怎么给这个.so加init段?
fallrain
fallrain
写的很好,学习了79
UPX为APK加壳中.init段相关问题[补充]

今天无意中登入了oschina(真的是无意),看到有小伙伴发评论给我提了一些问题.随着对SO研究的深入,我对文章中语焉不详之处,进行一些补充. UPX能否用VisualStudio进行编译?如何编译? 看这里:UP...

RenKaidi ⋅ 2016/04/16 ⋅ 0

纯干货:Android APP 防破解进化史

Android平台以其免费和开源的特性使其占据了移动领域大半壁江山,越来越的人投身到移动应用开发中,但本文恐怕要先给Android应用开发者泼盆冷水,据360发布的《2014年中国手机安全状况报告》...

开源小猫 ⋅ 2015/04/29 ⋅ 0

Android应用安全隐患现状,资源文件加密/安全防护进化史

前言 有安全数据显示,2014全年,Android用户感染恶意程序3.19亿人次,平均每天恶意程序感染量达到了87.5万人次。同时,Android应用被破解和盗版等事件也层出不穷。很明显,Android平台已经成...

a125138 ⋅ 2015/06/04 ⋅ 0

介绍下加壳、脱壳以及如何病毒免杀技术与原理

介绍下加壳、脱壳以及如何病毒免杀技术与原理在自然界中,我想大家对壳这东西应该都不会陌生了,由上述故事,我们也可见一斑。自然界中植物用它来保护种子,动物用它来保护身体等等。同样,在...

东风125 ⋅ 2015/11/17 ⋅ 0

UPX源代码中那些模块负责ARM SO的压缩?

@fallrain 您好,想跟您请教个问题: 我在学习UPX的源代码,按照您的博文编译了最新的UPX项目。但是我所找到和编译的ARM SO文件一直被提醒“未知文件格式”。我怀疑我的.so文件的头部字段存在...

RenKaidi ⋅ 2016/01/22 ⋅ 1

android apk 防止反编译技术第一篇-加壳技术

做android framework方面的工作将近三年的时间了,现在公司让做一下android apk安全方面的研究,于是最近就在网上找大量的资料来学习。现在将最近学习成果做一下整理总结。学习的这些成果我会...

lonely1986 ⋅ 2015/03/29 ⋅ 40

App安全性保障方案

App安全性保障方案 之前晋级考核的时候认识到自己在app安全领域存在薄弱环节,所以这段时间研究了Android应用的安全防护,结合公司的项目特点做出记录和总结;主要包扩两个方面:http接口安全和A...

uncochen ⋅ 01/03 ⋅ 0

golang 编译后文件过大问题处理

go1.9.2出来了,有一个用golang写的工具要编译,正好也测试一下。我是在windows10 64位下测的。编译和执行文件效率都差不多。但是1.9.2编译出来的文件6M。 个人觉得这个有点大了,关键是功能...

mickelfeng ⋅ 04/25 ⋅ 0

逆向Android软件的步骤

逆向Android软件的步骤: 首先使用反编译的工具对反编译,然后阅读反汇编代码,如果有必要还会对其进行动态调试,找到突破口后注入或直接修改反汇编代码,最后重新编译软件进行测试。整个过程...

henry-zhang ⋅ 2015/07/23 ⋅ 0

Android NDK UPX加固

准备编译环境: 1、zlib-1.2.8.tar.gz2、ucl-1.03.tar.gz3、lzma443.tar.bz24、upx-hg-d9e7cb4b5485.tar.gz https://www.pysol.org:4443/hg/upx.hg 编译UPX设置环境变量: export UPX_UCLDI......

fallrain ⋅ 2015/09/22 ⋅ 11

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Springboot2 之 Spring Data Redis 实现消息队列——发布/订阅模式

一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式,这里利用redis消息“发布/订阅”来简单实现订阅者模式。 实现之前先过过 redis 发布订阅的一些基础概念和操...

Simonton ⋅ 27分钟前 ⋅ 0

error:Could not find gradle

一.更新Android Studio后打开Project,报如下错误: Error: Could not find com.android.tools.build:gradle:2.2.1. Searched in the following locations: file:/D:/software/android/andro......

Yao--靠自己 ⋅ 昨天 ⋅ 0

Spring boot 项目打包及引入本地jar包

Spring Boot 项目打包以及引入本地Jar包 [TOC] 上篇文章提到 Maven 项目添加本地jar包的三种方式 ,本篇文章记录下在实际项目中的应用。 spring boot 打包方式 我们知道,传统应用可以将程序...

Os_yxguang ⋅ 昨天 ⋅ 0

常见数据结构(二)-树(二叉树,红黑树,B树)

本文介绍数据结构中几种常见的树:二分查找树,2-3树,红黑树,B树 写在前面 本文所有图片均截图自coursera上普林斯顿的课程《Algorithms, Part I》中的Slides 相关命题的证明可参考《算法(第...

浮躁的码农 ⋅ 昨天 ⋅ 0

android -------- 混淆打包报错 (warning - InnerClass ...)

最近做Android混淆打包遇到一些问题,Android Sdutio 3.1 版本打包的 错误如下: Android studio warning - InnerClass annotations are missing corresponding EnclosingMember annotation......

切切歆语 ⋅ 昨天 ⋅ 0

eclipse酷炫大法之设置主题、皮肤

eclipse酷炫大法 目前两款不错的eclipse 1.系统设置 Window->Preferences->General->Appearance 2.Eclipse Marketplace下载【推荐】 Help->Eclipse Marketplace->搜索‘theme’进行安装 比如......

anlve ⋅ 昨天 ⋅ 0

vim编辑模式、vim命令模式、vim实践

vim编辑模式 编辑模式用来输入或修改文本内容,编辑模式除了Esc外其他键几乎都是输入 如何进入编辑模式 一般模式输入以下按键,均可进入编辑模式,左下角提示 insert(中文为插入) 字样 i ...

蛋黄Yolks ⋅ 昨天 ⋅ 0

大数据入门基础:SSH介绍

什么是ssh 简单说,SSH是一种网络协议,用于计算机之间的加密登录。 如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码...

董黎明 ⋅ 昨天 ⋅ 0

web3j教程

web3j是一个轻量级、高度模块化、响应式、类型安全的Java和Android类库提供丰富API,用于处理以太坊智能合约及与以太坊网络上的客户端(节点)进行集成。 汇智网最新发布的web3j教程,详细讲解...

汇智网教程 ⋅ 昨天 ⋅ 0

谷歌:安全问题机制并不如你想象中安全

腾讯科技讯 5月25日,如今的你或许已经对许多网站所使用的“安全问题机制”习以为常了,但你真的认为包括“你第一个宠物的名字是什么?”这些问题能够保障你的帐户安全吗? 根据谷歌(微博)安...

问题终结者 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部