前言
这段时间不是生病了得嘛,但是由于和同学组队要做项目,但是项目里面需要很多数据,于是我对我们学校找人开发的APP下了歹意,因为APP里面有学分,获奖记录等信息。但是...本来我只想抓一下接口的,但是发现并没有这么简单,通过抓包APP发现
于是解决登录是首要问题。
分析APP
- 首先经过抓包发现(明文:1 密文:BSuUQf4rVp+9tBoSdu360g==)
=号在base64中是最后补位用的,于是初步判断为(先进行的md5类似的加密后然后再使用base64加密)
但是密文通过base64解密发现是乱码.....说明他不是base64加密,而是有秘钥的对称加密
- 由于是有秘钥的加密,那么我就只能一个方法了,逆向APP获取源码.....
- 将APP安装包导入到Smali2JavaUI软件里面,发现....使用的360加固(如何分辨加密方法自行百度)
- 有壳心都凉了一大半,百度了N个教程什么Google 哔哩哔哩都看了,都用了还是不行最后只有下面这个方法行通了
360加固逆向破解
配置:python3.7 + frida14.2.15 +frida-tools+木木模拟器
frida的原理,通过在PC上安装Frida,手机上运行frida-server,实现PC对手机的控制,同时通过js注入的方式,将dex从“壳”里“钩”出来。
注意:frida仅支持python3.7及一下版本
如果报magic FD37 错:说明版本没对,建议把frida和frida-tools都重新装一下
//其实不用太在意版本问题,网上很多说只支持Android4.4的 都不用在意,最新版的都可以用
安装环境
pip install frida
pip install frida-tools
下载frida-server文件:https://github.com/frida/frida/releases
在下载frida-server时要和frida的版本一样
使用adb连接模拟器
cd 到adb目录下
adb push frida-server文件地址 /data/local
adb shell
su
cd /data/local
frida-ps -U
如果在运行adb shell 的时候出现连接不到模拟器的情况
输入 adb connect 127.0.0.1:7555
获取源码
知道包名下载需要利用的攻击js代码:https://github.com/GuoQiang1993/Frida-Apk-Unpack
新建一个cmd窗口
frida -U -f 包名 -l dexDump.js --no-pause
然后再使用 adb pull命令吧dex文件转到PC端
源码分析
抓包 登录接口 我们发现密码参数名为:password
再使用jd-gui打开jar文件,然后使用搜索功能搜索有password的文件
其中密码这段代码: ((Map)localObject).put("password", AESUtil.encrypt(this.pwd, SecretKey.getPasswordKey(this)));
我们再看看getPasswordKey,发现了还有一个存秘钥的文件
private static String dex = "key_encrypt.dex";
private static String keyClassName = "net.chinaedu.project.wisdom.KeyConfig";
paramContext = ClassLoaderUtil.getPasswordKey(paramContext, dex, keyClassName);
我们再通过以上方法,查看key_encrypt.dex文件找到秘钥。
找到秘钥后我们再看看AESUtil文件
在使用IDEA 编写加密方法,其中Android的base64去网上下个java文件就好了
okk搞定,明文加密后的密文和APP加密后的密文一样