最近在解决某解密加固后的app对模拟器的检测问题,每次打断点分析,应用都会执行一个 strcmp 函数,其中一个参数是空,导致段错误退出

对比Android_x86项目能正常运行,又在网上查了些资料,经过不断调试尝试,发现该框架实现的反调试手段如下

Native(gdb)调试

1 检查/proc/$pid/status 文件

如果该文件下存在 TracerPid:\t${num}\n 行,并且${num}所代表的数字非0,则代表被ptrace追踪,进程自杀: 关键函数 fopen fgets

2 检查函数执行时间,在特定的函数安插gettimeofday函数,判断函数执行前后的时间,如果太长,则可能是被断点中断引起,进程自杀: 关键函数gettimeofday

3 设置SIGCONT 信号处理函数,gdb调试的过程是遇到断点发送SIGTRAP,然后检查是否命中断点,如果命中发送SIGSTOP使程序背上该信号,不能从内核中返回。

当用户执行下一步或者释放断点后发送SIGCONT信号,恢复程序运行,爱加密采用设置SIGCONT信号处理函数,如果ptrace发送SIGCONT则落入自己设置的信号处理函数执行,

该函数执行的操作是进程自杀 :关键函数 signal bsd_signal sigaction

4 /proc/$pid/wchan 查看睡眠状态是不是由于ptrace_stop引起的

5 在库加载的时候设置信号, 之后再设置信号,比对返回的旧信号值是否一致

对于上述三种方案采取的绕过措施

1 TracerPid 重写libc fgets函数,替换TracerPid的值

2 gettimeofday 重写libc, 在特定条件下重写时间. 另外值得注意的是会使用一个for循环执行多次gettimeofday函数,如果每次mock的时间比较长是不能绕过的

3 signal 替换应用设置的信号参数为SIGUSR2

4 同1

5 sysctl(name, sizeof(name) / sizeof(*name), &info, &info_size, NULL, 0);  返回值中有一位表示是否被ptrace

jdwp调试

Debug.isDebuggerConnected() 函数返回true表示已经调试器已经连接

这个绕过就太简单了

检测/data/dexname DexHunter目录

检测hook 遍历maps表,查看子串是否存在“apk@classes.dex”的字符串,若存在获取该模块的startAddr和endAddr, 然后检验此odex的头部是否为真正的dex文件。

/proc/$pid/wchan 查看睡眠状态是不是由于ptrace_stop引起的

最后于 2020-12-11 11:17

被ermei编辑

,原因:

android开发中绕过检测,[原创] 某加固软件的一些检测点以及绕过方法,欢迎补充...相关推荐

  1. Android开发中虚拟位置定位、应用双开、IP代理检测

    Android开发中虚拟位置定位.应用双开.IP代理检测 1.虚拟位置定位.应用双开原理 目前市面上的多开App的原理类似,都是以新进程运行被多开的App,并hook各类系统函数,使被多开的App认为 ...

  2. Android开发中使用七牛云存储进行图片上传下载

    Android开发中的图片存储本来就是比较耗时耗地的事情,而使用第三方的七牛云,便可以很好的解决这些后顾之忧,最近我也是在学习七牛的SDK,将使用过程在这记录下来,方便以后使用. 先说一下七牛云的存储 ...

  3. android 自定义刷新控件,Android开发中MJRefresh自定义刷新动画效果

    有时候我们对自己开发的项目经常不满意,但是我们要达到自定义刷新动画的效果有一定的难度,别着急,下面爱站技术频道和大家分享Android开发中MJRefresh自定义刷新动画效果,一起来学习吧! [一] ...

  4. 在android开发中使用multdex的方法-IT蓝豹为你整理

    在android开发中使用multdex的方法-IT蓝豹为你整理 Android系统在安装应用时,往往需要优化Dex,而由于处理工具DexOpt对id数目的限制,导致其处理的数目不能超过65536个, ...

  5. Android开发中的多线程编程技术

    Android开发中的多线程编程技术 [IT168技术]多线程这个令人生畏的"洪水猛兽",很多人谈起多线程都心存畏惧.在Android开发过程中,多线程真的很难吗?多线程程序的&q ...

  6. Android开发中调用系统窗口的方法

    //直接拨号 Intent callIntent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:12345678")); start ...

  7. android最佳开发实现_在android开发中使用可访问性最佳做法

    android最佳开发实现 As you know, accessibility is about building products that everyone can use easily and ...

  8. Android开发中的WMS详细解析

    /   今日科技快讯   / 近日,小冰公司宣布对旗下人工智能数字员工产品线启动年度升级.本次升级加强的技术包括大模型对话引擎.3D神经网络渲染.超级自然语音及AIGC人工智能内容生成.小冰公司计划将 ...

  9. Android开发中的日常积累

    欢迎Star,Fork https://github.com/lizhangqu/CoreLink 里面记录了开发过程中有用的东西,欢迎补充,不定时更新. Android 性能优化 Android内存 ...

最新文章

  1. 关于如何解决解决The SDK platform-tools version ((25.0.3)) is too old to check APIs compiled with API 26...
  2. JaveWeb 公司项目(4)----- Easyui的表单验证
  3. linux mysql互为主从_mysql互为主从配置(双主模型)
  4. 字节跳动面试题:“请你描述下 Spring Bean 的生命周期?”
  5. vue之slot用法
  6. Python中按指定长度分割字符串并反转
  7. 矩阵连乘 动态规划 详解
  8. 大牛写的Openstack虚拟机创建细节
  9. php中include,require的文件包含问题,以及$_SERVER['PHP_SELF']和__FILE__的区别
  10. 基于dpdk的用户态协议栈f-stack实现分析
  11. pycharm笔记-动手学深度学习(李沐)线性代数课后习题
  12. 绘制自己的人际关系图_总算懂了如何画人际关系图
  13. 团队作业8----第二次项目冲刺(Beta阶段) 第二天
  14. 关于微软的Manifest的那些事
  15. python利器app插件_python利器app
  16. 望周知,手机维修你还担心隐私泄露嘛?华为手机一键开启维修模式
  17. ubuntu / linuxmint 搜狗输入法安装后 fcitx configure找不到的解决办法
  18. html渐变编织背景,css3编写浏览器背景渐变背景色
  19. 理解onMeasure
  20. 模拟输出质点轨迹坐标

热门文章

  1. 我的开源项目从0到1024的过程
  2. 组织结构图 js实现
  3. 什么样的资金盘能活一年,还上了热搜?
  4. 【ArcGIS微课1000例】0038:注记(Annotation)的使用方法
  5. 企业财务管理信息化现状思考与探索
  6. adguard自定义_AdGuardHome拦截页面模版下载,自定义AdGuardHome拦截页教程,修改AdGuardHome默认拦截页...
  7. AdGuard推荐设置
  8. linux redis经常自动关闭,redis 关闭保护模式
  9. 头歌平台web实训部分作业
  10. 计算机文化基础形考作业,(精华版)国家开放大学电大专科《计算机文化基础》网络课形考任务6作业及答案(2页)-原创力文档...