图共 7个 表共 5
    • 图  1  VMPP原理

      Figure 1. 

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

      Figure 2. 

    • 图  3  转化后的指令示例

      Figure 3. 

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

      Figure 4. 

    • 图  5  加固后的源文件示例

      Figure 5. 

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

      Figure 6. 

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

      Figure 7. 

    • 指令类型典型指令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

      表 1  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

      表 2  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

      表 3  VMPP防逆向效果实验

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

      表 4  VMPP兼容性测试

    • 序号APP包名加固前运行时间(ms)加固后运行时间(ms)加固前体积(kB)加固后体积(kB)
      VMPP几维加固VMPP几维加固
      用例Dcom.panxw.aes229420308583
      用例Ecom.ss.jni37423810237553

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