某二手电商App x-sign签名分析 类成员变量的分析

简介: 某二手电商App x-sign签名分析 类成员变量的分析

一、目标


今天的目标是某二手电商App的 x-sign 签名分析,抓个包先:

52.png

说实话,看到这个Headers,真让人哭笑不得,你说至于嘛,发个请求搞这么多乱七八糟的参数……


二、步骤

上jadx


算了,既然选择了,就硬着头皮上吧,搜索下 x-sign53.png


不错哦,只有4处,很容易就定位到了 getUnifiedSign 这个函数。点进去看看,发现是一个接口。


我们继续搜索 getUnifiedSign 的实现。

54.png


好幸运,有理由怀疑 mtopsdk.security.InnerSignImpl 就是我们要找的实现类。


可以写个脚本去验证下,不过这年头代码这么贵,能少写点就少写点。我们用上次学的 objection ,来验证:

objection -g com.txxxx.ixxxx explore
android hooking watch class 'mtopsdk.security.InnerSignImpl'


结果不错, getUnifiedSign 确实被调用了。

(agent) [710845] Called mtopsdk.security.InnerSignImpl.a(java.util.Map, java.lang.String, boolean)
(agent) [710845] Called mtopsdk.security.InnerSignImpl.a(java.util.Map, java.lang.String, boolean)
(agent) [710845] Called mtopsdk.security.InnerSignImpl.pc()
(agent) [710845] Called mtopsdk.security.InnerSignImpl.pc()
(agent) [710845] Called mtopsdk.security.InnerSignImpl.getUnifiedSign(java.util.HashMap, java.util.HashMap, java.lang.String, java.lang.String, boolean, java.lang.String)


监控一下它的入参和返回值

android hooking watch class_method   'mtopsdk.security.InnerSignImpl.getUnifiedSign'  --dump-args --dump-return


正是我们想要的结果。

56.png


一个新问题


我们仔细观察下 getUnifiedSign 函数,发现里面并没有 x-sign 运算过程,虽然直接调用 getUnifiedSign 可以得到 x-sign。 不过我们还是很好奇,到底 x-sign 是怎么算出来的,这下好奇心就害死猫了。

HashMap<String, String> output = this.f52559a.getSecurityFactors(input);


getUnifiedSign 中,我们有理由怀疑 getSecurityFactors 才是真正的幕后黑手,但是 只能找到 IUnifiedSecurityComponent 接口中有 getSecurityFactors 函数。其他再怎么搜索也没有找到 getSecurityFactors 的实现。


怎么办?


如果我们有办法知道 this.f52559a 这个对象是什么类型,是不是就可以知道 getSecurityFactors 的实现了?


说干就干,Hook getUnifiedSign 之后,我们拿到 this对象,然后把this的所有成员变量打印出啦。

console.log(" ========== ");
var fields = Java.cast(this.getClass(),Java.use('java.lang.Class')).getDeclaredFields();
//console.log(fields);
for (var i = 0; i < fields.length; i++) {
    var field = fields[i];
    field.setAccessible(true);
    var name = field.getName();
    var value =field.get(this)
    console.log("name:"+name+"\tvalue:"+value);
}
console.log(" ========== ");


嗯嗯,不错哦, 我们发现了 com.axxx.wireless.security.middletierplugin.b.a.a$a

========== 
name:a  value:com.axxx.wireless.security.middletierplugin.b.a.a$a@8658790
name:a  value:null
name:a  value:null
name:b  value:com.axxx.wireless.security.open.SecurityGuardManager@7aac0af
name:TAG  value:mtopsdk.InnerSignImpl
 ==========


就是它了,hook 一下,翻一翻它的底子。


一个忧伤的故事


Error: java.lang.ClassNotFoundException: Didn't find class com.axxx.wireless.security.middletierplugin.b.a.a$a


纳尼,没有这个类? 不科学呀,明明都发现它的对象了,居然hook不到它的类?


我们先来找找它在哪

var  targetClass = "com.axxx.wireless.security.middletierplugin.b.a.a$a";
Java.enumerateClassLoaders({
    onMatch: function (loader) {
        try {
            var iUseCls = loader.findClass(targetClass);
            if(iUseCls){
                console.log("loader find: " + loader);
            }
        } catch (error) {
            //console.log("classloader failed" + error);
        }
    }, onComplete: function () {
    }
});


