【安卓逆向】某次元app之data参数分析

今天我们要分析的app 是5Y2K5qyh5YWD54mI5pys5Y+3djUuMC44 ,小伙伴们可以去各大应用商定自行下载。

1.先抓个包

老规矩,先用charles 抓个包,可以看到该app用的更多是post请求,请求参数 叫 “data”,请求值很明显被加密了,那么今天研究的参数就是它,发现字符串是以"="结尾,根据经验大胆的猜测是被base64处理过,猜测估计是使用了AES/DES或者一些其他算法。
在这里插入图片描述
在这里插入图片描述

2.jadx静态分析

直接搜索"data" ,肯定会有一大堆返回结果。那么就换个思路,比如一些常用词,比如AES ,DES,base64,encryp。这里搜索AES
在这里插入图片描述
然后 看这里(SecretKeySpec secretKeySpec = new SecretKeySpec(randomString.getBytes(Charset.defaultCharset()), "AES");)感觉很像,来点进去看一看。
在这里插入图片描述
看关键词,这里就很明显使用了AES加密的ECB模式,在ECB模式中只需要一个16位的key。
然后继续追进去看,发现key 是randomString.getBytes(Charset.defaultCharset()) 这个方法返回来的,它又是randomString = getRandomString(i); 方法回来的,继续往上追。
在这里插入图片描述

这里来到了private static native String getRandomString(int i);,看关键词 native,好吧,加密的key 是来自于so层的。这时候需要看看so里面的逻辑是咋写的,不过从so里面返回的只是key,理论上来说这个key 应该是固定的,所以说我们可以直接hook它在java层的返回结果。

3.frida动态调试

打开frida服务,运行命令:

frida -U com.banciyuan.bcywebview -l hook_banciyuan_java.js

js代码如下:

Java.perform(
    function(){
        var Encrypt = Java.use("com.banciyuan.bcywebview.utils.encrypt.Encrypt");
        Encrypt.a.overload("java.lang.String").implementation = function (str){
            console.log("↓↓↓↓↓↓↓↓↓↓hook开始↓↓↓↓↓↓↓↓↓↓↓↓↓↓");
            console.log("AES加密前参数: "+str);
            var res = Encrypt.a(str);
            console.log("AES加密后结果: "+res);
            console.log("↑↑↑↑↑↑↑↑↑↑↑hook结束↑↑↑↑↑↑↑↑↑↑↑↑↑");
            return res;
        }

        Encrypt.getRandomString.implementation = function (a) {
            console.log('getRandomString入参数: ', a);
            var aes_key = this.getRandomString(a);
            console.log('加密的key: ', aes_key);
            return aes_key;
        }

        // Encrypt.b.implementation = function (str, str2){
        //     console.log("b方法参数1: "+ str);
        //     console.log("b方法参数2: "+ str2);
        //     // console.log("↓↓↓↓↓↓↓↓↓↓↓↓打印b方法调用的堆栈↓↓↓↓↓↓↓↓↓↓↓↓");
        //     // printStack();
        //     // console.log("↑↑↑↑↑↑↑↑↑↑↑↑打印b方法调用的堆栈↑↑↑↑↑↑↑↑↑↑↑↑");
        //     var bres = Encrypt.b(str, str2);
        //     console.log("方法返回结果: "+ bres);
        //     console.log("方法返回结果: "+ Object.keys(bres))
        //     send(bres)
        //     return bres;
        // }

        function printStack(){
            var threadef = Java.use('java.lang.Thread');
            var threadinstance = threadef.$new();
            var stack = threadinstance.currentThread().getStackTrace();
            for(var i = 0;i<stack.length;i++){
                send("stack:" + stack[i].toString());
            }
    }
    }
)

效果如图:

在这里插入图片描述
这里就很明显的能看到,输入的参数和输出的结果以及key。
然后key已经被hook出来了,接下来,打开对应的so文件,去验证下我们的猜想。

查看so文件

