Android逆向——过frida检测+so层算法逆向

这篇具有很好参考价值的文章主要介绍了Android逆向——过frida检测+so层算法逆向。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

0x01 过frida检测

frida可以说是逆向里面很受欢迎的工具了,你可以在运行的时候得到几乎你想要的所有东西,函数地址、内存数据、java实例,根据我们的需要去修改程序的运行逻辑等等,但是太流行也不好,迎来了各种检测。

  • ptrace占坑、进程名检测、端口检测。(这绕过太简单了)
  • D-Bus通信协议的检测。
  • maps、fd检测。
  • App中线程名的检测。

直接拿出App,看看他到底怎么检测的。节省时间,直接用hluda-server,修改一下运行端口,以spawn方式注入frida。(hluda-server的好处在于,他所生成的各种so库名字,去掉了frida等特征字段,可以很好的绕过maps和fd的检测。)

frida 过检测,Android逆向,网络

直接给我干掉了??猜测有没有可能是D-Bus通信协议的检测,App向每一个端口都发送了D-Bus认证消息,那肯定会利用strcmp( )或者strstr( )函数进行检测回复的消息。那么就hook一下看看。

frida 过检测,Android逆向,网络

同样的方法hook一下strstr函数

frida 过检测,Android逆向,网络

 不仅没有任何输出,app还是直接给我干掉了。

思考一下,不是D-Bus协议检测、不是ptrace占坑、进程名检测、端口检测、fd和maps检测利用hluda绕过了,emm,等等不一定,跟师傅讨论一下,又搜了几个文章,发现有的app检测非常恶心,只要是maps和fd中存在/data/local/tmp/,甚至只有tmp的字段,app就给kill掉。因为这个目录对于安卓逆向工作来说,是一个比较敏感的目录。hluda-server和frida-server都会在/data/local/tmp/目录下生成一个包含frida所需要的so库等文件。所以当app一旦发现了加载了/data/local/tmp下的任何东西,直接就挂掉。

那怎么办呢?让该文件夹生成到别的目录下,有一个-d参数,试了好多次,有些问题,一直都是在tmp目录下递归生成。所以便想到,你既然去检测maps,肯定是要读取里面的内容,然后寻找是否有该目录的字段咯。

那就直接hook open函数,将原程序的maps文件中一切带有tmp的行都过滤掉,剩余的内容输出到另一个文件中,最后修改open的返回值,指向新生成的文件。完美!

function main() {
    const openPtr = Module.getExportByName('libc.so', 'open');
    const open = new NativeFunction(openPtr, 'int', ['pointer', 'int']);
    var readPtr = Module.findExportByName("libc.so", "read");
    var read = new NativeFunction(readPtr, 'int', ['int', 'pointer', "int"]);
    var fakePath = "/data/data/******/maps";
    var file = new File(fakePath, "w");
    var buffer = Memory.alloc(512);
    Interceptor.replace(openPtr, new NativeCallback(function (pathnameptr, flag) {
        var pathname = Memory.readUtf8String(pathnameptr);
        var realFd = open(pathnameptr, flag);
        if (pathname.indexOf("maps") != 0) {
            while (parseInt(read(realFd, buffer, 512)) !== 0) {
                var oneLine = Memory.readCString(buffer);
                if (oneLine.indexOf("tmp") === -1) {
                    file.write(oneLine);
                }
            }
            var filename = Memory.allocUtf8String(fakePath);
            return open(filename, flag);
        }
        var fd = open(pathnameptr, flag);
        return fd;
    }, 'int', ['pointer', 'int']));
}
setImmediate(main)

 完美过掉!

frida 过检测,Android逆向,网络

0x02 SO层算法逆向

1、抓个包看看,里面都有啥东西?

frida 过检测,Android逆向,网络

登录的时候,用户名:123456789,密码:123456

根据字段名字的分析,重点关注的是sign字段(看着像是个hash散列),其次这个password应该是经过加密处理的。

 2、so算法逆向(passwrod参数)

既然是分析so层算法,具体的Java层的分析和定位就不浪费时间分析了。那么如何定位so文件和具体的函数呢。在Java层在和so层函数交互的时候,就是通过的JNI的机制,所以在so层函数加密数据之后,一定会把加密后的数据返回,通过JNIEnv下的NewStringUTF函数返回给Java层,所以hook一下这个函数,并且输出堆栈。