就是它了, /lib/arm/libsgmiddletier.so,拉出来 jadx一下, x-sign 的算法就明明白白在里面了。


三、总结


字符串定位,还是一如既往的好用。类成员变量的分析有助于解决找不到接口实现类的情况。

55.png


我醉了八千万年,/醒来的时候,同伴已经是化石。/我醉了八千万年,/醒来的时候,我已不是主宰。


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


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



相关文章
|
4月前
【Azure 应用服务】App Service频繁出现 Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener 异常分析
【Azure 应用服务】App Service频繁出现 Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener 异常分析
|
1月前
|
开发框架 监控 .NET
【Azure App Service】部署在App Service上的.NET应用内存消耗不能超过2GB的情况分析
x64 dotnet runtime is not installed on the app service by default. Since we had the app service running in x64, it was proxying the request to a 32 bit dotnet process which was throwing an OutOfMemoryException with requests >100MB. It worked on the IaaS servers because we had the x64 runtime install
|
3月前
|
开发工具
uniapp, 短剧视频类App实现参考,支持滑动播放,仿抖音 仿陌陌 短视频 无限滑动播放 视频流
阿里云点播服务web播放器sdk,短剧视频类App实现参考。仿抖音 仿陌陌 短视频 无限滑动播放 视频流。无uniapp video 原生组件的层级、遮挡、覆盖问题,适合与不同功能视图组合使用,实现丰富的应用功能。
uniapp, 短剧视频类App实现参考,支持滑动播放,仿抖音 仿陌陌 短视频 无限滑动播放 视频流
|
3月前
|
安全
【Azure App Service】App service无法使用的情况分析
App Service集成子网后,如果子网网段中的剩余IP地址非常少的情况下,会在App Service实例升级时( 先加入新实例,然后在移除老实例 )。新加入的实例不能被分配到正确的内网IP地址,无法成功的访问内网资源。 解决方法就是为App Service增加子网地址, 最少需要/26 子网网段地址。
|
4月前
【Azure Function App】本地运行的Function发布到Azure上无法运行的错误分析
【Azure Function App】本地运行的Function发布到Azure上无法运行的错误分析
|
4月前
|
开发框架 缓存 .NET
【App Service】在Azure App Service中分析.NET应用程序的性能的好帮手(Review Stack Traces)
【App Service】在Azure App Service中分析.NET应用程序的性能的好帮手(Review Stack Traces)
|
2月前
|
JSON 小程序 JavaScript
uni-app开发微信小程序的报错[渲染层错误]排查及解决
uni-app开发微信小程序的报错[渲染层错误]排查及解决
712 7
|
2月前
|
小程序 JavaScript 前端开发
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
758 1
|
3天前
|
JSON 缓存 前端开发
HarmonyOS NEXT 5.0鸿蒙开发一套影院APP(附带源码)
本项目基于HarmonyOS NEXT 5.0开发了一款影院应用程序,主要实现了电影和影院信息的展示功能。应用包括首页、电影列表、影院列表等模块。首页包含轮播图与正在热映及即将上映的电影切换显示;电影列表模块通过API获取电影数据并以网格形式展示,用户可以查看电影详情;影院列表则允许用户选择城市后查看对应影院信息,并支持城市选择弹窗。此外,项目中还集成了Axios用于网络请求,并进行了二次封装以简化接口调用流程,同时添加了请求和响应拦截器来处理通用逻辑。整体代码结构清晰,使用了组件化开发方式,便于维护和扩展。 该简介概括了提供的内容,但请注意实际开发中还需考虑UI优化、性能提升等方面的工作。
40 11
|
6天前
|
供应链 搜索推荐 API
1688APP原数据API接口的开发、应用与收益(一篇文章全明白)
1688作为全球知名的B2B电商平台,通过开放的原数据API接口,为开发者提供了丰富的数据资源,涵盖商品信息、交易数据、店铺信息、物流信息和用户信息等。本文将深入探讨1688 APP原数据API接口的开发、应用及其带来的商业收益,包括提升流量、优化库存管理、增强用户体验等方面。
34 6

热门文章

最新文章