浅谈Android反调试 之 PTRACE_TRACEME

反调试原理:

ptrace函数  原型为:    
#include <sys/ptrace.h>
long ptrace(enum __ptrace_request request, pid_t pid, void *addr, void *data);
ptrace有四个参数: 
 1). enum __ptrace_request request:指示了ptrace要执行的命令。
 2). pid_t pid: 指示ptrace要跟踪的进程。
 3). void *addr: 指示要监控的内存地址。
 4). void *data: 存放读取出的或者要写入的数据。
ptrace是如此的强大,以至于有很多大家所常用的工具都基于ptrace来实现,如strace和gdb。

参数为reqest为PTRACE_TRACCEME,表示父进程和子进程是Trace关系。如下图:
1118630-20170501235355976-127912821.png

我们知道调试Android应用程序,必须调用附加进城,此刻必须调用 ptrace(PTRACE_ATTACH). 此刻进程从程序已经被Tracce, 此刻ptrace必会失败。利用这一点我们就可以做反调试。
实现代码如下:
1118630-20170501235356570-1266351707.png

解决方案:NOP调用 ptrace(PTRACE_TRACEME)这个代码
 








posted on 2017-05-01 23:54 蕉下客--) 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/jiaoxiake/p/6793906.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值