x米社区App逆向 登陆、点赞、发帖、评论
本帖最后由 飞龙Test 于 2022-8-3 19:56 编辑前段时间申请x米的开发者权限,奈何积分不够。就分析了一下app做了一个辅助签到,点赞,发帖以及登陆的算法。助力打卡申请开发者必备
## 点赞Sign值
1. 搜索抓包参数```postId```,可以找到其中一处可疑的代码段。
2. 该方法将postId以及timestamp作为Map传入```Utils.b```,跳转过来。此处第一行代码为:```.keySet().stream().sorted()```,为map的流遍历。但是在这之间又经过了一次```v1```的方法。
3. 分析其中的```v1```方法是把map继续传入```Utils.a```。可以看出来这里是把url参数和值进行的拼接。
4. 经过分析```Utils.a```、```v1```方法,这里的目的就已经很明了了。可以猜测是把Map遍历拼接为:```postId=xxxxxx×tamp=xxxxxxxxxxxxx```。
拼接好的字符串再传入```p```。这里的```p```方法在看后可以确定为该方法为md5加密方法。
5. 那么回到```Utils.b```,当前字符串```p```的值就为:md5加密后的:```postId=xxxxxx×tamp=xxxxxxxxxxxxx```
6. 继续执行最后一步,把加密后的md5值继续加盐再经历过一次md5。```Md5(p+j)```为最终结果。,其中j为字符串常量
7. 最终的还原结果就是:```Md5(Md5(postId=xxxxxx×tamp=xxxxxxxxxxxxx)+067f0q5wds4)```
---
## 评论算法(评论为web协议不做过多分析)
1. ```md5(md5("postId=34386247&text=不错×tamp=1644058059166")+"067f0q5wds4")```
2. 抓包:
3. 推断的加密:
```
postId=35276168&text=不错啊×tamp=1644055938036
加密后:7af254a6c79e31fd6da44dd6201f1e6a
加盐再加密后:bb78c98386db74e63de01ec74fc067de
```
4. requestId算法:截取0-5的```md5(`"互"`)```值。(注意:这里的汉字带有双引号),参考web网页端的Js算法。
## 发帖子算法
1.
2.
3.
4. Aes加密key不为固定参数 需指定生成
5.
6.
```
参数原样输出str: GET&/community/user/notice/unReadCnt&android_version=O0vUHya686StpYFwJuYbHw==&app_name=VSXf5cNA+U8VqUmgmNxraTFw5o26TbHw3DGS7nrBfxc=&build_date=AH8NTkZR7sfRnV6jrVkwdg==&country=mAv2t6qRI1TpGa8urJyrvw==&dark_mode=D+tZs7jEk6YMrlE97RMhhA==&device=fwbuEU4d8i+fyAhvqIsA3Q==&device_oaid=8G+/izVOLh3FSpIdvl3ofaC2ocgw/Bhha0HHQrMRzWk=&ip=KquK1F69/WDmYPcYDrp8Mw==&language=OXymerkAOAyZtomM/VkISw==&miui_big_version=xx/Y1NsGy8kJuIWclluAMg==&miui_version=FTe/sYPY+1/Iy9besMmVow==&model=sDanBfW03RlGrADLH/Hxxg==&product=fwbuEU4d8i+fyAhvqIsA3Q==&ref=Cg2re42ywQwZKuKvkK5JG22pUVmrZu4zIVDhqLRxCWU=&requestId=TA34tYoAMp9b2ZTEfyDxkKqM9Wj/RwR5JsA93Ee9nIE=&requestTime=UAIqI8ye+tGlNmcBXkw4IQ==&restrict_imei=jxDKBPPrwdY+e77KiaPZfw==&sim_operator=i16BObUTRO2D9lAn87kLBA==&version=CjJpQDbSvMkBTfYPymX2FA==&vip-gzip=ovqdQ6UadcFHfRO8JXMNlw==&8ZryYeE4SweIz1S7QunpuA==
结果原样输出: YwvtnFYf/k7u9gQHknk15U4X7MM=
```
7. 经过观察发现,Aes的key值是随机变化的。猜测为服务器生成。所以这里先hook一下Aes的解密函数,观察返回值。
8. 经过重新登陆,发现Aes的key值返回在这里。
9. 那么接下来就需要再逆向登陆算法了。
10. 登录算法见下文,登陆完成之后发现帖子中也有一个sign算法。搜索```announce``` 感觉似曾相识,跟点赞中的几乎一样。
11. 上文已经分析过p为md5加密,这里直接Hook即可。
## 登陆算法
1. 根据关键参数尝试搜索登陆代码段,搜索```serviceLoginAuth2```找到常量```URL_LOGIN_AUTH2_HTTPS```。继续搜索可以找到这个叫做```loginByPassword```的方法。确实是通过密码登录,所以是这个代码段应该是没错了。代码jadx转换失败并不清晰,所以直接看smali即可。!
2. 在smali代码中可以看到该类中有多处```loginByPassword```经过整理逻辑,这些方法最终指向了我们找到的这个无法可看java伪代码的方法。
以上都是一些```iget```获取对象的值没有实质性的代码。再继续往下可以找到``` invoke-static {},....getPassWordEncryptor()```这句代码字面理解就肯定是获取密码的加密值了。其中v2是获取到的password的值,v2经过Md5转大写之后又传入了```getEncryptedValue```
跳转进入之后发现没什么实际作用,那么猜测这里只是做了一个Md5转大写。
3. 经过Hash值对应的密码Md5转大写确实是验证通过!
4. 这个sign值其实是从服务端返回
5. 到这里这个第一个登录就完成了
--- haishe 发表于 2022-8-14 13:38
老哥,你用的就旧版的是哪个版本,试了好几个,安装时直接闪退,恳请前辈指教!
前辈算不上,还是好久以前做的了,后来做好了就把东西给卸载了,没什么要探索的了,所以现在也没那个版本安装包了,当时还是在豌豆荚的版本中一个一个试的 A021 发表于 2022-8-11 16:19
一直在用,旧版接口不需要sign,新接口sign也搞到了,但还是用的旧接口
老哥,你用的就旧版的是哪个版本,试了好几个,安装时直接闪退,恳请前辈指教! 感谢分享 好好好好好好好 有成品吗{:1_921:} 那个,手机号不打码吗 这个太实用了。看个大概,收藏看 分析的不错,思路也清晰可以学习 也太厉害了吧,学习了 感谢支持 感谢分享。