飞龙Test 发表于 2022-7-31 12:51

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. 到这里这个第一个登录就完成了

---

A021 发表于 2022-8-14 23:55

haishe 发表于 2022-8-14 13:38
老哥,你用的就旧版的是哪个版本,试了好几个,安装时直接闪退,恳请前辈指教!

前辈算不上,还是好久以前做的了,后来做好了就把东西给卸载了,没什么要探索的了,所以现在也没那个版本安装包了,当时还是在豌豆荚的版本中一个一个试的

haishe 发表于 2022-8-14 13:38

A021 发表于 2022-8-11 16:19
一直在用,旧版接口不需要sign,新接口sign也搞到了,但还是用的旧接口

老哥,你用的就旧版的是哪个版本,试了好几个,安装时直接闪退,恳请前辈指教!

aonima 发表于 2022-8-2 12:41

感谢分享

Topstone 发表于 2022-8-2 13:13

好好好好好好好

kkzdq 发表于 2022-8-2 13:52

有成品吗{:1_921:}

Neveseno7 发表于 2022-8-2 14:17

那个,手机号不打码吗

banaaaaaaana 发表于 2022-8-2 14:55

这个太实用了。看个大概,收藏看

wk10575wk 发表于 2022-8-2 15:46

分析的不错,思路也清晰可以学习

金佳慧 发表于 2022-8-2 16:51

也太厉害了吧,学习了

shenshidenb 发表于 2022-8-2 18:22

感谢支持

rekoe 发表于 2022-8-2 21:15

感谢分享。
页: [1] 2 3
查看完整版本: x米社区App逆向 登陆、点赞、发帖、评论