亚洲四大邪术 中华PS App sig签名分析

简介: 亚洲四大邪术 中华PS App sig签名分析

一、目标


李老板: 奋飞呀,你堕落了,也开始玩标题党了?


奋飞: 你懂个锤子,我给你科普下亚洲四大邪术:泰国变性术、韩国整容术、日本化妆术、中华PS术。


锤子: 这个我需要懂吗?

86.png这个就是我们今天的目标。


87.png

哦,错了,这三个老兄才是我们的目标。


二、步骤

Jadx搜索 "sig"


先大概分析一下, sig 一眼看上去像是md5的结果,sigTime 必须是时间戳了,sigVersion 就是对应的签名算法版本号了。


老规矩,先搜搜 "sig"


不对劲,才两个结果。


那就再试试 "sig

88.png


这次还不错, 应该就是这个 sigVersion


点吧点吧,找到了这个类 com.meixx.secret.SigEntity,大概率是 SigEntity.generatorSigWithFinal这个函数。


祭出Objection


objection -g com.mx.mxxx.mxxx explore
android hooking watch class 'com.meixx.secret.SigEntity'


逮住了  generatorSigWithFinal

(agent) Registering job 015665. Type: watch-class for: com.meixx.secret.SigEntity
com.mt.mxxx.mxxx on (Xiaomi: 7.0) [usb] # (agent) [015665] Called com.meixx.secret.SigEntity.generatorSig(java.lang.String, [Ljava.lang.String;, java.lang.String, java.lang.Object)
(agent) [015665] Called com.meixx.secret.SigEntity.nativeGeneratorSig(java.lang.String, [[B, java.lang.String, java.lang.Object)


打印下入参和出参

android hooking watch class_method 'com.meixx.secret.SigEntity.generatorSig'  --dump-args --dump-return


有点小郁闷,返回值是个Object,看不到咱们要的签名值

(agent) Registering job 818585. Type: watch-method for: com.meixx.secret.SigEntity.generatorSig
com.mt.mxxx.mxxx on (Xiaomi: 7.0) [usb] # (agent) [818585] Called com.meixx.secret.SigEntity.generatorSig(java.lang.String, [Ljava.lang.String;, java.lang.String, java.lang.Object)
(agent) [818585] Arguments com.meixx.secret.SigEntity.generatorSig(channel/pic_timeline.json, 10,413,6790967215779498899,1,135547.1050.21|2|1|2||30000.0|1620478589|1096109|96109$$$6790967215779498899||0||273||80||78||2802||7||1||-1||6790965225653556242||1620478589819||0||1||1||1||1||1||15||9||0||1815992541||0,135547,4,home_tab_formula_hot,xxx,中国,xxx,xxx,1620478621200,,GMT 8,0,2507792916,taobao,MI NOTE Pro,Xiaomi,1440*2560,zh_CN,02:00:00:00:00:00,1089867602,0,512,4.26.33,7.0,0,1,0,wifi,mxxx-9171-Xiaomi-MI NOTE Pro-android-7.0-2cac546a,3710,1,9.1.7.1,0,2.0.0,CN,1,24,0,867302021476314,1,14f8c555ff4500db,1, 6184556633574670337, com.meixx.remote.hotfix.app.RemoteHotfixApplication@94dd584)
(agent) [818585] Return Value: com.meixx.secret.SigEntity@5bbbe0

挂上心爱的Frida


我们先观察一下, generatorSigWithFinal 函数的返回是是一个 SigEntity 类,


89.png


这个类的图示的三个成员变量就是我们要打印的结果。

var SigEntityCls = Java.use('com.meixx.secret.SigEntity');
SigEntityCls.generatorSig.overload('java.lang.String', '[Ljava.lang.String;', 'java.lang.String', 'java.lang.Object').implementation = function(a1,a2,a3,a4){
      var rc = this.generatorSig(a1,a2,a3,a4);
       console.log("a1=" + a1);
       console.log("a2=" + a2);
    var uRc=Java.cast(rc, Java.use("com.meixx.secret.SigEntity"));
    console.log(uRc._sig.value);
    console.log("sigTime=" + uRc._sigTime.value);           
    console.log("sigVersion=" + uRc._sigVersion.value);           
    return rc;
}


蓝瘦,没有打印出来,报错了

TypeError: cannot read property 'value' of undefined
    at <anonymous> (/mtxx.js:60)
    at apply (native)
    at ne (frida/node_modules/frida-java-bridge/lib/class-factory.js:613)                                                          
    at <anonymous> (frida/node_modules/frida-java-bridge/lib/class-factory.js:592)


问了下谷哥


如果有一个成员变量和成员函数的名字相同,则在其前面加一个_,如_xx.value = yy


这几个成员变量没有同名的成员函数,所以不用在前面加一个 _


我去,去掉 _

var uRc = Java.cast(rc,SigEntityCls);
console.log("sig=" + uRc.sig.value);            
console.log("sigTime=" + uRc.sigTime.value);            
console.log("sigVersion=" + uRc.sigVersion.value);


跑一下90.png

太棒了,这就是我们要的结果。


三、总结


除了直接定位sig之外,和他相关的参数也是很有效的指路明灯。比如本例的 sigVersion


坑踩多了,自然就晋级了。老鸟和菜鸟的区别就是:老鸟犯的错误比较多,居然还没挂。


91.png


对于宇宙而言,人的生命并不比一只蚂蚁重要       ----海淀野生仁波切


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


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



相关文章
|
7月前
|
JSON 监控 数据格式
1688 item_search_app 关键字搜索商品接口深度分析及 Python 实现
1688开放平台item_search_app接口专为移动端优化,支持关键词搜索、多维度筛选与排序,可获取商品详情及供应商信息,适用于货源采集、价格监控与竞品分析,助力采购决策。
|
7月前
|
缓存 监控 Android开发
京东 item_get_app 接口深度分析及 Python 实现
京东item_get_app接口可获取商品原始详情数据,包含更丰富的字段和细节,适用于电商分析、价格追踪等场景。需通过认证获取权限,支持字段筛选和区域化数据查询。
|
8月前
|
缓存 数据挖掘 API
淘宝 item_get_app 接口深度分析及 Python 实现
淘宝item_get_app接口是淘宝开放平台提供的移动端商品详情数据获取接口,相较PC端更贴近APP展示效果,支持获取APP专属价格、促销活动及详情页结构,适用于电商导购、比价工具、数据分析等场景。接口采用appkey+appsecret+session认证机制,需申请相应权限。本文提供Python调用示例及使用注意事项,帮助开发者高效对接移动端商品数据。
|
10月前
|
JavaScript
TypeOrmModule 从 app.module.ts 抽离到 database.module.ts 后出现错误的原因分析
本文分析了TypeORM实体元数据错误的成因,主要涉及实体注册方式、路径解析差异及模块结构变化导致的关系解析问题,并提供了具体解决方案和最佳实践建议。
224 56
|
7月前
|
缓存 供应链 开发者
1688 item_get_app 接口深度分析及 Python 实现
1688平台item_get_app接口专为移动端设计,提供商品原始详情数据,包含批发价格、起订量、供应商信息等B2B特有字段,适用于采购决策、供应链分析等场景。接口需通过appkey+access_token认证,并支持字段筛选,返回结构化数据,助力企业实现智能采购与供应商评估。
|
8月前
|
数据采集 数据可视化 API
驱动业务决策:基于Python的App用户行为分析与可视化方案
驱动业务决策:基于Python的App用户行为分析与可视化方案
|
数据采集 数据可视化 数据挖掘
基于Python的App流量大数据分析与可视化方案
基于Python的App流量大数据分析与可视化方案
|
6月前
|
缓存 移动开发 JavaScript
如何优化UniApp开发的App的启动速度?
如何优化UniApp开发的App的启动速度?
1175 139
|
6月前
|
移动开发 JavaScript weex
UniApp开发的App在启动速度方面有哪些优势和劣势?
UniApp开发的App在启动速度方面有哪些优势和劣势?
547 137

热门文章

最新文章

下一篇
开通oss服务