一、目标
市面上生鲜App一大堆,买菜也确实是高频次的刚需,这些生鲜App还都有一些有意思的共性:
- 大都加壳了
- 大都不好抓包
今天我们分析的是 某生鲜App v9.9.59 的 mfsig 签名。
二、步骤
上jadx
![](https://i-blog.csdnimg.cn/blog_migrate/5108e18f4b452c6734b3b1dd10b951c6.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;
}
再跑一下,入参和结果都出来了。
![](https://i-blog.csdnimg.cn/blog_migrate/136124f3d00c7cd916adab83b8ddaea5.png)
TIP: 这里解释一下byte[] 参数的打印,我们通过堆栈回溯,发现
String a = C15603SecurityLib.m17628a(f13866a, C3748b.m17632a(str).getBytes("UTF-8"));
这个byte[] 其实就是String转的,所以我们要打印它,只需要调用String的构造方法就行了。
三、总结
脱壳才是第一生产力,所以要多掌握一些脱壳工具和rom。
套路就是那么的相似,多熟练几个套路,遇到新的App就先都给他安排上。
![](https://i-blog.csdnimg.cn/blog_migrate/4997b3ea1efee81d0bad12296ffe6d4d.jpeg)
当我们为生活疲于奔命的时候,生活已经离我们远去。
TIP: 本文的目的只有一个就是学习更多的逆向技巧和思路,如果有人利用本文技术去进行非法商业获取利益带来的法律责任都是操作者自己承担,和本文以及作者没关系,本文涉及到的代码项目可以去 奋飞的朋友们 知识星球自取,欢迎加入知识星球一起学习探讨技术。有问题可以加我wx: fenfei331 讨论下。
关注微信公众号: 奋飞安全,最新技术干货实时推送# 学习计划安排
我一共划分了六个阶段,但并不是说你得学完全部才能上手工作,对于一些初级岗位,学到第三四个阶段就足矣~
这里我整合并且整理成了一份【282G】的网络安全从零基础入门到进阶资料包,需要的小伙伴可以扫描下方CSDN官方合作二维码免费领取哦,无偿分享!!!
如果你对网络安全入门感兴趣,那么你需要的话可以
点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!
①网络安全学习路线
②上百份渗透测试电子书
③安全攻防357页笔记
④50份安全攻防面试指南
⑤安全红队渗透工具包
⑥HW护网行动经验总结
⑦100个漏洞实战案例
⑧安全大厂内部视频资源
⑨历年CTF夺旗赛题解析
![](https://i-blog.csdnimg.cn/blog_migrate/1fad3e75bdf4cb27e86f038823642203.jpeg)