首页
社区
课程
招聘
[分享]Android端加解密(AES/CBC/PKCS7Padding)迁移到PC端
发表于: 2018-8-5 15:13 6896

[分享]Android端加解密(AES/CBC/PKCS7Padding)迁移到PC端

2018-8-5 15:13
6896

目前,移动端应用开发、保护、防作弊等等各个方案、方法都已经非常成熟。


加密,作为最基本的数据保护机制,随处可见。


如果应用程序的数据传输协议中还在发送明文数据,要么是无关紧要的协议,否则就会显得很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。

官方网址:http://bouncycastle.org/java.html。

Maven仓库查询网址:http://mvnrepository.com/artifact/org.bouncycastle。

有需要的小伙伴,拿走不谢。


本文选择的是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、访问:http://www.oracle.com/technetwork/java/javase/downloads/index.html。

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应用程序里的加解密算法啦。



[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 14855
活跃值: (6083)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
你有没有搞错?移动端还需要迁移到PC?应该先有pc端的加解密,后来才有移动端。
再说你在pc端使用java效率非常低。
2018-8-6 10:10
0
雪    币: 40
活跃值: (680)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
pc端用模拟器不久行了
2018-8-7 09:05
0
雪    币: 17
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
tDasm 你有没有搞错?移动端还需要迁移到PC?应该先有pc端的加解密,后来才有移动端。 再说你在pc端使用java效率非常低。
抓包,移动端加密,PC端解密,这不是很常见吗,楼主只是分享个技术。顺便问一下楼主,以前做的时候只是把AES/CBC/PKCS7Padding换成AES/CBC/PKCS5Padding就行了,以后可以试试你这个方法
2018-8-7 09:17
0
雪    币: 24
活跃值: (68)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
小熊ppt 抓包,移动端加密,PC端解密,这不是很常见吗,楼主只是分享个技术。顺便问一下楼主,以前做的时候只是把AES/CBC/PKCS7Padding换成AES/CBC/PKCS5Padding就行了,以后可以 ...
别人要把某个APP的协议拿出来,在PC端独立运行,因为环境的差异,直接复制代码到PC端无法执行。本文讲的是如何在PC端提供同样的执行环境,保证程序的运行。我帮他把这个环境配置好而已。
2018-8-9 14:47
0
雪    币: 14855
活跃值: (6083)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
反编译分析应用程序是为了知道算法。知道了算法,就没要在PC端还用JAVA来处理这个算法。
pc端AES/CBC/PKCS7Padding算法什么语言都有.直接拿来用就是了。
2018-8-9 17:17
0
雪    币: 916
活跃值: (3434)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
7
楼上专注怼人14年,楼主不要太过在意...
2018-8-9 18:36
0
雪    币: 24
活跃值: (68)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
葫芦娃 楼上专注怼人14年,楼主不要太过在意...
因为有人不会弄,我帮个忙,分享出来。遇到那个大神也是醉了
2018-8-10 13:31
0
雪    币: 3581
活跃值: (719)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
有分享精神已经很可贵了,内容是否精彩,总会有需要的人,赞一个!
最后于 2018-8-10 15:23 被梨树生果编辑 ,原因:
2018-8-10 15:22
0
雪    币:
活跃值: (63)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
找个大神合作安卓项目
2018-9-7 15:16
0
雪    币: 2058
活跃值: (1651)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
分享精神已经很可贵了,内容是否精彩,总会有需要的人,赞一个!
2018-9-7 16:22
0
游客
登录 | 注册 方可回帖
返回
//