安卓逆向:分析某号店商品搜索sign

前言

    好久没搞安卓了,没有什么合适的练手的。。原因还是自己太菜了,大的逆不出来,小的又没兴趣搞..昨天群友问了下这个App的sign的问题,刚好没什么事就搞了一下,顺手记录下。

    我这边的电脑环境不全,有些工具没有装,所以有的地方有些曲折,不过不影响过程。必要的工具还是要装的:frida、ida、jadx...来看分析过程吧。

分析

    之前有一篇文章分析过某号店的网页端,如今发现他的网页端已经没了。。只剩下app,并且貌似app也改了名。打开官网下载最新版app即可。

    安装到配置好基础环境的雷电模拟器然后进行抓包。我这边没有装xposed,所以也就没有justTrustMe插件。用fiddler抓包是抓不到的。也懒得去下xposed,不过抓包的方法很多,先直接用Packet Capture抓试试。

    随便输点什么,点搜索:

    到Packet中看看,根据响应找,应该就是这个包了

    参数一大坨,body一大堆。不过很多都是写死的,一大部分都是设备的参数。直奔主题,找sign吧。

    打开jadx反编译一下,然后就是搜索了。

    本着能用简单方法解决的就不要用复杂的方法的心态,我先后搜索了wifiBssid、/api、yhd_nsearch、sign=,都没找到合适的地方,有两个看着可能是的方法,hook后也并没有走。然后人就傻了,这该搜的都搜了,也没找到位置,咋搞?我们还有其他方法,比如,可以抓UI啊,找到搜索那个按钮,再去代码里扒按钮的位置。好吧,也失败了。

    对于这个App而言硬搜sign慢慢看,也可以搜出来。。时间成本问题而已,毕竟这个app是没有混淆的。那么如果是高度混淆状态下,或者你不管怎么搜就是找不到加密的地方该怎么办。我们知道Frida可以打印出调用栈,也就是找到hook点就可以打印调用栈找到加密位置,如何找hook点,其实我们可以hook他的发包函数。也就相当于在web里我下一个全局的xhr断点。

    通过搜索"/api",我们可以找到这样一个方法:

    也就是他封装的一个http请求的类,如果他不是那么变态的话,那么所有的网络请求可能都会走这个一个方法。我们hook一下:

    这里frida的常规操作就不说了,这边我直接用frida-script执行的,修改比较方便。执行后下拉页面刷新:

    可以看到确实是hook到了这个方法,那么我们对代码稍加修改,打印出调用栈,用到java原生的getStackTrace方法:

        结果:

    已经出来了,我们再去找这个signatureFromJava方法,这个名字太明显了。

    再进去:

    HMACSHA256,验证一下:

    可以看到这两个参数打印出来是[object Object],也没必要再去转什么,这里参数类型是字节数组,肯定看不到。这里想拿到参数的话,一是调用java方法把他转成字符串,二是hook上面那个strToByteArray方法。我选第二种。

    拿到的第一个参数是一大坨,第二个一串字符串。我们结合抓包结果看一下:

    就是连接和body和query的值进行签名。第二个那个参数也就是密钥了。

    这个是标准的hmacsha256算法,我用其他语言执行的结果和hook到的结果一样。那么也就完成了这次的sign分析。PS:没想到他居然把签名放在了java层,之前一度以为是在so中呢。。。

总结

    java层都是纸老虎。。就算做了反编译处理或者混淆,也有很多方式能够定位到关键代码。硬啃smali其实也没多难,不过他这个签名在java层里是我一开始没有想到的。不过,如果在so里大概率就没有这篇文章了hhh,因为我应该搞不出来。。

         声明:本文分析过程仅供学习,并无任何个人以及商业或其他用途,如因参考文章造成违法行为本人概不负责。如有不慎侵权,请联系我删除。

推荐阅读更多精彩内容