当前位置: 主页 > JAVA语言

md5加密解密java代码-md5加密java代码 16位

发布时间:2023-03-23 22:12   浏览次数:次   作者:佚名

事情是这样的,周日的时候舍友向我推荐了一款APP,内容很不错,是这么多年见到的为数不多的良心APP,每天推送一篇文章,一个视频,一个电台,使用体验极佳,虽然好像是抄袭别的正经APP的创意,不过真的不错,尤其视频基本秒开很棒,每天学到的知识也不少。

md5加密解密java代码_md5加密java代码 16位_md5盐值加密java代码

然后就顺便抓包试试喽,这种APP一般加密措施都做得不错,不出所料,所有的请求体和响应体都被加密,目测是AES

md5盐值加密java代码_md5加密解密java代码_md5加密java代码 16位

请求头中也有各种参数,不出所料也有签名校验sign

md5加密解密java代码_md5盐值加密java代码_md5加密java代码 16位

之前我接触过的逆向大部分是PC端和网页端,网页端不管混淆多严重,只要有耐心就能搞出点东西,但是移动端的逆向难度好像大一点,我使用IOS系统,ipa的逆向教程少之又少,于是只能放弃

然后就想起,这个app还有安卓版本,加密算法应该是一样的,于是开始百度一些安卓逆向的知识

md5加密java代码 16位_md5盐值加密java代码_md5加密解密java代码

总的来说就是 脱壳-反编译-分析,那就来肝吧

(这方面基本没有接触过,所以比较菜)

工具准备

安卓逆向那就肯定需要一台安卓真机喽,从抽屉里翻出我的红米4X,这台手机从高中开始就陪我了

md5加密解密java代码_md5盐值加密java代码_md5加密java代码 16位

解锁后获取root权限

安装Xposed框架

MT管理器

解锁和安装框架的过程就省略了,就是各种百度各种踩坑

电脑端

JD-GUI 反编译软件

HBuilderX(随便一款好用的文本编辑器就行)

脱壳

随着开发者的安全意识不断增加,市面上几乎所有软件都进行加固,将真实的代码隐藏起来,只有在软件运行的时候才会动态释放出来,这样就避免了一部分人直接通过反编译dex文件来进行破解

课外学习链接

所以获取到真实的dex文件就很关键,这些操作很形象的叫做脱壳,大部分的脱壳工具都是通过HOOK一些关键函数,在软件运行的时候将真实的代码提取出来

具体的实现我不懂,以我现在的水平会用人家的工具就好了,但是大部分工具都已经停更数年,我只能挨个尝试,经过尝试ZjDroid,dumpdex,易开发都脱壳失败,就在我要放弃的时候看到了Fdex2,界面很丑我都不抱希望,进行操作

(手机太卡截图不了,网上找的图

md5加密java代码 16位_md5加密解密java代码_md5盐值加密java代码

md5盐值加密java代码_md5加密java代码 16位_md5加密解密java代码

md5加密解密java代码_md5盐值加密java代码_md5加密java代码 16位

1.安装模块并激活

2.重启手机

3.在Fdex2中选择xxxx应用

4.打开xxxx应用

神奇,在包目录下竟然多了七八个dex文件,而且大小均为几M,看样子脱壳成功了

因为脱壳工具是将同一时间段调用关键函数的包都导出了,所以这里面很大一部分都是别的app的代码文件,将他们一起打包发送到电脑上

反编译

dex是Android平台上(Dalvik虚拟机)的可执行文件, 相当于Windows平台中的exe文件, 每个Apk安装包中都有dex文件, 里面包含了该app的所有源码, 通过反编译工具可以获取到相应的java源码

在电脑上使用js-gui将每个dex都反编译看看md5加密解密java代码,在源码中寻找我们要的包,功夫不负有心人,在最后几个dex中我终于发现了我要的东西,而且所有函数都被正确识别了出来,这不就相当于在我面前裸奔了吗

md5加密解密java代码_md5盐值加密java代码_md5加密java代码 16位

将这个包下的源码导出,使用自己的文本编辑器来进行分析

分析代码

我们的目的是搞定app发送请求时的加密以及对数据的解密,之前猜测是AES加解密,所以直接搜索关键字,很快定位了以下的函数,确认了是AES加解密

md5加密解密java代码_md5盐值加密java代码_md5加密java代码 16位

通过使用umeng_kv定位到了全局配置文件,在这里发现了所有的key与iv,数据和图片/视频采用的是不同的密钥

md5盐值加密java代码_md5加密java代码 16位_md5加密解密java代码

将之前抓到的包数据拿过来进行解密md5加密解密java代码,成功get到原数据(请求体和响应体加解密方式都一样)

md5加密java代码 16位_md5加密解密java代码_md5盐值加密java代码

AES加解密解决后,当然是要写爬虫,但是难点在复现app请求时的参数,也就是headers中的user_key,sign,uuid等还有签名校验的sign值,如果这些数据错误的话,是无法正确返回数据的,就比如这个样子

md5加密解密java代码_md5盐值加密java代码_md5加密java代码 16位

跟踪关键字「uuid」「user-key」后可以定位到生成headers的函数中

md5加密java代码 16位_md5盐值加密java代码_md5加密解密java代码

接下来就逐行分析代码,看看每个参数的意义

md5盐值加密java代码_md5加密解密java代码_md5加密java代码 16位

md5加密解密java代码_md5加密java代码 16位_md5盐值加密java代码

所有的参数都被放入一个map中,用来计算sign,关键的部分来了

md5加密java代码 16位_md5加密解密java代码_md5盐值加密java代码

经过百度treeMap.keySet是将字典中的key输出,所以猜测这里的数组为

["uuid", "user-key", "timestamp", "ip","platform"]

尝试在python中重构此函数,看看能否得出正确的sign值

md5盐值加密java代码_md5加密java代码 16位_md5加密解密java代码

这里遇到一个问题,结果并不正确,于是怀疑是KEY排序错误

百度发现treeMap.put并不是一个单纯向map中压入数据,而是有排序,详细说明太长了我也没仔细看,按照递增的顺序排列了一下,成功输出了正确结果

签名校验的问题解决以后,就可以正确获取到数据了

md5加密java代码 16位_md5盐值加密java代码_md5加密解密java代码

初步的python代码就写成这样,因为所有请求的加密方式都是这样,所以将headers头的计算单独放在一个函数中,调用API的时候获取一个新headers即可

md5加密解密java代码_md5盐值加密java代码_md5加密java代码 16位

所以到这里,对于这个app的逆向分析基本完成了,后面再将爬虫完善一下,就能将所有资源Down下来了,虽然在线看也挺舒服的,哈哈哈

最后放一张流程图

md5盐值加密java代码_md5加密java代码 16位_md5加密解密java代码

总结

安卓逆向之前是我想的太复杂了,实际上手操作一下会学会很多新东西,看来以后搞不定的软件都能转移到安卓这边进行逆向看看了

因为这方面不是很懂,所以有什么错误欢迎各位大佬指出哦

果然还是逆向最让人有成就感,期待下一次的操作,哦不对,我还没考完试

md5加密解密java代码_md5加密java代码 16位_md5盐值加密java代码

老师拉我回去学习了

md5加密解密java代码_md5加密java代码 16位_md5盐值加密java代码

我们下次再见

祝各位期末高过

md5加密解密java代码_md5盐值加密java代码_md5加密java代码 16位