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.看安卓开发了。。学习安卓开发

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Windows API Hook 是一种技术,用于截获和修改 Microsoft Windows 操作系统中的 API 调用。API 是应用程序与操作系统之间进行交互的接口,通过 Hook 技术,我们可以在 API 被调用前或者调用后注入自定义的代码来监控、修改甚至完全替换原本的 API 行为。 Windows API Hook 技术通常用于以下几个方面: 1. 监控和记录:通过 Hook 技术,我们可以截获特定 API 的调用,并记录下来,以供后续分析使用。这对于软件调试、异常捕获和性能分析非常有用,可以帮助开发人员定位和解决问题。 2. 行为修改:通过修改 API 调用的参数或返回值,我们可以改变原本的行为逻辑。可以用于对软件进行自定义的增强或者修改,提供特定的功能或者保护隐私等。 3. 恶意行为检测与防范:通过 Hook 技术,可以监控系统中的 API 调用,检测和阻止恶意软件的行为。例如,可以截获网络 API 调用,检测恶意软件的通信行为,并阻止其传输敏感信息。 4. 系统级别功能拓展:通过 Hook 技术,可以在系统层面为应用程序提供额外的功能。例如,可以通过 Hook 来添加全局热键、截获鼠标事件、自定义窗口样式等。 需要注意的是,Windows API Hook 是一项强大但也易被滥用的技术。如果不正确使用,可能会导致系统不稳定、性能下降甚至安全问题。因此,在使用 API Hook 技术时,开发人员需要谨慎设计和测试,确保对系统的干扰和风险最小化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值