另一个生鲜App 抓包和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签名算法解析(一) 把字符串匹配安排上。

1if (addrNewStringUTF != null) { 2 Interceptor.attach(addrNewStringUTF, { 3 onEnter: function (args) { 4 if (args[1] != null) { 5 var string = Memory.readCString(args[1]); 6 7 if(string != null) { 8 if(string.toString().indexOf("mfsnm") >= 0 ) 9 { 10 console.log("[NewStringUTF] bytes:" + string); 11 12 var threadef = Java.use('java.lang.Thread'); 13 var threadinstance = threadef.$new(); 14 15 var stack = threadinstance.currentThread().getStackTrace(); 16 console.log("Rc Full call stack:" + Where(stack)); 17 18 console.log(Thread.backtrace(this.context, Backtracer.FUZZY) 19 .map(DebugSymbol.fromAddress).join("\n")) 20 21 } 22 } 23 } 24 }, 25 onLeave: function (retval) {} 26 }); 27}

跑起来

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

运气太好了,轻松逮住。

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

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

上Frida

1var signatureCls = Java.use('cn.mxxxfxxxh.wsg.SecurityLib'); 2signatureCls.nativeSign.overload('android.content.Context', 'long', '[B').implementation = function(a,b,c){ 3 var retval = this.nativeSign(a,b,c); 4 5 var StrCls = Java.use('java.lang.String'); 6 var inStr = StrCls.$new(c); 7 8 console.log(">>> signature inStr = " + inStr); 9 console.log(" >>> signature rc= " + retval); 10 return retval; 11}

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

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 讨论下。

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

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

某车联网App 通讯协议加密分析

一、目标李老板:最近刚买了辆新车,他带的App挺有意思,要不要盘一盘?奋飞:我去,加壳了,还挺有意思,搞一搞。v6.1.0二、步骤抓包我的抓包环境是Mac10.14.6httpToolKit,这一步很顺利的抓到包了。1:main可以看到,http请求和返回值都是加密的,我们的目标就是这个 request 和 response的来历的。脱壳

某汽车社区App 签名和加解密分析

一、目标稼轩长短句有云:宝马雕车香满路。从此香车美女就成了标配。这不李老板还没聊几个mm,又开始准备换车了。今天我们的目标是某汽车社区Appv8.0.1。二、步骤脱个壳李老板说这个App很拽,貌似是某个企业版的壳,连Xcube都不好使,调试不了。我们先不管他拽不拽,先用BlackDex把壳脱了先。BlackDex提示脱壳成功,但是对应的目录下只

某问答社区App x-zse-96签名分析

一、目标今天我们的目标是某问答社区App的 xzse961:main版本:v8.21.1二、步骤搜xzse96常规做法是jadx打开apk,然后搜索xzse96。神奇的是,居然没有结果,这就有点意思了,App给我们加戏了,把一些明显的字符串做了加密隐藏。观察共性观察一下,签名有两个共性1、都是 1.0 开头2、后面接着的很像Base64那就先从h