zoukankan      html  css  js  c++  java
  • 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);
    }
    
  • 相关阅读:
    DELPHI给整个项目加编译开关
    TThread.Queue和TThread.Synchronize的区别
    中文分词 《第七篇》
    搜索结果的处理和显示《第六篇》
    高级搜索 《第五篇》
    索引管理 《第四篇》
    执行搜索 《第三篇》
    构建索引 《第二篇》
    Lucene.net 基本示例 《第一篇》
    通过配置的方式Autofac 《第三篇》
  • 原文地址:https://www.cnblogs.com/seliote/p/9313641.html
Copyright © 2011-2022 走看看