【安卓逆向】某润发app之paramsMD5参数分析

今天我们要分析的app 是5aSn5ram5Y+R5LyY6bKcdjEuNC4w (base64),小伙伴们可以去各大应用商定自行下载,软件使用360壳且混淆,APP校验了HTTPS证书,需要使用xposed的JustTrustMe模块。

参考链接:https://core.vivcms.com/2020/08/14/420.html,
转载请注明出处:
https://blog.csdn.net/weixin_38819889/article/details/122456132

1.抓个包

打开charles抓个包,里面有一个参数叫paramsMD5,这就是今天要研究的参数。然后打开jadx,搜索半天发现啥也没有搜到,猜测该app是加壳。

在这里插入图片描述

2.查壳

我们先打开查壳工具,查一查壳,这里是mac终端使用的,工具叫ApkScan-PKID,有些壳查不到,但是这里勉强够用了。

在这里插入图片描述
可以看到用的是360的壳。

3. 脱壳

然后我们用下葫芦娃的工具FRIDA-DEXDump,进到frida_dexdump所在的目录,直接运行python3 main.py,默认三秒钟,然后就成功把软件的壳脱掉了,拿到dex文件。
在这里插入图片描述

再然后把一个个dex文件重新合并拼装,打包成一个新的apk文件,效果如下:
在这里插入图片描述

4.jadx静态分析

这里搜索关键字 "paramsMD5",就2个地方,点进去看看这个this.f13604a.put("paramsMD5", b(a2));

在这里插入图片描述

然后来到这里,

在这里插入图片描述

发现 data = a2paramsMD5=b(a2);,其实这里面的a2就是抓包拿到的data,也就是请求传递的body,b()方法是个啥,跟进去看看。

在这里插入图片描述

来到这里,b() 方法java代码如下:

public static String b(String str) {
    try {
        JSONObject jSONObject = new JSONObject(str);
        boolean z = false;
        if (jSONObject.has(f13597d)) {
            z = jSONObject.getBoolean(f13597d);
        }
        String str2 = "";
        if (jSONObject.has(f13599f)) {
            str2 = jSONObject.getString(f13599f);
        }
        String str3 = "";
        if (jSONObject.has(f13598e)) {
            str3 = jSONObject.getString(f13598e);
        }
        String str4 = "";
        if (jSONObject.has(f13600g)) {
            str4 = jSONObject.getString(f13600g);
        }
        return b.a(str + (z + str2 + str3 + str4));
    } catch (JSONException e2) {
        e2.printStackTrace();
        return b.a(str);
    }
}

这里直接看返回值 b.a(str + (z + str2 + str3 + str4));,z和str2和str3和str4到底是个啥,跟进去看看。

在这里插入图片描述

看到这里我们大概明白了,就是声明一个JSONObject jSONObject = new JSONObject(str);,就是json对象,然后依次判断取出这四个字段,组装成一个新的字符串,交给b.a()方法执行。

b.a()代码如下:

  public static String a(String str) {
        String str2 = "@456yx#*^&HrUU99";
        if (e.f13526e.equals(e.a().b()) || e.f13527f.equals(e.a().b())) {
            str2 = "@yx123*&^DKJ##CC";
        }
        try {
            SecretKeySpec secretKeySpec = new SecretKeySpec(str2.getBytes(), "HmacSHA256");
            Mac instance = Mac.getInstance(secretKeySpec.getAlgorithm());
            instance.init(secretKeySpec);
            return Base64.encodeToString(instance.doFinal(str.getBytes()), 2);
        } catch (Exception e2) {
            e2.printStackTrace();
            return null;
        }
    }

看名字,大概就能猜到这里使用的HmacSHA256+base64组合算法(如果不了解该算法,请看文章: https://blog.csdn.net/weixin_38819889/article/details/122455802),到这里静态分析差不多,拿出我们的frida动态调试一下。

5.frida动态调试

js代码如下:

Java.perform(function (){
    var g_class = Java.use("com.rt.market.fresh.application.g");
    g_class.b.overload("java.lang.String").implementation = function(v1){
        console.log("↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓");
        console.log("Sig入参-参数:" + v1);
        var res = g_class.b(v1);
        console.log("Sig加密后的数据:" + res);
        console.log("↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑");
        return res;
    }

    var b_class = Java.use("com.rt.market.fresh.application.g$b");
    b_class.a.overload("java.lang.String").implementation = function(n1){
        console.log("a方法入参-参数:" + n1);
        var res = b_class.a(n1);
        console.log("a方法返回-数据:" + res);
        return res;
    }

})

执行命令看看效果:

frida -U com.rt.market.fresh -l hook_dufxian.js

在这里插入图片描述
好了,到此分析完成。

6.算法还原

加密还算简单,最后已经还原成python,测试对比一下paramsMD5: e675/mblyBuNdX8+uWUpx5FwGOHWclKILz2UDDtPDaw=,值对得上。
在这里插入图片描述
完成,手工!

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
某flutter-app逆向分析是指对于一个使用flutter框架开发的应用进行逆向工程分析。逆向工程是通过分析应用的代码、二进制文件等来了解其内部实现细节。 首先,我们需要获取该应用的安装包文件(APK或IPA文件),然后进行解包操作,将其转换为可读取的文件目录结构。 接下来,我们可以使用一些工具来提取应用的资源文件、代码文件等。对于flutter-app来说,可以提取出dart文件,这是flutter的主要代码文件,其中包含了应用的逻辑实现。 通过阅读dart文件,我们可以了解应用的代码结构、数据模型、界面设计等。可以分析应用的逻辑实现方法,包括各种函数、类、方法的调用关系。 同时,还可以通过分析相关配置文件、资源文件等来了解应用的各种设置、资源加载方式等。 在逆向过程中,还可以使用一些调试工具来进一步了解应用的运行机制。例如,hook工具可以拦截应用的函数调用,并捕获输入输出数据,用于进一步分析。 逆向分析的目的可以有很多,比如了解应用的工作原理、发现潜在的漏洞或安全问题、提供参考用于自己的开发等。 需要注意的是,逆向分析需要遵守法律规定。未经授权的逆向分析可能侵犯他人的知识产权,涉及到隐私等方面的问题。因此,在进行逆向分析之前,应该了解并遵守当地相关法律法规,避免产生法律纠纷。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值