App逆向攻防-绕过某车app越狱和代理检测

admin 2025年2月5日23:33:22评论17 views字数 2833阅读9分26秒阅读模式

作者:yueji0j1anke

首发于公号:剑客古月的安全屋

字数:1479

阅读时间:    10min

声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。合法渗透,本文章内容纯属虚构,如遇巧合,纯属意外

目录

  • 前言

  • 分析

  • 检测学习

  • 总结

0x00 前言

本文针对某市面租车app进行越狱和代理绕过

先上个图

App逆向攻防-绕过某车app越狱和代理检测

该app会对代理和越狱情况都有检测

0x01 分析

首先就是砸壳拿ida分析

python3 dump.py -H ip -p 22 -u root -P alpine appname

这里砸壳的时候直接闪退了,应该是检测到了相关函数

我们hook 一下系统的exit或者abort函数

frida-trace -U -i "exit" -i "abort" -f com.xxx.xxx

添加js代码,打印堆栈信息

App逆向攻防-绕过某车app越狱和代理检测

但这里直接就退出了

App逆向攻防-绕过某车app越狱和代理检测

根据经验,frida-trace可能出问题了,换frida直接跑脚本

Interceptor.attach(Module.findExportByName(null"exit"), {onEnterfunction (args) {console.log("12312");varexit_status=args[0].toInt32();  // 获取 exit 状态码console.log("[*] exit() called with status:"exit_status);// 可以选择阻止原始函数console.log("[*] Blocking exit()");console.log(Thread.backtrace(this.contextBacktracer.ACCURATE).map(DebugSymbol.fromAddress).join("n"))    },onLeavefunction (retval) {console.log("[*] exit() function is returning");    }});

可以看到在退出前系统执行了以下堆栈

App逆向攻防-绕过某车app越狱和代理检测

可以看到在offset 0x4406408 处退出

ida来到0x104406408位置(还没加载完,悲,等他转完)

大约等了半个小时,总算是加载完了

App逆向攻防-绕过某车app越狱和代理检测

这个时候我们再进行跳转

发现还是jump fail,那我们直接去跳堆栈上一层

App逆向攻防-绕过某车app越狱和代理检测

这下成功了

App逆向攻防-绕过某车app越狱和代理检测

跳转到这里,不出意外看名字应该是功能点:检测完毕后推出告知用户信息,比如说检测到代理越狱之内的

但我没有看到检测越狱的功能点

App逆向攻防-绕过某车app越狱和代理检测

尝试对该地址函数进行一个hook

functionhookUserFuntion() {varbaseAddr=Module.findBaseAddress('WCCApp');varoffsetAddr=0x87CC// 0x100007464vartargetAddr=baseAddr.add(offsetAddr);console.log("WCCApp 基址: "+baseAddr);console.log("目标函数地址: "+targetAddr);Interceptor.attach(targetAddr, {onEnterfunction(args) {console.log("函数hook成功!");console.log(' called from:n'+Thread.backtrace(this.contextBacktracer.ACCURATE)                    .map(DebugSymbol.fromAddress).join('n'+'n');this.skip=true;        },onLeavefunction(retval) {console.log("函数执行完毕");        }    });}

堆栈执行正常

App逆向攻防-绕过某车app越狱和代理检测

接下来就需要去找其对应执行的相关检测逻辑代码函数

这里我去找交叉引用没找到,线索好像断掉了....

那就直接搜索字符串  《检测到...》

App逆向攻防-绕过某车app越狱和代理检测

我类个骚刚,早知道直接搜索字符串了

对应这里的7384方法

App逆向攻防-绕过某车app越狱和代理检测

尝试直接hook 7384地址

但我发现直接hook这里程序直接退出,琢磨了一下,应该不是地址的问题。

App逆向攻防-绕过某车app越狱和代理检测

hook 前面通知逻辑函数对应成功,hook 对应函数检测函数失败...这,让人费解

那我们对应再找交叉引用,hook

找到相关调用函数

App逆向攻防-绕过某车app越狱和代理检测

这里相当于加入线程异步调用,继续往上层

App逆向攻防-绕过某车app越狱和代理检测

这里的逻辑大约是调用一些swift库到进程中,其中包括了检测越狱代理、注入等逻辑链接库,这也是为什么我们之前注入到一半就退出的原因

最终在viewDidload找到对应调用,我们尝试切换其为空试试

App逆向攻防-绕过某车app越狱和代理检测

成功进入

App逆向攻防-绕过某车app越狱和代理检测

成功

functionreplaceCheck() {varbaseAddr=Module.findBaseAddress('WCCApp');console.log("WCCApp base address: "+baseAddr);//0x7008是sub_100007008越狱检测函数的偏移地址vartargetFunctionAddr=baseAddr.add(0x7008);console.log("Target function address: "+targetFunctionAddr);consttargetFunction=newNativeFunction(targetFunctionAddr'void', []);// 把sub_100007008替换成一个空函数Interceptor.replace(targetFunctionAddrnewNativeCallback(function () {console.log("[*] 我说不准加载就是不准加载");    }, 'void', []));consttargetFunctionAddrRootVC=baseAddr.add(0x8A24);Interceptor.attach(targetFunctionAddrRootVC, {onEnterfunction (args) {console.log('RootViewController ');        },onLeavefunction (retval) {console.log('RootViewController');        }    });}functionmain() {replaceCheck();}setImmediate(main);

0x02 越狱检测学习

App逆向攻防-绕过某车app越狱和代理检测

这里是检测越狱相关敏感应用和动态链接库以及对应越狱可能出现的apk情况

如果这里直接用现在的rootless越狱不出意外的话是可以完美进行绕过的

0x03 总结

本次从脱壳分析ida入手,分析jail相关函数和字符串,最终从退出堆栈入手,层层分析直接到加载检测动态链接库的sub函数,并替换至空

原文始发于微信公众号(剑客古月的安全屋):App逆向攻防-绕过某车app越狱和代理检测

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月5日23:33:22
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   App逆向攻防-绕过某车app越狱和代理检测https://cn-sec.com/archives/3700316.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息