android开发apk捆绑,Android 下 APK 捆绑器的实现

Android 下 APK 捆绑器的实现

利用捆绑器向正常程序捆绑病毒、木马等恶意程序,以达到隐蔽安装、运行的目的,这

在 Windows 平台下是一种很常规的攻击手段。那么,在智能终端十分流行的今天,如何实

类似 Windows 下捆绑器的实现方案。

原理与基础

对任意的两个 APK 应用程序 A 和 B 进行捆绑,并且在手机上安装、运行捆绑生成的

APK 程序 C 后,仍然具备和 A 一样的运行效果,要实现这一目的,捆绑过程可以从两个思

路去实现。

1)对 Android 应用程序 A 进行反编译,通过修改反编译生成的 smali 代码,控制执行

流程,使其具备安装和执行应用程序 B 的功能,最后再打包生成捆绑后的应用 C。此方法

和早期的 Windows 环境下的 PE 病毒类似,插入额外的功能代码,修改入口点改变程序执行

流程,最后再回到原有流程执行 A 的功能。

2)考虑到 A、B 的任意性,以及生成程序 C 的稳定性,在这里重点介绍另外一种通过

宿主程序实现释放、安装、运行 A 和 B 的方法。其思路亦来自 Windows 下的捆绑器,即专

门写一个 host 程序作为宿主,其中应用程序 A、B 作为 host 的资源文件,运行 host 时可以

释放、安装和运行 A 和 B 的功能。此外,若考虑到安全性、免杀性,可对 A 和 B 进行加密、

编码。因此,根据方法2,可得出PC端和Android手机端的软件工作流程如图1和图2所示

QQ图片20140404150245.jpg (30.84 KB, 下载次数: 20)

2014-4-4 15:04 上传

功能实现

通过上面的介绍,可以知道总共需要实现两个程序,即作为宿主程序的 Android 应用

host.apk,以及作为捆绑器的 Windows 应用程序“捆绑器”,下面将详细介绍这两个程序内

部原理和实现方法。

1.宿主应用程序

1)工作流程

对于宿主程序 host.apk,要实现上文所定义的功能需求,则其内部的工作流程可设计如

成如图 3 所示的结构。在宿主程序初始化时,会调用MainActity 的 onCreate 函数。在 onCreate

函数中,通常用来初始化 MainActivity,但是考虑到最终呈现给用户的界面(即 Activity)

为 A 的界面,所以宿主程序的 onCreate 函数中无需处理自身界面,只需想办法启动 A 的

Activity 即可。

QQ图片20140404160507.jpg (219.29 KB, 下载次数: 15)

2014-4-4 16:07 上传

图 4 利用 apt 从 apk 中提取的原始信息

QQ图片20140404160866666666666666666.jpg (70.56 KB, 下载次数: 15)

2014-4-4 16:10 上传

图 6 info.txt 中的 label 和 icon 信息

②替换图标和标签信息

在获得 icon 路径和 label 之后,接下来需要替换 host.apk 中的这些信息。

首先需要对主程序 A.apk 进行解包,以获得图标文件。Apk 解包同样使用 apktool。直

接使用 apktool 解包的命令为“java –jar apktool.jar –d apkpathunpackeddir”,其中 apktool 支

持很多参数,实现其他功能,方便起见将其封装为 bat 文件 unpack_apk.bat,内容如下。

set PATH=%CD%;%PATH%;

java -jar “%~dp0apktool.jar” d %1 %2

该批处理的第一个参数为 apk 路径,第二个参数为解包后的目录路径。在捆绑器程序中,

可通过如下命令调用该批处理,实现相应的解包功能。

ShellExecute(NULL, TEXT(“open”), szBatfilePath,szParameters, NULL, SW_HIDE);

其中,szParameters 即为批处理文件对应的两个参数。

在成功解包之后,替换图标就很简单了,只需要用上述 icon 路径对应的文件替换宿主

程序 host.apk 中的“resdrawable-mdpiic_launcher.png”、 resdrawable-hdpiic_launcher.png”、

“resdrawable-ldpiic_launcher.png”和“resdrawable-xhdpiic_launcher.png”文件。

宿主程序的标签信息位于“resvaluesstrings.xml”中,具体如图 7 所示。

只需将其中的app_name 对应的值替换为前面获取到的 label 的值即可。

QQ图片2014040416131288888888888888.jpg (90.95 KB, 下载次数: 16)

2014-4-4 16:14 上传

其所需的唯一一个参数即为需要打包成 apk 的目录。类似的,程序中的调用方法依旧使

用“ShellExecute(NULL,TEXT(“open”), szPackBatfile, m_szFinalApkDir, m_pctApkToolDir,

SW_HIDE);”。

②签名

对 apk 的签名,可通过使用工具 autosign 实现。其调用方式为“java -jar signapk.jar

testkey.x509.pem testkey.pk8 unsigined.apk signed.apk”,需要的两个参数为签名的文件路径和

成功签名后的文件路径。将其写为 sign.bat,内容为:“java -jar signapk.jar testkey.x509.pem

testkey.pk8 %1 %2”。在捆绑器程序中相应的调用方式为“ShellExecute(NULL, TEXT(“open”),

szSignBatfile, szParameters, m_pctAutoSignDir, SW_HIDE);”,最终即可获得捆绑后的 apk 程

序。

总结

通过前面的步骤,最终生成了一套由“apktool”、“auto-sign”、“host.apk”和“捆绑器”

组成的 apk 捆绑器工具,如图 8 所示。

图 8 捆绑器工具组成(左)和捆绑器运行界面(右)

最终捆绑之后的 apk 应用程序具备和正常安装的 apk 一样的运行效果,但却能隐蔽的安

装所指定的任意 apk 文件,达到预期的目的和功能效果。

同时,在上述实现过程中仍存在一定的不足,如在安装捆绑之后的 apk 应用时,所显示

的权限和非正常安装的程序(主程序 A.apk)的权限不一致。一种更完美的方法则可以考虑

在修改 host.apk 文件时,同时将主程序 A.apk 的 manifest 中的权限也复制到 host.apk 的

manifest 中,有兴趣的读者可以自行尝试。

相关资源:TranslationLoaderBundle:具有数据库翻译加载的Symfony2捆绑软件

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年4月25日
下一篇 2021年4月25日

相关推荐