【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);
}
推荐阅读
- Android 逆向概述
- Android包管理机制PackageInstaller安装APK
- Android 中的一些特殊目录与文件
- Android 源码分析 事件传递机制
- Android O PackageInstaller 解析
- Android so注入(inject)和Hook技术学习——Got表hook之导出表hook
- 6一儿童节快乐动态表情包微信表情包大全_微信
- 6一儿童节祝福语与6一儿童节表情包_微信
- 微信查询高考分数怎样查询? 微信查高考分数图文详细教程_微信