前言
简单分析下拼某某自动登陆原理(token登陆).
拼某某3版本:3.66.0
拼某某5版本:5.0.0
工具
- MuMu模拟器
- 雷电模拟器
- fiddler (抓包)
- jadx (反编译)
- Android studio (动态调试)
过程
拼某某3
打开fiddler,模拟器配置代{过}{滤}理后,输入收到的验证码,点击登陆,可以在fiddler中看到登陆的包
打开jadx,搜索/login
-
-
-
-
可以看到把access_token和uid用SharedPreferences保存
查阅资料得知,保存的位置在
/data/data/com.xunmeng.pinduoduo/shared_prefs/
查看pdd_config_common的内容
adb shell cat /data/data/com.xunmeng.pinduoduo/shared_prefs/pdd_config_common.xml
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<boolean name="__oksp_compat__" value="true" />
<string name="jsSecureKey___ACCESS_TOKEN__">xxxxxxxxxxxxxxxxxxx</string>
<string name="jsSecureKey___USER_UID__">xxxxxxxxxxxxx</string>
<string name="pdd_id">xxxxxxxxxxx</string>
<string name="userAgentString">xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</string>
</map>
该文件保存了token,uid,pdd_id等
将文件拉到电脑端
adb pull /data/data/com.xunmeng.pinduoduo/shared_prefs/pdd_config_common.xml
关闭雷电模拟器,打开MuMu模拟器,安装拼某某3
将文件传进模拟器内
adb push pdd_config_common.xml /data/data/com.xunmeng.pinduoduo/shared_prefs/
打开拼某某发现已经是登陆状态.(注:这里不显示头像和手机号是因为保存手机号的文件在pdd_config.xml里,点击头像重新加载就可以解决这个问题)
拼某某5
拼某某5与拼某某3的区别在于其保存token的文件并不是以SharedPreferences存储的,打开jadx搜索getAccessToken(与拼某某3类似)
跟进,发现其存储token的文件在
new File(PddActivityThread.currentApplication().getFilesDir(), "pinUserFile")
转换一下得到
/data/data/com.xunmeng.pinduoduo/files/pinUserFile
看看里面保存了啥?
adb shell cat /data/data/com.xunmeng.pinduoduo/files/pinUserFile
{
"access_token": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"uid": "xxxxxxxxxxxxxxxxx",
"uin": "xxxxxxxxxxxxxxxxxxxxxxxxx"
}
用同样的操作把雷电模拟器里面的pinUserFile复制到MuMu模拟器里.
打开拼某某5,
发现已经是登陆状态.
结论
拼某某3保存用户的token在
/data/data/com.xunmeng.pinduoduo/shared_prefs/pdd_config_common.xml
拼某某5保存用户的token在
/data/data/com.xunmeng.pinduoduo/files/pinUserFile
只需替换token文件,就可以实现用户的token登陆.(模拟器测试通过,真机未测试)