第十一章 软件保护技术(六)(运行环境检测)

运行环境检测

  • 动态分析技术
    • 除了静态分析和动态调试,还可用它分析软件
    • 基于自定义的沙盒环境,通过 Hook 系统中所有关键 API 来输出程序运行时的动态信息
    • 效率较高
  • 可在运行时检测软件的运行环境,判断程序是否被第三方恶意使用或跟踪分析

模拟器检测

  • 主流沙盒的运行环境都是基于 Android 源码改造的定制版本的模拟器,只要检测运行环境是否为 Android 模拟器,即可判断是否运行于沙盒

  • 模拟器和真机的差异:

    • 手机服务的差异

      • 模拟器中所有与设备运行相关的信息都是被模拟的,包括设备的 ID、手机号、IMEI、IMSI 等,其中最明显的是模拟器中的手机号以 155 开头(正常手机号不可能如此)
      • 模拟器启动后会开启 5554 端口,可通过检测该端口是否被使用,从而判断是否运行在模拟器
    • 系统属性的差异

      • 分别在真机和模拟器的 adb shell 环境中执行 getprop 命令,即可发现系统属性的差异

        • 真机

          image-20200427134442390

        • 模拟器

          image-20200427132255966

      • 模拟器中设备厂商、硬件、model 等属性值都固定为 sdk 或 generic,真机不会出现此情况

    • 系统文件的差异

      • 模拟器中有 /init.goldfish.rc/system/bin/qemud 这类真机不会有的文件
    • 系统硬件的差异

      • 模拟器中查看 /proc/cpuinfo 的信息,会显示 Goldfish 之类的字样,真机不会如此
  • 示例代码(根据上述信息判断程序是否运行于模拟器):

    private boolean checkEMU(Context context) {
         
        if ("runchu".equals(getProp(context, "ro.hardware")))
            return true;
        if ("1".equals(getProp(this, "ro.kernel.qemu")))
            return true;
        if ("generic".equals(getProp(context, "ro.product.device")))
            return true;
     
        if (Build.MANUFACTURER.contains(
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值