前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >某内容电商App sign签名分析 复习下之前的技巧

某内容电商App sign签名分析 复习下之前的技巧

原创
作者头像
fenfei331
修改2021-09-18 14:54:52
6420
修改2021-09-18 14:54:52
举报
文章被收录于专栏:奋飞安全奋飞安全

一、目标

现在内容电商,社交电商,直播电商等等概念多的眼花缭乱,终极目的就一条,卖货给你。

正如我们分析他的sign签名一样,套路就一条, jadx + frida

sign.png
sign.png

这个sign数了数,正好32位,难道是 md5 ?

二、步骤

上jadx

先搜索下 "sign" 记得带上引号。

jadx.png
jadx.png

结果只有40多个,而且第二个开上去就有眼缘,点进去看看

代码语言:txt
复制
String a = m7166a(b, map);
if (TextUtils.isEmpty(a)) {
	return null;
}
map.put("sign", a);
return map;

这个 m7166a 应该就是我们的目标。

上Frida

先hook m7166a 试试

代码语言:txt
复制
var dispatchECls = Java.use('anet.channel.strategy.dispatch.e');
    dispatchECls.a.overload('anet.channel.strategy.dispatch.IAmdcSign', 'java.util.Map').implementation = function (a,b) {
    var retval = this.a(a,b);
    console.log(">>> sign inMap = " + b.entrySet().toArray());
        console.log(" >>> sign rc= " + retval);

    return retval;
}

跑一下……

没反应,难道frida坏了? 还是找错了地方?

祭出javax_crypto大法

用排除法试试,咱们把 javax.crypto.Mac、java.security.MessageDigest、javax.crypto.spec.IvParameterSpec等等一堆java的密码学算法统统hook一遍,期望它用的是标准的java的密码学算法。

show.png
show.png

运气真不错,逮住了。顺利的把堆栈打出来。赤果果的md5。

全hook打出来的信息太杂乱了,我们关掉这一堆hook,只单独hook 堆栈中找到的这个函数。

代码语言:txt
复制
var md5UseCls = Java.use('com.sxxdx.client.base.utils.Na');
md5UseCls.a.overload('java.lang.String').implementation = function(a){
    var retval = this.a(a);
    console.log(">>> md5 inStr = " + a);
    console.log(" >>> md5 rc= " + retval);
    return retval;
}

这下的结果漂亮多了。

rc1.png
rc1.png

没有思路的时候,找找log

这次咱们运气不错,定位到了关键的地方。如果下次没有这么运气好怎么办?

一个负责任的Android程序一定会打log,所以如果找不到思路的时候,可以把程序的所有log打出来。

一个负责任的Android程序在发布的时候一定会关掉Debug的log开关。

所以我们找到log类的时候,可以先用 objection 批量搞搞,看看是哪个函数会被调用。

这里我们发现 anet.channel.util.ALog 类就是我们要找的目标

代码语言:txt
复制
objection -g com.sxxdx.client.android explore
android hooking watch  class 'anet.channel.util.ALog'

和我们预料的一样,他并没有傻乎乎的去打日志,而是判断了是否打日志的开关。

代码语言:txt
复制
com.sxxdx.client.android on (google: 10) [usb] # (agent) [657071] Called anet.channel.util.ALog.isPrintLog(int)
(agent) [657071] Called anet.channel.util.ALog.isPrintLog(int)
(agent) [657071] Called anet.channel.util.ALog.isPrintLog(int)
(agent) [657071] Called anet.channel.util.ALog.isPrintLog(int)
(agent) [657071] Called anet.channel.util.ALog.isPrintLog(int)
(agent) [657071] Called anet.channel.util.ALog.isPrintLog(int)

只好暴力上了,把 anet.channel.util.ALog 类的所有函数都hook一遍,入参都打印处理。 再细细分析了。

三、总结

貌似运气比技术重要,会写js的的人运气都不会太坏。

系统库函数、常用密码学处理函数要熟悉,大家都是站在一个起跑线上,软件工程教我们要复用,模块。 逆向工程教我们要多处复制,不要把关键点都写在一处。

ffshow.png
ffshow.png

失败并不可怕,可怕的是你还相信这句话。

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

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、目标
  • 二、步骤
    • 上jadx
      • 上Frida
        • 祭出javax_crypto大法
          • 没有思路的时候,找找log
          • 三、总结
          相关产品与服务
          应用安全开发
          应用安全开发(Application Security Development,下文中也叫 Xcheck)为您提供优质的代码分析服务。Xcheck 凭借优秀的算法和工程实现,能在极低的误报率和漏报率前提下,以极快的速度发现代码中存在的安全漏洞。Xcheck 采用私有化部署的模式,所以产品使用的整个生命周期,源码都不会流出公司网络,杜绝源码泄露风险。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档