4399游戏盒 安卓APK加密分析 + so文件分析
4399 游戏盒都知道吧 今天玩他的加密 不过他的加密在so里面 是个md5 java层首先拼接的一段明文 传入到so里面在so里面有一个秘钥 加上它 进行的MD5 也很简单
直接上数据
http://m.api.4399/user/box/android/v1.0/log-in.html
dateline=1504335770&deviceIdentifier=867947773617331&info=1&model=vivo+X9Plus&password=FfQn1pwmgRY%3D&sign=a51c1c806a43936ad1108b966813ffed&username=15845454545
{"code":"321","result":{},"message":"密码错误"}复制代码dateline=1504335770&deviceIdentifier=867947773617331&info=1&model=vivo+X9Plus&password=FfQn1pwmgRY%3D&sign=a51c1c806a43936ad1108b966813ffed&username=15845454545
dateline=1504335770 时间戳
deviceIdentifier=867947773617331 设备号
info=1 固定 不知道干嘛的
model=vivo+X9Plus 手机型号
password=FfQn1pwmgRY%3D 密码 加密后的
sign=a51c1c806a43936ad1108b966813ffed 签名校验 搞的就是他
username=15845454545 账号
知道加密参数 反编译APK 进行分析
搜索sign 最终定位到
1.png (31.54 KB, 下载次数: 0)
2017-9-2 15:10 上传
protected void buildRequestParams(String arg8, ArrayMap arg9) {
ArrayMap v3 = new ArrayMap();
this.buildSignRequestParams(arg8, v3);
ArrayList v4 = new ArrayList(v3.keySet());
Collections.sort(((List)v4));
StringBuilder v5 = new StringBuilder();
int v2;
for(v2 = 0; v2 < ((List)v4).size(); ++v2) {
Object v0 = ((List)v4).get(v2);
Object v1 = v3.get(v0);
if(!TextUtils.isEmpty(((CharSequence)v1))) {
arg9.put(v0, v1);
v5.append(((String)v1));
}
}
arg9.put("sign", this.buildSignValue(v5.toString()));
}
protected abstract void buildSignRequestParams(String arg1, ArrayMap arg2);
protected String buildSignValue(String arg2) {
return AppNativeHelper.getServerApi(arg2);
}
}复制代码前面的不用管 都是一些参数的获取与拼接 重点为
arg9.put("sign", this.buildSignValue(v5.toString()));
put 了一段数据 参数名是sign 执行buildSignValue 方法 并传递了一个 v5 的文本参数 返回了一段数据
点击buildSignValue 方法跳转到
2.png (13.64 KB, 下载次数: 0)
2017-9-2 15:13 上传
protected String buildSignValue(String arg2) {
return AppNativeHelper.getServerApi(arg2);
}复制代码在这里 下个断点 动态调试下
成功段在这里
3.png (91.47 KB, 下载次数: 0)
2017-9-2 15:16 上传
出现了明文 15043364968679477736173311FfQn1pwmgRY=15845454545
先来理解下这段明文 分割开来查看 1504336496 867947773617331 1 FfQn1pwmgRY= 15845454545
1504336496 时间戳
867947773617331 设备号
1 info
FfQn1pwmgRY= 加密后的密码
15845454545 账号
继续运行 出现密文
4.png (41.65 KB, 下载次数: 0)
2017-9-2 15:22 上传
明文 15043368848679477736173311FfQn1pwmgRY=15845454545
密文 09ce7b25a9f0792c08573f7bae716980
既然出现了明文 跟密文 那么我们是不是可以来测试一下的至于算法是md5 就不用多说了
5.png (84.11 KB, 下载次数: 0)
2017-9-2 15:31 上传
发现加密结果并不一样 那么应该还有其他参数 继续分析
双击 getServerApi 函数
6.png (19.14 KB, 下载次数: 0)
2017-9-2 15:33 上传
发现来到了这里 注意了 这里头部是加载so文件的代码
System.loadLibrary("m4399"); 字符窜 m4399 那么他调用的so文件就是 libm4399.so 查看下 lib文件夹有没有这个文件
7.png (12.43 KB, 下载次数: 0)
2017-9-2 15:37 上传
有这个文件 那么 此时我们就需要另一款工具了 IDA 软件百度有 可自行下载
拖入到ID 分析
8.png (61.33 KB, 下载次数: 0)
2017-9-2 15:39 上传
这里是 so文件公开的一些方法 以便外部调用 查找 getServerApi
9.png (25.88 KB, 下载次数: 0)
2017-9-2 15:41 上传
定位到这里 代码看着懵逼 看不懂是吧 那就对了我也看不懂 哈哈 都是一些汇编代码
没关系 你可以动态调试 so 一步一步的跟 他会出现明文的 包括java层 的明文
我就不动态调试了 因为这个so太简单 我们看到 下面有个call call什么意思?玩破J的 都知道吧 他是调用函数入口
双击它 进入
10.png (12.95 KB, 下载次数: 0)
2017-9-2 15:45 上传
在这里 我们看到一个 MD5_SERVER_KEY
鼠标移动放过去发现
11.png (15.36 KB, 下载次数: 0)
2017-9-2 15:46 上传
有个字符串是吧 那么在双击它 进入
12.png (23.38 KB, 下载次数: 0)
2017-9-2 15:46 上传
我们来到了这里 发现很多字符串 注意 MD5_SERVER_KEY MD5 KEY 他是不是一个秘钥呢?
其实 不管PC 逆向 还是安卓 有的人应该知道 有时候就是靠蒙 蒙的心理还是要有的 玩意蒙对了呢?是不
ef2vx#sf*^FlklSD*9sdf(m$&qw%d7po 用这个 加上明文 之前我说了 他的加密就是 java层获取了一段明文 传入到so文件 再加上一个秘钥的 那么我们就用明文加上他
13.png (114.11 KB, 下载次数: 0)
2017-9-2 15:51 上传
看吧 怎么样 蒙对了吧 哈哈 那么就是他了 没错
最后我要重复一句话
不管PC 逆向 还是安卓 有的人应该知道 有时候就是靠蒙 蒙的心理还是要有的 玩意蒙对了呢?是不
不管PC 逆向 还是安卓 有的人应该知道 有时候就是靠蒙 蒙的心理还是要有的 玩意蒙对了呢?是不
不管PC 逆向 还是安卓 有的人应该知道 有时候就是靠蒙 蒙的心理还是要有的 玩意蒙对了呢?是不
下面插播一条广告~~~ QQ交流群:468241990 欢迎各路大神进入交流 共同学习
更多推荐
android资apk资源加密,4399游戏盒 安卓APK sign 加密分析 之 so文件分析
发布评论