SO代码虚拟化

本文档主要介绍图形界面的虚拟化工具,如需命令行工具请联系客服
支持在Windows和Mac电脑上使用

概述

SO代码虚拟化工具[KiwiVM]支持对C、C++代码进行虚拟化保护,凭借自定义CPU指令的特性,代码一旦加密,永不解密,攻击者无法还原代码,分析核心业务逻。

使用说明

  1. 购买KiwiVM虚拟机之后,使用几维安全提供的机器码生成工具提取待绑定电脑的Key,几维安全将根据Key、授权时间、企业信息生成唯一的KiwiVM工具包

  2. 解压KiwiVM工具ZIP包后,点击解压目录下的KiwiVM可执行文件,启动代码虚拟化GUI工具。KiwiVM虚拟机核心部分十分复杂,GUI界面版的工具,只需几个步骤即可完成对项目的虚拟化操作,使用起来简单高效。如下图 "1-1"

  3. 代码虚拟化基于项目源代码进行,在虚拟化前须确保项目能使用ndk-build或Xcode正常编译。此处以NDK项目为例,选择项目JNI所在的目录,工具将自动对项目进行预编译分析,提取可虚拟化的代码函数,该列表依据项目的目录、文件名来构造,直观的树形结构方便快速定位需要虚拟化的函数,如下图 [项目使用ndk-build可以正常编译才进行虚拟化加密] "1-2"

  4. 针对大型项目,代码文件较多,每次虚拟化的时间太长,建议在第一次预编译后仅勾选重要的代码文件,用于下一步二次筛选需要虚拟化的函数,本阶段未勾选的代码文件默认使用原始编译的二进制代码,从而提高实际虚拟化阶段的效率。如下图仅勾选了一个关键 "4-1"

  5. 此步骤将进一步从筛选的代码文件中勾选需要进行虚拟化加密的函数,建议仅勾选重要的代码函数进行安全保护。【目前不支持包含ARM汇编指令的函数,详情参考常见问题】,本例勾选了test.cpp代码文件下3个函数进行虚拟化,如下图 "5-1"

  6. 如果项目预编译后出现冲突函数,表示同一个函数名在多个代码文件中同时存在,虚拟化工具无法识别是否为同一个函数,需要开发者自行确认检查

    处理方式:

    a. 符号冲突的函数为相同函数,直接勾选即可
    b. 符号冲突的函数为不同函数,请修改函数符号
    c. 系统函数一般为相同函数,直接勾选即可
    "6-1"

  7. 勾选完虚拟化函数和冲突函数后,点击开始加密即可开始对项目进行虚拟化编译,完成后会提示本次共计虚拟化多少个函数。【此步骤会记录下本次勾选的函数,用于下次重载项目时自动设置】 "7-1"

  8. 项目虚拟化完成后,点击 打开目录 即可进入虚拟化之后的目标文件夹,此处libtest.so就是虚拟化后的二进制文件,如下图。【如果是iOS项目,因Xcode签名问题,将手动将虚拟化后的可执行文件替换Xcode打包后的可执行文件】 "8-1"

虚拟化效果分析

C++源代码
"2-1"

将通过ndk-build正常编译的SO文件【iOS项目是IPA包中的可执行文件】拖到IDA工具中,在左侧菜单中搜索相关函数【此处为parse_hex函数】,点击该函数后再按F5进行反编译,查看C代码,其代码近似源代码,直接暴露代码逻辑,如下图
"2-1"

将通过KiwiVM虚拟化编译的SO文件【iOS项目是IPA包中的可执行文件】拖到IDA工具中,在左侧菜单中搜索相关函数【此处为parse_hex函数】,点击该函数后再按F5进行反编译,查看C代码,其代码已隐藏了原始逻辑,无法进一步分析,如下图 "2-1"

如遇问题请联系我们的客服或技术支持,官方QQ群:201898448

results matching ""

    No results matching ""