最近闲来无事,本着学习的目的,就研究了一下dy的算法,切入点是dy的登录协议。若哪里分析的有问题,请大佬指出。
工具:
雷电模拟器,AndroidKiller,jadx,jeb3,fiddler,AndroidStudio。
因为dy的很多Java代码用jadx是反编译不出来的,所以就jeb和jadx结合使用了。
我用的是fiddler,然后雷电模拟器设置好代理就可以抓包了,抓到的包如下图。
在这里先分析password和mobile,这两个字段。那么面临第一个问题,应该搜索什么才能快速定位呢。我比较喜欢搜请求地址,因为在很多app里data比分被加密很正常,但是请求地址就一般不会做处理。但是请求地址很长,所以要提取有用的信息,我在这里搜的是 mobile/login 。
因为我分析的是登录协议,而且是依靠手机号登录的,所以这个就具有一定的代表性。
在AndroidKiller中搜索,
结果有四个,然后经过排除就只剩下第一个符合条件。然后查看java代码。
很明显,这里就是我们想要的那个点。经过分析,password和mobile这两个字段的加密都是一样的,即先按位异或,然后转成16进制。
接下来分析X-SS-STUB字段,先简单的分析一下,可以观察到这个字段是32位的,然后我就想到了md5。最后分析出来的结果果然是md5。
下面进行分析:
首先查找了关于这个方法的调用,来到这个方法
然后再往上查找就找不到调用点了,然后我就用AndroidStudio进行了smali代码的动态调试,
在我一开始定位的函数的返回处打了一个断点,然后向上回溯。但是,很可惜,向上的引用在执行handler,这肯定不是我们想要的地方。
然后就在AndroidKiller中搜索了X-SS-STUB
结果有三个,看上去三个都很像,于是我在三个函数里面都打了断点,看看经不经过就完事了。结果后两个都经过了,函数如下
第一处
第二处
分析后发现第一处与X-SS-STUB有关,第二处与X-Gorgon有关,通过第二处的函数名也可以看出来
此处稍后分析X-Gorgon字段的时候分析,现在先分析第一处。
但是分析第一处的时候会发现此处没有赋值的地方,让我一度怀疑是找错了地方,但是通过分析此处的smali代码会发现,此处调用了一个函数
这个函数即赋值的地方。所以说我之前被反编译的java代码给骗了。。。。
函数如下
确实是在进行md5。
下面来分析一下参数,byte[] bArr 这个参数为post的data部分,即
is_vcd=1&mix_mode=1&password=72607260343736313033&mobile=2e3d332534303d3737333534343533&account_sdk_source=app
通过动态调试可以发现。
同时再进行一次加密
由此完成了X-SS-STUB字段的加密。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)