高级搜索

留言板

尊敬的读者、作者、审稿人, 关于本刊的投稿、审稿、编辑和出版的任何问题, 您可以本页添加留言。我们将尽快给您答复。谢谢您的支持!

姓名
邮箱
手机号码
标题
留言内容
验证码

基于指令虚拟化的安卓本地代码加固方法

张晓寒 张源 池信坚 杨珉

张晓寒, 张源, 池信坚, 杨珉. 基于指令虚拟化的安卓本地代码加固方法[J]. 电子与信息学报, 2020, 42(9): 2108-2116. doi: 10.11999/JEIT191036
引用本文: 张晓寒, 张源, 池信坚, 杨珉. 基于指令虚拟化的安卓本地代码加固方法[J]. 电子与信息学报, 2020, 42(9): 2108-2116. doi: 10.11999/JEIT191036
Xiaohan ZHANG, Yuan ZHANG, Xinjian CHI, Min YANG. Protecting Android Native Code Based on Instruction Virtualization[J]. Journal of Electronics & Information Technology, 2020, 42(9): 2108-2116. doi: 10.11999/JEIT191036
Citation: Xiaohan ZHANG, Yuan ZHANG, Xinjian CHI, Min YANG. Protecting Android Native Code Based on Instruction Virtualization[J]. Journal of Electronics & Information Technology, 2020, 42(9): 2108-2116. doi: 10.11999/JEIT191036

基于指令虚拟化的安卓本地代码加固方法

doi: 10.11999/JEIT191036
基金项目: 国家自然科学基金(U1636204, U1836210, U1836213, U1736208, 61972099, 61602123, 61602121),上海市自然科学基金(19ZR1404800),国家“九七三”重点基础研究发展计划(2015CB358800)
详细信息
    作者简介:

    张晓寒:男,1991年生,博士生,研究方向为系统与软件安全

    张源:男,1987年生,副教授,研究方向为系统与软件安全

    池信坚:男,1994年生,硕士生,研究方向为系统与软件安全

    杨珉:男,1979年生,教授,研究方向为系统与软件安全

    通讯作者:

    杨珉 m_yang@fudan.edu.cn

  • 1)受该加固系统商用收费限制,本文只能在少量应用上进行测试
  • 中图分类号: TN915.08; TP309.2

Protecting Android Native Code Based on Instruction Virtualization