function hook_NewStringUTF(){

    var artModule = Process.findModuleByName("libart.so");
    var symbols = artModule.enumerateSymbols();
    var newStringUTF = null;
    for (let i = 0; i < symbols.length; i++) {
        let symbol = symbols[i];
        if(symbol.name.indexOf("NewStringUTF") != -1 && symbol.name.indexOf("Check") == -1){
            console.log(symbol.name);
            newStringUTF = symbol.address;
        }
        
    }

    Interceptor.attach(newStringUTF, {
        onEnter : function(args){
            console.log(args[1].readCString());
            console.log(Thread.backtrace(this.context, Backtracer.ACCURATE).map(DebugSymbol.fromAddress).join('\n') + '\n')
        },onLeave : function(retval){

        }
    })

}

 观看输出,尤其是堆栈信息,发现是libNativeHelper.so中的后面的是函数在文件中的偏移地址。

frida 过检测,Android逆向,网络

IDA反编译找到相应函数,反编译之后进行分析,怎么分析最快呢,当然是从你已经拥有的数据去反推未知的数据。(从后往前分析)

frida 过检测,Android逆向,网络

找到了NewStringUTF的调用,v19就是我们的FfQn1pwmgRY=,那么v19是怎么来的(猜测可能是base64,验证一下),找到上面的sub_1FEC,去里面看看。

frida 过检测,Android逆向,网络

看到这里面有一串字符,和base64很像。hook一下看看

输入

frida 过检测,Android逆向,网络

输出

frida 过检测,Android逆向,网络

难道上面的16进制数据,就是编码前的数据?经过验证之后,这个函数就是base64的编码函数,编码的数据以16进制形式传入。

那这个 15f427d69c268116 数据又是什么?继续向上找

frida 过检测,Android逆向,网络

进入这个函数一看,看不懂,不知道是干啥的太复杂了,hook看看。

frida 过检测,Android逆向,网络

这第一个参数不就是我们传入的密码么

frida 过检测,Android逆向,网络

第二个参数不就是刚才的16进制数据吗,其他参数看不懂了,猜测该函数应该是某种加密

而还有一个v22 = 0xEFCDAB9078563412LL;难道是某种密钥或者IV?

v23里面的数据很多,这是什么东西,跟踪v23的有关函数去看看

frida 过检测,Android逆向,网络

 进入函数里面查看,发现感觉有点眼熟,是DES加密?dest又是什么,dest是通过a3传过来的,经过hook之后,a3的数据是***************(程序的密钥,不方便展出)。

这个时候就有很多想法了,一个简单的数据,经过函数处理之后,出现了大量的内容,同时v23还是加密函数中的参数。难道是子密钥的生成??感觉很强烈,进入查看果然很像!

frida 过检测,Android逆向,网络

那这么一看v23就是子密钥咯,那v22很有可能就是IV向量了,去验证一下

frida 过检测,Android逆向,网络

验证是正确的(一定要注意字节序的问题)。

最终得出结论,将我们输入的密码,经过DES/CBC模式加密后,再经过base64编码就是password的值。

0x03 so算法逆向(sign参数)

根据最开始的hook  NewStringUTF,找到对应的函数位置。

不再一步步的分析了,直接找到特征

frida 过检测,Android逆向,网络

好像是MD5的初始化常量啊。

hook 

frida 过检测,Android逆向,网络

frida 过检测,Android逆向,网络

可以得到明文,然后对比一下数据包中

frida 过检测,Android逆向,网络

可以看到是 captcha + captchaId + dateline + deviceIdentifier + info + password + username + “ef2vx#sf*^FlklSD*9sdf(m$&qw%d7po”  拼接起来的数据。

frida 过检测,Android逆向,网络

这里的数据就是经过md5加密后的内容,验证一下。

 frida 过检测,Android逆向,网络

 可以得到结论,sign的值就是将数据包中的

 captcha + captchaId + dateline + deviceIdentifier + info + password + username + “ef2vx#sf*^FlklSD*9sdf(m$&qw%d7po” 

