android开发中绕过检测,[原创] 某加固软件的一些检测点以及绕过方法,欢迎补充...
最近在解决某解密加固后的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开发中绕过检测,[原创] 某加固软件的一些检测点以及绕过方法,欢迎补充...相关推荐
- Android开发中虚拟位置定位、应用双开、IP代理检测
Android开发中虚拟位置定位.应用双开.IP代理检测 1.虚拟位置定位.应用双开原理 目前市面上的多开App的原理类似,都是以新进程运行被多开的App,并hook各类系统函数,使被多开的App认为 ...
- Android开发中使用七牛云存储进行图片上传下载
Android开发中的图片存储本来就是比较耗时耗地的事情,而使用第三方的七牛云,便可以很好的解决这些后顾之忧,最近我也是在学习七牛的SDK,将使用过程在这记录下来,方便以后使用. 先说一下七牛云的存储 ...
- android 自定义刷新控件,Android开发中MJRefresh自定义刷新动画效果
有时候我们对自己开发的项目经常不满意,但是我们要达到自定义刷新动画的效果有一定的难度,别着急,下面爱站技术频道和大家分享Android开发中MJRefresh自定义刷新动画效果,一起来学习吧! [一] ...
- 在android开发中使用multdex的方法-IT蓝豹为你整理
在android开发中使用multdex的方法-IT蓝豹为你整理 Android系统在安装应用时,往往需要优化Dex,而由于处理工具DexOpt对id数目的限制,导致其处理的数目不能超过65536个, ...
- Android开发中的多线程编程技术
Android开发中的多线程编程技术 [IT168技术]多线程这个令人生畏的"洪水猛兽",很多人谈起多线程都心存畏惧.在Android开发过程中,多线程真的很难吗?多线程程序的&q ...
- Android开发中调用系统窗口的方法
//直接拨号 Intent callIntent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:12345678")); start ...
- android最佳开发实现_在android开发中使用可访问性最佳做法
android最佳开发实现 As you know, accessibility is about building products that everyone can use easily and ...
- Android开发中的WMS详细解析
/ 今日科技快讯 / 近日,小冰公司宣布对旗下人工智能数字员工产品线启动年度升级.本次升级加强的技术包括大模型对话引擎.3D神经网络渲染.超级自然语音及AIGC人工智能内容生成.小冰公司计划将 ...
- Android开发中的日常积累
欢迎Star,Fork https://github.com/lizhangqu/CoreLink 里面记录了开发过程中有用的东西,欢迎补充,不定时更新. Android 性能优化 Android内存 ...
最新文章
- 关于如何解决解决The SDK platform-tools version ((25.0.3)) is too old to check APIs compiled with API 26...
- JaveWeb 公司项目(4)----- Easyui的表单验证
- linux mysql互为主从_mysql互为主从配置(双主模型)
- 字节跳动面试题:“请你描述下 Spring Bean 的生命周期?”
- vue之slot用法
- Python中按指定长度分割字符串并反转
- 矩阵连乘 动态规划 详解
- 大牛写的Openstack虚拟机创建细节
- php中include,require的文件包含问题,以及$_SERVER['PHP_SELF']和__FILE__的区别
- 基于dpdk的用户态协议栈f-stack实现分析
- pycharm笔记-动手学深度学习(李沐)线性代数课后习题
- 绘制自己的人际关系图_总算懂了如何画人际关系图
- 团队作业8----第二次项目冲刺(Beta阶段) 第二天
- 关于微软的Manifest的那些事
- python利器app插件_python利器app
- 望周知,手机维修你还担心隐私泄露嘛?华为手机一键开启维修模式
- ubuntu / linuxmint 搜狗输入法安装后 fcitx configure找不到的解决办法
- html渐变编织背景,css3编写浏览器背景渐变背景色
- 理解onMeasure
- 模拟输出质点轨迹坐标
热门文章
- 我的开源项目从0到1024的过程
- 组织结构图 js实现
- 什么样的资金盘能活一年,还上了热搜?
- 【ArcGIS微课1000例】0038:注记(Annotation)的使用方法
- 企业财务管理信息化现状思考与探索
- adguard自定义_AdGuardHome拦截页面模版下载,自定义AdGuardHome拦截页教程,修改AdGuardHome默认拦截页...
- AdGuard推荐设置
- linux redis经常自动关闭,redis 关闭保护模式
- 头歌平台web实训部分作业
- 计算机文化基础形考作业,(精华版)国家开放大学电大专科《计算机文化基础》网络课形考任务6作业及答案(2页)-原创力文档...