Funds: The National Natural Science Foundation of China (U1636204, U1836210, U1836213, U1736208, 61972099, 61602123, 61602121), The Natural Science Foundation of Shanghai (19ZR1404800), The National Basic Research Program of China (973 Program) (2015CB358800)
  • 摘要: 安卓系统越来越广泛地被应用于各种类型的智能设备,比如智能手机、智能手表、智能电视、智能汽车。与此同时,针对这些平台应用软件的逆向攻击也日益增多,这不仅极大地侵犯了软件开发者的合法权益,也给终端用户带来了潜在的安全风险。如何保护运行在各种类型设备上的安卓应用软件不被逆向攻击成为一个重要的研究问题。然而,现有的安卓软件保护方法比如命名混淆、动态加载、代码隐藏等虽然可在一定程度上增加安卓软件的逆向难度,但是原理相对简单容易被绕过。一种更为有效的方法是基于指令虚拟化的加固方法,但已有的指令虚拟化方法只针对特定架构(x86架构),无法兼容运行于多种架构的安卓设备。该文针对安卓应用软件中的本地代码提出了一种架构无关的指令虚拟化技术,设计并实现了基于虚拟机打包保护(VMPP)的加固系统。该系统包含一套基于寄存器架构的定长虚拟指令集、支持该虚拟指令集的解释器以及可以与现有开发环境集成的工具链。在大量C/C++代码以及真实安卓软件上的测试表明,VMPP在引入较低的运行时开销下,能够显著提升安卓本地代码的防逆向能力,并且可被用于保护不同架构上的安卓本地代码。
  • 图  1  VMPP原理

    图  2  示例源代码及其生成的LLVM IR文件

    图  3  转化后的指令示例

    图  4  外部函数调用表(上)与解释器的外部函数调用代码(下)

    图  5  加固后的源文件示例

    图  6  加固之前源代码生成的可执行文件反汇编结果

    图  7  加固之后源代码生成的可执行文件反汇编结果

    表  1  VMPP虚拟指令格式

    指令类型典型指令1*2345678指令示例示例含义
    Radd0x51DstSizeSrc1Src251 01 04 0000 00 02 03r1=r2+r3
    Iaddi0x30DstSrcSizeImmediate30 01 02 0400 00 00 01r1 = r2+1
    Bjmp0x22FlagPC22 00 00 0000 00 00 04jmp 4
    CMPcmp0xc0DstModeSrc1Src2c0 01 00 0203 00 00 00r1=r2>r3
    Wload0xe4DstSizeSrce4 01 04 0200 00 00 00r1=[r2]
    Ccall0x90Num90 01 00 0000 00 00 00call 01
    Mmalloc0xa0DstImmediatea0 01 00 0000 00 00 08r1=malloc(8)
    Ethrow0x11TypeExceptionPC11 01 00 0000 00 00 06throw 01
    下载: 导出CSV

    表  2  VMPP有效性测试结果

    序号APP包名本地代码主要功能代码行数运行时间(ms)二进制体积(kB)
    加固前加固后加固前加固后
    用例Acom.zizuzi.verificationdemo通过设备ID等生成加密密钥1236710285
    用例Bcom.masonliu.testndk计算SHA1值验证签名2305618297
    用例Ccom.chenneyu.security反射获取APP签名并校验2213411241
    用例Dcom.panxw.aes实现AES算法加密字符串230122920308
    用例Ecom.ss.jni反射Java函数修改界面UI174374210237
    用例Fcom.dean.vmp01字符串运算操作57<1<16103
    用例Gcom.dean.vmp02多维数组的运算96<1<1692
    下载: 导出CSV

    表  3  VMPP防逆向效果实验

    分析人员逆向所需时间(min):加固前 / 加固后加固后、加固前逆向时间比值
    用例A用例B用例C用例E用例F用例G合计
    A3 / 356 / 658 / 719 / 927 / 787 / 8240 / 42310.6
    B5 / 409 / 597 / 8010 / 1128 / 759 / 9648 / 4629.6
    C5 / 587 / 827 / 1348 / 1657 / 1179 / 12243 / 67815.8
    下载: 导出CSV

    表  4  VMPP兼容性测试

    序号设备名称系统版本手机架构是否兼容
    1Nexus 5Android 5.0arm32
    2Samsung S7Android 6.0arm64
    3Pixel 2XLAndroid 8.1arm64
    4Samsung S9+Android 9.0arm64
    5Genymotion EmulatorAndroid 8.0x86
    下载: 导出CSV

    表  5  VMPP加固和几维加固运行时开销对比

    序号APP包名加固前运行时间(ms)加固后运行时间(ms)加固前体积(kB)加固后体积(kB)
    VMPP几维加固VMPP几维加固
    用例Dcom.panxw.aes229420308583
    用例Ecom.ss.jni37423810237553
    下载: 导出CSV
  • 360安全互联网中心. 2015年Android手机应用盗版情况调研报告[EB/OL]. http://zt.360.cn/1101061855.php?dtid=1101061451&did=1101657409, 2019.

    360 Security Internet Center. Investigation report on piracy of Android mobile applications[EB/OL]. http://zt.360.cn/1101061855.php?dtid=1101061451&did=1101657409, 2019.
    HUO Meimei, WU Jianzhong, CAI Jianping, et al. An Anti-piracy method based on encryption and dynamic loading for android applications[J]. Applied Mechanics and Materials, 2014, 644/650: 2740–2743. doi: 10.4028/www.scientific.net/AMM.644-650.2740
    KIM N Y, SHIM J, CHO S J, et al. Android application protection against static reverse engineering based on multidexing[J]. Journal of Internet Services and Information Security, 2016, 6(4): 54–64.
    FALSINAT L, FRATANTONIO Y, ZANERO S, et al. Grab’n run: Secure and practical dynamic code loading for android applications[C]. The 31st Annual Computer Security Applications Conference, Los Angeles, USA, 2015: 201–210. doi: 10.1145/2818000.2818042.
    张震, 张龙. Android平台的Native层加固技术研究与实现[J]. 计算机与现代化, 2016(10): 88–91. doi: 10.3969/j.issn.1006-2475.2016.10.018

    ZHANG Zhen and ZHANG Long. Research and implementation of native layer reinnforcement technology based on android platform[J]. Computer and Modernization, 2016(10): 88–91. doi: 10.3969/j.issn.1006-2475.2016.10.018
    赵奇. 基于LLVM的Android应用代码保护技术研究与实现[D]. [硕士论文], 北京邮电大学, 2018.

    ZHAO Qi. Research and implementation of android application code protection based on LLVM[D]. [Master dissertation], Beijing University of Posts and Telecommunications, 2018.
    张一峰, 方勇. 基于LLVM的Android Native文件保护方法[J]. 通信技术, 2017, 50(3): 533–538. doi: 10.3969/j.issn.1002-0802.2017.03.026

    ZHANG Yifeng and FANG Yong. Android native file protection based on LLVM[J]. Communications Technology, 2017, 50(3): 533–538. doi: 10.3969/j.issn.1002-0802.2017.03.026
    胡恒伟. 基于动态虚拟指令集的Android应用保护技术研究[D]. [硕士论文], 南京理工大学, 2018.

    HU Hengwei. Research on android application protection technology based on dynamic virtual instruction set[D]. [Master dissertation], Nanjing University of Science and Technology, 2018.
    李振. 基于LLVM的Android应用程序编译时虚拟化保护研究[D]. [硕士论文], 西北大学, 2019.

    LI Zhen. LLVM-based android application compiletime virtualization protection method research[D]. [Master dissertation], Northwest University, 2019.
    YANG Wenbo, ZHANG Yuanyuan, LI Juanru, et al. AppSpear: Bytecode decrypting and DEX reassembling for packed android malware[C]. The 18th International Symposium on Recent Advances in Intrusion Detection, Kyoto, Japan, 2015: 359–381. doi: 10.1007/978-3-319-26362-5_17.
    KIM D, KWAK J, and RYOU J. Dwroiddump: Executable code extraction from android applications for malware analysis[J]. International Journal of Distributed Sensor Networks, 2015, 11(9): 379682. doi: 10.1155/2015/379682
    张汉宁. 基于精简指令集的软件保护虚拟机技术研究[D]. [硕士论文], 西北大学, 2010.

    ZHANG Hanning. Research on software protection virtual machine technology based on reduced instruction set[D]. [Master dissertation], Northwest University, 2010.
    汤战勇, 李光辉, 房鼎益, 等. 一种具有指令集随机化的代码虚拟化保护系统[J]. 华中科技大学学报: 自然科学版, 2016, 44(3): 28–33. doi: 10.13245/j.hust.160306

    TANG Zhanyong, LI Guanghui, FANG Dingyi, et al. A code virtualization protection system with instruction set randomization[J]. Journal of Huazhong University of Science and Technology:Natural Science Edition, 2016, 44(3): 28–33. doi: 10.13245/j.hust.160306
    杜春来, 孔丹丹, 王景中, 等. 一种基于指令虚拟化的代码保护模型[J]. 信息网络安全, 2017(2): 22–28. doi: 10.3969/j.issn.1671-1122.2017.02.004

    DU Chunlai, KONG Dandan, WANG Jingzhong, et al. A code protection model based on instruction virtualization[J]. Netinfo Security, 2017(2): 22–28. doi: 10.3969/j.issn.1671-1122.2017.02.004
    C-testsuite[EB/OL]. https://github.com/c-testsuite/c-testsuite, 2019.
    几维安全. 移动应用加固系统[EB/OL]. https://www.kiwisec.com/product/app-encrypt.html, 2019.
    SALWAN J, BARDIN S, and POTET M L. Symbolic deobfuscation: From virtualized code back to the original[C]. The 15th International Conference on Detection of Intrusions and Malware, and Vulnerability Assessment, Saclay, France, 2018: 372–392. doi: 10.1007/978-3-319-93411-2_17.
    梁光辉, 庞建民, 单征. 基于代码进化的恶意代码沙箱规避检测技术研究[J]. 电子与信息学报, 2019, 41(2): 341–347. doi: 10.11999/JEIT180257

    LIANG Guanghui, PANG Jianmin, and SHAN Zheng. Malware sandbox evasion detection based on code evolution[J]. Journal of Electronics &Information Technology, 2019, 41(2): 341–347. doi: 10.11999/JEIT180257
  • 加载中
图(7) / 表(5)
计量
  • 文章访问数:  2147
  • HTML全文浏览量:  987
  • PDF下载量:  123
  • 被引次数: 0
出版历程
  • 收稿日期:  2019-12-24
  • 修回日期:  2020-06-29
  • 网络出版日期:  2020-07-17
  • 刊出日期:  2020-09-27

目录

    /

    返回文章
    返回