hook与注入&& 软件保护技术 &&软件壳

hook的类型

java层:1.Dalvik hook 2.ART hook
Native层: 1.LD_PRELOAD_Hook 2.Inline hook

hook框架xposed

吐了 老是报错l…为什么。。。
https://blog.csdn.net/tanmx219/article/details/81369229【已解决】
感觉套模板就行。。尴尬了。。。我直接用作者给的源代码编写的插件怎么用不起来。。。

so注入

艹 好难。。。不会写

dex注入

没讲。。

frida注入框架

看雪上 安卓逆向基本都用它 一定要学会!
我吐了,安装了一万次安装失败
直接官方就好了
妈的 以后安装就直接看官方
pip install frida-tools
注意:模拟器 是建立在x86上,所以要下载x86的android-server
真机- arm 吐了 一直失败 才找到原因
声明3.6是sb…用的时候有bug, python升级成3.8毛问题都没有
呵呵。。。写js脚本。。clz都找不到 弄掉后都好了。。。
艹 frida nb pin sb!

软件保护技术

反调试技术

调试器状态检测

1.isDebuggerConnected() 和xml的android:debuggable属性

private bool isDebuggerConnected(){
        if( ( getApplicationInfo().flags &= ApplicationInfo.FLAG_DEBUGGABLE) != 0 ){//判断android:debuggable是否修改
            return true;
 }
 return android.os.Debug.isDebuggerConnected();
}

调试器端口检测

比如检验23496端口有没有被占用

private void checkPort( int Port) {
  final int port_ = port;
  new Thread() {
       @Override
       public void run() {
               try{
               InetAddress addr = InetAddress,getByName("127.0.0.1");
               Socket sock = new Socket(addr , port_);
                  prtused = true;
               } catch(Exception e){
                        e.printStackTrace();
                            portused = false;
               }
               try {
                    run0nUiThread(new Runnable() {
                                      @Override
                                       public void run() {
                                                           tv.setText(portused ? "Yes" : "No");
                                                     }
                              });
                              Thread.sleep(300); 
               }  catch (InterruptedException e){
                                 e.printStackTrace();                 
                 }
               
        }
  }.start();
}

进程状态检测

主要检验tracerpid 有没有被其他的进程附上

extern "C"
JNIEXPORT jboolean JNICALL
java_com_droider_checkdebugger_Main_Activity_checkStatus(
        JNIEnv * env,
        jobject
) {
    FILE *f = fopen("/proc/self/status", "r");
    char buf[1024];
    while(fgets(buf,1024,f)) {
           if(strstr(buf,"TracerPid:")) {
                  int tpid;
                  sscanf(buf,"TracerPid: %d",&tpid);
                  if(tpid != 0){
                   fclose(f);
                   return true;
                  }
           }  
   }
   fclose(f);
   return false;
}

运行环境检验

1.模拟器检测

private boolean checkEMU(Context context) {
      if("goldfish".equals(getProp(context,"ro.hardware")))
         return true;
       if("1".equals(getProp(this,"ro.kernel.qemu")))
         return true;
       if("generic".equals(getProp(context,"ro.product.device")))
       return true;

        if(Build.MANUFACTURER.contains("Genymotion"))
         return true;
        if(Build.DEVICE.startsWith("generic"))
         return true;
        if(Build.MODEL.contains("sdk"))
         return true;
        if(new File("/init.goldfish.rc").exists())
          return true;
        if( new File("/system/bin.qemud").exists())
        return true;
        
        try{
                BufferedReader cpuInfoReader = new BufferedReader(new FileReader("/proc/cpuinfo"));
                String line;
                while((line = cpuInfoReader.readLine()) != null) {
                                 if( line.contains("Goldfish"))
                                   return true;
                      }
           }catch (Exception e) {
           }
           return false;
 }

2.root检验
旧版本的管理软件superuser

if(new File("/system/app/Superuser.apk").exists())
   return true;

新版本的root管理工具SuperSu.apk /data/app apk的名称"eu.chainfiresupersu"

List<PackageInfo> packages = getPackageManager().getInstalledPackages(0);
for(PackageInfo pack : packages) {
           if(pack.packageName.equals("eu.chainfire.supersu"))
           return true;
}

还有su

String[] paths = {"/sbin/su","/system/bin/su","system/xbin/su","/system/bin/failsafe/su"};
for( String path : paths) {
     if(new File(path).exists()) return true;
}

hook检验

主要针对是否安装hook工具

软件壳

看看雪的贴实践吧。。看书感觉没用

明日计划:
1.安卓的ctf题写两个
2.看安卓开发了。。学习安卓开发

上一篇:【SpringBoot】(1)-- 基于eclipse配置springboot开发环境


下一篇:「NOIP2021模拟赛 By JXC C」位运算 题解