拼接之后,在进行md5散列的结果。

至此,整个逆向结束。文章来源地址https://www.toymoban.com/news/detail-797212.html

到了这里,关于Android逆向——过frida检测+so层算法逆向的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MacOS微信逆向分析-Frida

    PC下的微信二次开发相信大家都会了,那么本篇文章将带领大家使用Frida框架对Mac下微信来进行 二次开发 ! PS:还有一种静态注入的方式也不错,但是考虑到大家xcode安装包太大就不在这里展开啦。 PS:frida如何去使用大家得自己去学,本文不过多展开。 主要功能涉及如下:

    2024年02月04日
    浏览(40)
  • 安卓协议逆向 咸鱼 frida rpc 调用方案

    通过frida rpc调用真机获取指定的搜索结果数据。 本文仅供大家学习及研究使用、切勿用于各种非法用途。 frida 提供了一种跨平台的 rpc (远程过程调用)机制,通过 frida rpc 可以在主机和目标设备之间进行通信,并在目标设备上执行代码,可实现功能如下: 1、动态地

    2024年02月07日
    浏览(41)
  • i茅台app逆向分析frida反调试

    i茅台 1.3.7 frida 14.2.17 安卓 9 系统 常规frida不注入任何脚本 这种情况就是有frida反调试,frida的反调试可以写在java层或者so层,搜罗网上的方法,比较 普遍的就是:使用葫芦娃版本的frida、改frida_server的名称,修改frida_server的端口,文章中的frida_server均已满足以上条件,情况比

    2024年02月12日
    浏览(51)
  • app反爬测试之apk逆向分析-frida

    目前为止,很多app的防护基本也还是用的ssl pinning检测证书。 因为,目前的app要么不用ssl,要么用就是一般的ssl,基本就是在手机上装个相关软件 的代理即可,而且这个代理基本就是fiddler,charlels,burpsuite,mitmproxy(Python环境下的)四个抓包软件自带的ssl证书,然后即可抓到

    2024年02月15日
    浏览(53)
  • CTF逆向涉及的各种加密算法与网络安全

    在CTF竞赛中,逆向工程是一项常见的技能,旨在分析和破解各种加密算法以达到解决问题的目的。逆向工程涉及的加密算法种类繁多,下面将介绍几种常见的加密算法,并提供相应的源代码示例。 替换密码(Substitution Cipher) 替换密码是一种简单的加密算法,它通过替换明文

    2024年02月08日
    浏览(44)
  • hluda之antiAntiFrida过frida检测

    2024年02月13日
    浏览(39)
  • 【虚警检测】基于CA-CFAR(单元平均恒虚警)、GO-CFAR(最大选择恒虚警)、SO-CFAR(最小选择恒虚警)算法的恒虚警检测附Matlab代码

    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法       神经网络预测       雷达通信       无线传感器        电力系统 信号处理

    2024年02月06日
    浏览(46)
  • Android13 安装最新版 Frida

    本文所有教程及源码、软件仅为技术研究。不涉及计算机信息系统功能的删除、修改、增加、干扰,更不会影响计算机信息系统的正常运行。不得将代码用于非法用途,如侵立删! Android13 安装最新版 Frida 环境 win10 Pixel4 Android13 Python3.9 Frida16.1.0 Frida-tools12.1.3 PC安装frida和frid

    2024年02月11日
    浏览(52)
  • 【Android】Frida Hook 文件读写操作

    在挖掘客户端漏洞的时候,通常会关注应用对什么文件进行了读写操作,当我们能控制被读的文件或观测到敏感写入的文件,通常可以造成一定危害。本文详细介绍了如何通过frida监控文件读写操作。 在Linux系统下,文件的创建、读取、追加、写入和删除等操作涉及到以下系

    2024年02月08日
    浏览(177)
  • Android Hook之Frida安装使用

    Frida 是一个动态检测框架,允许开发人员在 Windows、macOS、Linux、iOS 和 Android 上的原生应用程序中注入 JavaScript 或 Python 脚本。该框架可用于操纵应用程序的行为、从中提取信息或与其进行通信。Frida 通常被安全研究人员和渗透测试人员用来对应用程序进行动态分析,并执行钩

    2023年04月19日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包