这里的so文件叫 librandom.so,在导出表里面直接看到so层的方法名Java_com_banciyuan_bcywebview_utils_encrypt_Encrypt_getRandomString
,然后还找到对应的aes-key,也验证了hook出来的值。
在这里插入图片描述
在这里插入图片描述

4.python还原一下

该app使用的是AES加密算法,对该算法不清楚的可移步这篇文章(python 实现AES加密算法)。
可以看到data 计算的结果,和hook出来的值一样,然后请求也成功了。
在这里插入图片描述
完事,手工。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Frida是一款免费的,基于Python和JavaScript来实现的,面向开发人员、逆向工程师和安全研究人员的动态检测工具包。 Frida拥有一套全面的测试套件,不但调试效率极高,而且在广泛的使用中经历了多年严格的测试。 尤其是,移动应用安全测试和服务巨头NowSecure对齐钟爱有加,在NowSecure内部,安全人员通过Frida这个工具套装,已经完成对大量的移动应用程序大规模深度的安全分析测试。目前依然在该公司的安全测试中扮演重要的角色。 基于Python和JavaScript的Frida,天生就是跨平台的动态调试工具,不但可以运行在Windows、Linux、macOS之上,而且还可以调试Windows应用程序、Linux应用程序,macOS、iOS、Andriod和QNX等几乎全平台的应用程序。可以说,一旦掌握Frida这套工具,就可以在全平台,对全平台的应用程序进行动态调试和分析。 Frida使用极其方便,在使用过程中,只需将你编写的JavaScript脚本通过Frida自身的工具注入到目标进程中,就可以HOOK任何功能,其中包括但不限于监视加密API或跟踪应用程序关键代码等。在使用过程中,无需知道被“研究”程序的源代码。 尤其是可以一边编辑JavaScript脚本,一边运行JavaScript脚本的功能对于调试分析来说极为友好。只需“保存”正在编辑的JavaScript脚本,就立即就能看到该脚本执行的结果,全称无需其它人工介入,也无需重新启动被“研究”的应用程序,极大地简化了分析流程,同时也极大地提高了工作效率。因此,得到了众多安全分析人士的青睐。 本课程从最基本的调试环境搭建开始,基于经典的Windows“扫雷”游戏的动态调试分析,编码等,循序渐进演示Firda在分析调试Windows应用程序中基本使用方法和技巧。拥有这些知识储备之后,在加上官方的参考文档,你就可以轻松地将这些知识“迁移”至分析和调试其他平台的应用程序。 课程资料,请看第一课中github链接。
某flutter-app逆向分析是指对于一个使用flutter框架开发的应用进行逆向工程分析逆向工程是通过分析应用的代码、二进制文件等来了解其内部实现细节。 首先,我们需要获取该应用的安装包文件(APK或IPA文件),然后进行解包操作,将其转换为可读取的文件目录结构。 接下来,我们可以使用一些工具来提取应用的资源文件、代码文件等。对于flutter-app来说,可以提取出dart文件,这是flutter的主要代码文件,其中包含了应用的逻辑实现。 通过阅读dart文件,我们可以了解应用的代码结构、数据模型、界面设计等。可以分析应用的逻辑实现方法,包括各种函数、类、方法的调用关系。 同时,还可以通过分析相关配置文件、资源文件等来了解应用的各种设置、资源加载方式等。 在逆向过程中,还可以使用一些调试工具来进一步了解应用的运行机制。例如,hook工具可以拦截应用的函数调用,并捕获输入输出数据,用于进一步分析逆向分析的目的可以有很多,比如了解应用的工作原理、发现潜在的漏洞或安全问题、提供参考用于自己的开发等。 需要注意的是,逆向分析需要遵守法律规定。未经授权的逆向分析可能侵犯他人的知识产权,涉及到隐私等方面的问题。因此,在进行逆向分析之前,应该了解并遵守当地相关法律法规,避免产生法律纠纷。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值