目前,移动端应用开发、保护、防作弊等等各个方案、方法都已经非常成熟。
加密,作为最基本的数据保护机制,随处可见。
如果应用程序的数据传输协议中还在发送明文数据,要么是无关紧要的协议,否则就会显得很low。
从逆向的角度看问题、处理问题,有时候需要把Android应用程序中的加解密算法,迁移到PC端使用。虽然加解密算法是固定不变的,但是因为Android系统环境和PC系统环境的差异,有时候单纯的复制粘贴代码,是无法完成迁移的。如果都像MD5算法一样,就不存在迁移的问题。
本文以Android应用开发中常用的AES/CBC/PKCS7Padding加解密算法为例,详细描述迁移的整个流程。相信能够帮助不少小伙伴。
(1)反编译复制伪代码
反编译是分析应用程序的第一步,如果伪代码不是很凌乱,可以直接复制,并根据需要予以调整。
本文涉及到的伪代码,源于一个(在国内)不太合法Android应用程序,不易于传播,因此无法给出样本APK;
重点在于迁移流程。复制代码如下到PC端。

(2)测试加解密算法
写一段代码测试算法是否是有效,代码如下:

运行的时候抛出异常:
java.security.NoSuchAlgorithmException: Cannot find any provider supporting AES/CBC/PKCS7Padding
这是因为PC端的JDK/JRE环境,没有提供该算法的支持。既然算法都是通用的,不依赖于编程语言,我们就需要去寻找第三方提供的实现(除非你想自己实现该算法)。
(3)添加加密算法第三方实现
有一个非常有名的第三方加密算法实现,并且非常的全面:Legion of the Bouncy Castle。
官方网址:9efK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3u0G2N6h3&6U0P5h3y4S2M7%4c8D9k6g2)9J5k6h3!0J5k6#2)9J5c8X3A6S2N6X3q4Q4x3X3g2Z5N6r3#2D9i4@1f1K6i4K6R3H3i4K6R3J5
Maven仓库查询网址:366K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3#2$3L8Y4u0W2M7r3!0K6K9i4c8G2M7Y4W2Q4x3X3g2U0L8$3#2Q4x3V1k6S2M7Y4c8A6k6X3q4U0N6q4)9J5c8X3!0J5k6#2)9J5k6h3u0G2N6h3&6U0P5h3y4S2M7%4c8D9k6g2!0q4x3#2)9^5x3q4)9^5x3R3`.`.
有需要的小伙伴,拿走不谢。
本文选择的是1.57版本,maven依赖如下(当然也可以手动下载JAR添加到项目中):
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-jdk15on</artifactId>
<version>1.57</version>
</dependency>
<dependency>
<groupId>org.bouncycastle</groupId>
<artifactId>bcprov-ext-jdk15on</artifactId>
<version>1.57</version>
</dependency>
仅仅添加算法库是不够的,还需要在代码中提供其Provider,代码如下:

(4)替换安全策略库
虽然添加了加解密算法实现,提供了Provider,还这时候还是不能正常运行的,因为会抛出以下异常:
java.security.InvalidKeyException: Illegal key size
这不是算法本身的问题,也不是第三方实现的问题,还是JDK/JRE的问题。据说是因为美国对强加密算法的出口限制,这都不是关键,关键是我们怎么解决它。办法如下:
1、访问:e00K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4N6%4N6#2)9J5k6h3!0J5j5h3y4D9k6g2)9J5k6h3y4G2L8g2)9J5c8Y4c8W2j5$3S2F1k6i4c8%4L8%4u0C8i4K6u0r3K9X3q4$3j5g2)9J5c8X3A6S2N6X3q4K6k6g2)9J5c8X3c8G2N6$3&6D9L8$3q4V1M7#2)9J5c8X3W2F1k6r3g2^5i4K6u0W2K9s2c8E0L8q4!0q4x3#2)9^5x3q4)9^5x3R3`.`.
2、下载:Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files forJDK/JRE 8。然后解压下载的zip文件。
备注:因为笔者使用的是JDK 8。
3、替换JAVA_HOME/jre/lib/security/目录下的local_policy.jar和US_export_policy.jar两个文件。替换前,请务必备份原文件。

到这里,所有的迁移工作都已经完成。可以愉快地在PC端使用Android应用程序里的加解密算法啦。
[培训]科锐逆向工程师培训第53期2025年7月8日开班!