标 题: AAnti_Debug(对抗反调试)系统实现
作 者: 蟑螂一号
时 间: 2013-12-24,15:54:25
Android应用中,为了防止分析人员通过调试工具调试应用,会在应用中调用ptrace,防止其他调试进程再一次附加到本应用中。AAnti_Debug系统是经过android ROM定制之后的反反调试系统。该系统主要是在系统调用ptrace中进行特殊处理,使本进程在调用ptrace时候失败,而让其他调试进程附加到进程的时候调用ptrace成功。
AAnti_Debug系统关键技术:修改android源码中bionic中的libc中的ptrace系统调用。
关机实现代码:
1.根据附加进程pid返回进程uid。
2.根据传入ptrace的参数,处理参数。
作 者: 蟑螂一号
时 间: 2013-12-24,15:54:25
Android应用中,为了防止分析人员通过调试工具调试应用,会在应用中调用ptrace,防止其他调试进程再一次附加到本应用中。AAnti_Debug系统是经过android ROM定制之后的反反调试系统。该系统主要是在系统调用ptrace中进行特殊处理,使本进程在调用ptrace时候失败,而让其他调试进程附加到进程的时候调用ptrace成功。
AAnti_Debug系统关键技术:修改android源码中bionic中的libc中的ptrace系统调用。
关机实现代码:
1.根据附加进程pid返回进程uid。
代码:
int get_uid_from_status(int pid)
{
FILE *file;
int uid=-1;
char filename[512];
sprintf(filename,"/proc/%d/status",pid);
file=fopen(filename,"r");
char line[256];
if(!file)
{
return uid;
}
while(fgets(line,256,file))
{
sscanf(line,"Uid: %u",&uid);
}
fclose(file);
return uid;
}
引用:
int uid=-1; //获取当前进程uid int myuid=getuid(); //uid>10000为非系统应用 if(pid>=0&&myuid>10000) { int val=get_val(); if(val>0) { uid=get_uid_from_status(pid); // __libc_android_log_print(ANDROID_LOG_DEBUG,"PTRACE","uid:%d myuid:%d",uid,myuid); if(request==PTRACE_TRACEME) { return -1; } if(uid==myuid) { return -1; } } } |