另一个生鲜App 抓包和mfsig签名分析(一)「建议收藏」

另一个生鲜App 抓包和mfsig签名分析(一)「建议收藏」一、目标 市面上生鲜App一大堆,买菜也确实是高频次的刚需,这些生鲜App还都有一些有意思的共性: 大都加壳了 大都不好抓包 今天我们分析的是 某生鲜App v9.9.59 的 mfsig 签名。 二

一、目标

市面上生鲜App一大堆,买菜也确实是高频次的刚需,这些生鲜App还都有一些有意思的共性:

  • 大都加壳了
  • 大都不好抓包

今天我们分析的是 某生鲜App v9.9.59 的 mfsig 签名。

二、步骤

上jadx

jadx.png

看看这么少的包名和类名,基本可以断定是加壳了。

那就先复习下 某酒店App sign、appcode签名解析(二) 脱壳分析

BlackDex脱壳

脱完壳的结果拖到PC上,赶紧jadx一下,搜一搜 “mfsig”

我去,一个结果都没有。

二种可能,一是 App有别的道道,mfsig签名相关运算和过程都在so里面;另一种可能就是脱壳不干净,关键数据木有出来。

不管是哪种可能,都得再想想别的办法了。

hook_libart

我们观察一下, mfsig签名的值都是 mfsnm 开头。这就有突破点了。

复习下 某种草电商App签名算法解析(一) 把字符串匹配安排上。

if (addrNewStringUTF != null) {
    Interceptor.attach(addrNewStringUTF, {
        onEnter: function (args) {
            if (args[1] != null) {
                var string = Memory.readCString(args[1]);

                if(string != null) {
                    if(string.toString().indexOf("mfsnm") >= 0   )
                                            {
                        console.log("[NewStringUTF] bytes:" + string);

                        var threadef = Java.use('java.lang.Thread');
                        var threadinstance = threadef.$new();

                        var stack = threadinstance.currentThread().getStackTrace();
                        console.log("Rc Full call stack:" + Where(stack));

                        console.log(Thread.backtrace(this.context, Backtracer.FUZZY)
                                .map(DebugSymbol.fromAddress).join("\n"))

                    }
                }
            }
        },
        onLeave: function (retval) {}
    });
}

跑起来

frida -U -f cn.mxxxfxxxh.application -l ms.js  --no-pause

运气太好了,轻松逮住。

[Pixel 2 XL::cn.mxxxfxxxh.application]-> [NewStringUTF] bytes:mfsnmtyBmRQEmRmAVpF48icnVLkAGJ1KJJ0bGZOGIKWEFIgLLKO7KJK9JKCHJJ5IKk50KZW7I+SII59FG+GHLZcBI654Jl9MKmcDJKWCJkO8IZ95KKP5mBY1ma
Rc Full call stack:dalvik.system.VMStack.getThreadStackTrace(Native Method)
java.lang.Thread.getStackTrace(Thread.java:1720)
cn.mxxxfxxxh.wsg.SecurityLib.nativeSign(Native Method)
cn.mxxxfxxxh.wsg.SecurityLib.a(SecurityLib.java:24)
cn.mxxxfxxxh.wsg.a.a(SecurityManager.java:42)

赤果果的就是这个 nativeSign,之前脱壳出来的代码有用武之地了,盘它。

上Frida

var signatureCls = Java.use('cn.mxxxfxxxh.wsg.SecurityLib');
signatureCls.nativeSign.overload('android.content.Context', 'long', '[B').implementation = function(a,b,c){
	var retval = this.nativeSign(a,b,c);

	var StrCls = Java.use('java.lang.String');
    var inStr = StrCls.$new(c);

	console.log(">>> signature inStr = " + inStr);
    console.log(" >>> signature rc= " + retval);
    return retval;
}

再跑一下,入参和结果都出来了。

rc.png

TIP: 这里解释一下byte[] 参数的打印,我们通过堆栈回溯,发现

String a = C15603SecurityLib.m17628a(f13866a, C3748b.m17632a(str).getBytes("UTF-8"));

这个byte[] 其实就是String转的,所以我们要打印它,只需要调用String的构造方法就行了。

三、总结

脱壳才是第一生产力,所以要多掌握一些脱壳工具和rom。

套路就是那么的相似,多熟练几个套路,遇到新的App就先都给他安排上。

ffshow.jpeg

当我们为生活疲于奔命的时候,生活已经离我们远去。

TIP: 本文的目的只有一个就是学习更多的逆向技巧和思路,如果有人利用本文技术去进行非法商业获取利益带来的法律责任都是操作者自己承担,和本文以及作者没关系,本文涉及到的代码项目可以去 奋飞的朋友们 知识星球自取,欢迎加入知识星球一起学习探讨技术。有问题可以加我wx: fenfei331 讨论下。

关注微信公众号: 奋飞安全,最新技术干货实时推送

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/13285.html

(0)

相关推荐

  • 使用SQLyog备份还原数据库

    使用SQLyog备份还原数据库1、点击“备份/导出”2、默认选中“包括CREATEDataBase语句”,这样的话,在目标服务器直接把这个sql文件导入后就可以和源数据库名一样的数据库,但是使用SQLyog不能修改数据库名导出的…

    2023-03-25
    149
  • 【原创】强撸基于 .NET 的 Redis Cluster 集群访问组件

    【原创】强撸基于 .NET 的 Redis Cluster 集群访问组件Hello 大家好,我是TANZAME,我们又见面了。今天我们来聊聊怎么手撸一个 Redis Cluster 集群客户端,纯手工有干货,您细品。 随着业务增长,线上环境的QPS暴增,自然而然

    2023-03-13
    159
  • markdown的python(markdown)

    markdown的python(markdown)Markdown本来就是依托于HTML,没有HTML就没有Markdown,因此正常的操作就是先将Markdown解析为HTML格式文本,再对其进行处理。

    2023-10-28
    139
  • 2020python练习——表的关系

    2020python练习——表的关系@2020.5.5 练习:账号信息表,用户组,主机表,主机组

    2023-02-25
    166
  • 用Python打造简短而有力的短语表达

    用Python打造简短而有力的短语表达Python是一门快速、易用且功能强大的编程语言。它的设计哲学是“优雅”、“明确”、“简单”。Python有着广泛的应用场景,如数据分析、Web开发、网络编程、人工智能等。在本文中,我们将探讨如何使用Python构建简短而有力的短语表达。

    2024-02-06
    90
  • 如何在Java中逆转堆栈?(附教程)

    如何在Java中逆转堆栈?(附教程)大家好,如果你想知道如何在Java中还原一个堆栈,那么就不要乱跑。在这篇文章中,我将一步一步地告诉你 如何在Java中逆转一个给定的堆栈。有两种方法来逆转堆栈,你可以使用迭代 或递归。最常见的反转堆栈

    2023-11-16
    145
  • Python List中的元素删除方法

    Python List中的元素删除方法Python List 中可以使用 codedel/code 关键字来删除指定位置的元素。只需指定要删除的元素的下标,即可将该元素从列表中删除。

    2024-01-22
    92
  • Python Show Scale:用Python展示比例的高效方法

    Python Show Scale:用Python展示比例的高效方法在数据可视化中,饼图是一种广泛使用的图表类型,通常用于展示数据的比例关系。Python的Matplotlib库提供了非常方便的饼图绘制函数,可以帮助我们快速生成各种饼图。下面是一个绘制基本饼图的示例:

    2023-12-20
    110

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注