本帖最后由 物语之心 于 2021-9-19 23:36 编辑
0x00 前言
最近学习安卓逆向,刚好发现有个小时候玩过的页游,现在最近一段时间出了手游,拿来练练手也挺好。写的不是很好,请各位看官看个热闹就好。
0x01 使用工具
-
Fiddler 任意版本 、jadx、IDA
-
雷电模拟器
-
代{过}{滤}理工具 Postern
-
任意一款编程工具
0x02 教程内容
0x20 首先配置好 Fiddler 这里就不赘述了,论坛里有很多相关教程,模拟器里配置好
0x21 打开游戏,随便登录个账号密码抓个登录包。
可以发现返回内容是没经过加密,然后需要的参数 这里就列举几个比较重要的参数
表单名称 |
值 |
说明 |
channelNo |
110001 |
登录渠道,如IOS渠道为 210009 |
key |
1881c326106056afee3da488560d75b9 |
经过 username与pwd计算得出的md5 |
username |
123123123 |
游戏账号 |
userpwd |
13038c34b00c2645f1cf4e5f087c1681 |
密码 DES_ECB |
versionName |
0.13.21082101S |
安装包的版本号 |
返回关键信息
表单名称 |
值 |
说明 |
sid |
eaps7chp |
游戏ID |
token |
5779c00f1e0a8cd6393b66f6f8930b0c |
登录令牌 |
登录成功后 二次令牌登录游戏
提交格式为 JSON 需要的关键数据为 sid 和 token
提交地址已匿。可以通过自行复现找到,接下来可以分析dex了。
0x22 寻找加密过程
将APK丢入 Apktool Box 先查个壳
然后丢入 jadx 直接载入apk 这里采用最简单的方式,全局搜索提交地址的部分信息 < mobile!sdkLogin.action > 试着找出关键登录函数
继续跟进搜索 xxx_LOGIN 被谁调用了
可以看到有个调用函数 getLoginUrl 提交的时候肯定也有地方引用了这个函数
可以看到 他有个 XXXSDKUser 直接在这里面找就大概率能找到登录封装过程了。
这里有SDK登录函数,然后我们仔细分析
搜索 encryptMsgMd5 找到对应加密函数 可读性还是挺高的
搜索 DesUtil.encrypt
public static String encrypt(String str) {
try {
return SocketHelper.m5514E(str);
} catch (String str2) {
str2.printStackTrace();
return null;
}
}
继续跟进 SocketHelper.m5514E
发现新版的apk已经将加密函数放到另外加载SocketHelper库文件里 那我们在lib/armeabi-v7a里找到libSocketHelper.so 拖入 IDA里
这里说明了 Key 为 leiting 然后跟进去就会发现
以上的伪代码 还是比较好分析的,既然知道了加密方法 就可以写程序跑一下了。
0x03 封装程序
使用易语言 简单又方便
0x04 写在最后
本篇文章仅供学习交流,提供一个学习思路。致谢所有为逆向工作做出贡献的所有大佬。
转载请注明来处。
[/md] |