Android 中的反调试技术

【Android 中的反调试技术】宝剑锋从磨砺出,梅花香自苦寒来。这篇文章主要讲述Android 中的反调试技术相关的知识,希望能为你提供帮助。
比较简单的有下面这两种
调试端口检测, 23946(0x5D8A)Demo:

void CheckPort23946ByTcp() { FILE* pfile=NULL; char buf[0x1000]={0}; // 执行命令 char* strCatTcp= "cat /proc/net/tcp |grep :5D8A"; //char* strNetstat="netstat |grep :23946"; pfile=popen(strCatTcp,"r"); if(NULL==pfile) { LOGA("CheckPort23946ByTcp popen打开命令失败! "); return; } // 获取结果 while(fgets(buf,sizeof(buf),pfile)) { // 执行到这里,判定为调试状态 LOGA("执行cat /proc/net/tcp |grep :5D8A的结果: "); LOGB("%s",buf); }//while pclose(pfile); }

android设备中调试器进程名检测, android_server, gdbserver, gdb 等Demo:
void SearchObjProcess() { FILE* pfile=NULL; char buf[0x1000]={0}; // 执行命令 //pfile=popen("ps | awk ‘{print $9}‘","r"); // 部分不支持awk命令 pfile=popen("ps","r"); if(NULL==pfile) { LOGA("SearchObjProcess popen打开命令失败! "); return; } // 获取结果 LOGA("popen方案: "); while(fgets(buf,sizeof(buf),pfile)) { // 打印进程 LOGB("遍历进程:%s ",buf); // 查找子串 char* strA=NULL,strB=NULL,strC=NULL,strD=NULL; strA=strstr(buf,"android_server"); strB=strstr(buf,"gdbserver"); strC=strstr(buf,"gdb"); strD=strstr(buf,"fuwu"); if(strA || strB ||strC || strD) { // 执行到这里,判定为调试状态 LOGB("发现目标进程:%s ",buf); }//if }//while pclose(pfile); }


    推荐阅读