### 华中科技大学网安学院逆向工程实验报告解析
#### 实验背景及目的
本实验报告来源于华中科技大学网络安全学院的一次课程实践项目,旨在通过逆向工程的方法深入研究和分析一个具体的Android应用程序(APK)。本次实验的核心任务包括识别和分析应用程序中的加密算法及其参数、探索是否存在随机数生成机制以及这些机制是否被用于加密密钥的生成过程。通过这样的实践活动,不仅能够提升学生对于信息安全和逆向工程技术的理解,还能培养他们解决实际问题的能力。
#### 实验环境搭建
##### Java开发环境配置
1. **JDK下载与安装**:从Oracle官网或其他可信渠道下载适合当前操作系统的JDK安装包,并按照指引完成安装。
2. **环境变量配置**:在系统高级设置中,创建或修改系统变量`JAVA_HOME`指向JDK的安装路径;同时,设置`CLASSPATH`变量为`.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar`,并在`Path`变量中加入`%JAVA_HOME%\bin`和`%JAVA_HOME%\jre\bin`路径。
3. **验证安装**:通过命令行输入`java`、`java -version`、`javac`等命令检查Java环境是否正确安装。
##### Android SDK环境配置
- 在国内Android镜像站点或官方渠道下载Android SDK,并按照指示完成安装配置。
##### 逆向工具准备
- 使用Android Killer、Jeb等专业逆向工具,通常解压即可使用。
#### 实验内容概述
本次实验选取了一款名为BlackVue的应用程序作为研究对象,版本号为2.91。主要目标是:
1. 分析应用程序中加密函数调用时使用的常值字符串、数组是否为加密密钥,并判断这些密钥是用于本地数据加密还是网络传输数据的保护。
2. 探索应用程序内是否存在随机数生成机制,以及这些机制是否参与到加密密钥的生成过程中。
#### 分析方法与过程
1. **定位加密函数代码**:利用Android Killer等工具打开目标APK文件,获取应用程序基本信息,如包名、入口类等。
2. **搜索加密相关关键字**:在工程中搜索“AES”、“RSA”、“Cipher”等关键字,以找到可能涉及加密处理的代码片段。
3. **深入分析代码**:由于APK文件在发布前往往经过代码混淆处理,因此需要借助逆向工具进行更深层次的分析。例如,在类`com.baidu.location.f.b.a`中发现了与AES相关的加解密函数。
```plaintext
v3.write(com.baidu.location.f.b.b.a(com.baidu.location.f.b.a.AESEncrypt_loc("30212102dicudiab","30212102dicudiab",v0.toString().getBytes()),"utf-8"));
String[]v1_2=new String(com.baidu.location.f.b.a.AESDecrypt_Loc("30212102dicudiab","30212102dicudiab",com.baidu.location.f.b.b.a(v3.toString().getBytes()))).split("=");
```
以上两段代码显示了AES加密和解密函数的调用情况,其中密钥和初始化向量均为硬编码的字符串“30212102dicudiab”。此外,还展示了如何通过逆向工具追踪函数调用路径。
#### 结论
通过对BlackVue应用程序的逆向工程分析,我们发现:
1. 应用程序内部确实存在硬编码的AES密钥和初始化向量,这在一定程度上降低了其安全性。
2. 未在分析过程中发现明显的随机数生成机制参与密钥生成的过程。
3. 密码学相关操作(加密/解密)主要应用于本地数据的保护,而非网络通信中的数据加密。
此次实验不仅加深了学生对于逆向工程的理解,还为后续进一步的研究提供了宝贵的经验和技术基础。未来还可以探索更多的逆向工具和技术,以提高分析效率和准确性。