混淆技术研究笔记(四)反篡改介绍

news2024/9/23 13:28:48

logo
先来看看AI的介绍,为了防止Java代码打包的JAR包被篡改,可以采取以下几种措施:

  1. 使用数字签名:可以使用Java的签名工具(如Jarsigner)对JAR包进行数字签名。签名可以确保JAR包的完整性和来源可信性。在验证JAR包时,可以使用Java的验证工具(如Jarsigner或Java Web Start)来验证签名。

  2. 使用加密技术:可以使用加密算法对JAR包进行加密,确保只有授权的用户才能解密和使用JAR包。可以使用Java的加密库(如javax.crypto)来实现加密和解密操作。

  3. 使用文件校验和:可以使用文件校验和算法(如MD5或SHA-256)计算JAR包的校验和,并将校验和值保存在可信任的位置(如服务器)。在使用JAR包时,可以重新计算校验和并与保存的值进行比较,以验证JAR包的完整性。

  4. 使用安全沙箱:可以使用Java的安全沙箱机制来限制JAR包的访问权限,防止恶意代码对系统进行篡改或攻击。可以使用Java的安全管理器(SecurityManager)来配置和管理安全沙箱。

  5. 使用代码混淆:可以使用代码混淆工具对Java代码进行混淆,使代码难以阅读和理解。混淆后的代码更难被篡改和逆向工程。

综合使用上述措施可以提高JAR包的安全性,减少被篡改的风险。然而,完全防止JAR包被篡改是很困难的,因此还应定期更新和验证JAR包,以及采取其他安全措施来保护系统的安全。


前面我们已经对代码进行了混淆,想修改代码是很难的,如果我们打包包含的代码很多,为了功能的完整性,我们可能会要求核心代码不允许被覆盖,被混淆的代码通过某些工具还是可以改名的,比如把超长的名字改短,然后再覆盖代码,有很多手段能绕过,为了再增加一些难度,本文考虑使用RSA对称加密对混淆后的代码进行加密,不允许修改混淆后的类名,不允许修改文件内容。

使用hutool提供的RSA可以很简单的生成私钥和公钥,可以很方便的加解密,下面是示例代码:

RSA rsa = new RSA();
PrivateKey privateKey = rsa.getPrivateKey();
PublicKey publicKey = rsa.getPublicKey();
String home = System.getProperty("user.home");
String privateKeyPath = home + File.separator + ".yguard" + File.separator + "license-keys.pri";
String publicKeyPath = home + File.separator + ".yguard" + File.separator + "license-keys.pub";
if (!new File(privateKeyPath).exists()) {
    FileUtil.writeBytes(privateKey.getEncoded(), privateKeyPath);
    FileUtil.writeBytes(publicKey.getEncoded(), publicKeyPath);
    String publicKeyHex = HexUtil.encodeHexStr(publicKey.getEncoded());
    FileUtil.writeString(publicKeyHex, publicKeyPath + ".hex", StandardCharsets.UTF_8);
}

通过上面的代码将私钥和公钥生成到用户目录下面的 .yguard 目录中。

这里还将公钥生成了一个16进制字符串形式的文本,方便直接签入到解密程序中使用。

可以使用下面的方法进行加密和解密:

/**
  * 使用私钥加密
  */
 private static String encryptHex(String str) {
     String home = System.getProperty("user.home");
     String privateKeyPath = home + File.separator + ".yguard" + File.separator + "license-keys.pri";
     RSA rsa = new RSA(FileUtil.readBytes(privateKeyPath), null);
     byte[] bytes = rsa.encrypt(str, StandardCharsets.UTF_8, KeyType.PrivateKey);
     return HexUtil.encodeHexStr(bytes);
 }

 public static final String PUB_KEY = "****很长的公钥,使用上面生成后的内容替换****";

 /**
  * 使用公钥解密
  */
 private static String decryptStr(String str) {
     RSA rsa = new RSA(null, HexUtil.decodeHex(PUB_KEY));
     return rsa.decryptStr(str, KeyType.PublicKey, StandardCharsets.UTF_8);
 }

使用下面代码进行简单测试:

public static void main(String[] args) {
    String url = "https://mybatis.io";
    System.out.println("原始: " + url);
    String sign = encryptHex(url);
    System.out.println("加密: " + sign);
    String str = decryptStr(sign);
    System.out.println("解密: " + str);
}

输出内容如下:

原始: https://mybatis.io
加密: 8d13070b469768ea57cef0800ed9be4e3e6303ad10cbd308ed9d959ea4caace0d2c17b020af33bca563aa0f45e1b4e8a82bbc4ee67fbb80bc26f5da5c24865fb851ed5c4868631bde5f324213b77a432fa40a761412bb5ac3b380ea4f07496665369b9076bc2091f3707fe4b0c0e1a337394736085a2198f2ff82d3ba06eff19
解密: https://mybatis.io

有了这些工具后,我们就需要考虑如何在混淆后的代码上增加加密签名防止混淆了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1079858.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【eNSP】VLAN基础配置

一、基于接口划分VLAN(Access接口和Trunk接口) 1、创建VLAN LSW1 [LSW1]vlan batch 10 20 Info: This operation may take a few seconds. Please wait for a moment...done.LSW2 [LSW2]vlan batch 10 20 Info: This operation may take a few second…

女性必看——“黄体破裂”到底有多可怕?

前几天的亚运会上发生了这样一件事: 雅思敏(化名)是一名国外皮划艇运动员,在亚运会上奋力完成皮划艇比赛后,突然开始 剧烈腹痛、面色苍白,大汗淋漓,经过进一步检查,确诊卵巢黄体破裂…

三点式振荡器

相关说明 http://www.360doc.com/content/19/0527/16/61619294_838545271.shtml 高频信号发生器设计—电容三点式振荡电路_电容三点式振荡电路工作原理_北辰-尘的博客-CSDN博客 如上图所示,典型的Colpitts振荡电路。首先忽略所有的电阻,他们是用来设置…

Windows11与CentOS7.9 2009下安装配置nginx后启动整个项目

Nginx是一款高性能的开源Web服务器和反向代理服务器,被广泛用于构建现代化的Web应用和提供静态内容。 一、Windows11下安装配置nginx 1.1 下载 nginx官网 这里下载nginx-1.24.0-zip 下载完成后,解压到D:\develop\nginx-1.24.0,解压完成后在…

P1969 [NOIP2013 提高组] 积木大赛

思路&#xff1a; ACcode: #include<bits/stdc.h> using namespace std; #define int long long const int N1e510; int n,a[N],ans; void solve() {cin>>n;for(int i1;i<n;i)cin>>a[i];int ans0;for(int i1;i<n;i){if(a[i]>a[i-1]) ansa[i]-a[i-1…

C语言,序列中删除指定数字

题目考点&#xff1a;对continue的运用&#xff08;也可以用&#xff01;来实现&#xff09; 先创建一个数组&#xff0c;数组大小应该要根据题目要求&#xff0c;根据数据范围&#xff0c;要设立一个大小为50的数组。 接着用scanf输入n的值&#xff0c;再设一个循环&#xff…

学生台灯买什么样的好?双十一学生台灯推荐

不得不说光线会孩子的影响还是蛮大的&#xff0c;不仅会影响学习的效率&#xff0c;还会影响视力健康。很多家长认为孩子近视的主要原因是玩电子产品或者不良的坐姿、用眼习惯导致的&#xff0c;其实这些并不全是造成近视的因素&#xff0c;最主要的原因还是长时间的用眼导致的…

您这边是个人公众号还是企业公众号哈

公众号迁移有什么作用&#xff1f;只能变更主体吗&#xff1f;公众号迁移不只是可以实现公众号变更公司主体&#xff0c;还可以实现个人公众号变成企业公众号、服务号改成订阅号&#xff08;不过订阅号暂时不能改成服务号了&#xff0c;最新的规定&#xff09;&#xff0c;开通…

Spring源码解析——创建AOP代理之获取增强器

正文 在上一篇的博文中我们讲解了通过自定义配置完成了对AnnotationAwareAspectJAutoProxyCreator类型的自动注册&#xff0c;那么这个类到底做了什么工作来完成AOP的操作呢&#xff1f;首先我们看看AnnotationAwareAspectJAutoProxyCreator的层次结构&#xff0c;如下图所示&…

分类预测 | MATLAB实现KOA-CNN-BiGRU开普勒算法优化卷积双向门控循环单元数据分类预测

分类预测 | MATLAB实现KOA-CNN-BiGRU开普勒算法优化卷积双向门控循环单元数据分类预测 目录 分类预测 | MATLAB实现KOA-CNN-BiGRU开普勒算法优化卷积双向门控循环单元数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现KOA-CNN-BiGRU开普勒算法优化…

codesys【读写轴参数】

在SM3_Basic库内。 作用&#xff1a;读写实轴寄存器参数。【一般用于修改2000h段的值】 或者获取6041h的状态值。 ecat主站操作&#xff1a; 补偿间隙&#xff1a; 追剪&#xff1a; 凸轮&#xff1a; 读写轴参数&#xff1a;

史上最全 结构型模式之 桥接 外观 组合 享元模式

史上最全 结构型模式之 代理 适配器 装饰者 模式-CSDN博客 5.4 桥接模式 5.4.1 概述 现在有一个需求&#xff0c;需要创建不同的图形&#xff0c;并且每个图形都有可能会有不同的颜色。我们可以利用继承的方式来设计类的关系&#xff1a; 我们可以发现有很多的类&#xff0c;假…

idea中maven plugin提示not found

在终端中输入&#xff1a; mvn dependency:resolve 然后 解决了部分问题 Plugin org.apache.maven.plugins:maven-jar-plugin:3.1.0 not found 改为3.3.0了 Plugin maven-source-plugin:3.3.0 not found 改为 2.4 了 版本下降了 感觉后继有坑 待观察

Ubuntu安装QQ

原文网址&#xff1a;2023在Ubuntu安装最新版QQ Linux v3.1.0 - 哔哩哔哩 作者&#xff1a;sprlightning https://www.bilibili.com/read/cv22100663/ 出处&#xff1a;bilibili 2022年末QQ推出了QQ Linux v3.0系列&#xff0c;目前最新版是今年2月24日推出的v3.1.0版本。注意…

GLTF纹理贴图工具让模型更逼真

1、如何制作逼真的三维模型&#xff1f; 要使三维模型看起来更加逼真&#xff0c;可以考虑以下几个方面&#xff1a; 高质量纹理&#xff1a;使用高分辨率的纹理贴图可以增强模型的细节和真实感。选择适合模型的高质量纹理图像&#xff0c;并确保纹理映射到模型上的UV坐标正确…

[ROS2系列] ubuntu 20.04测试rtabmap

目录 背景&#xff1a; 一、配置 turtlebot3 二、安装RTAB-Map ROS2包&#xff1a; 三、启动 Turtlebot3 模拟器&#xff1a; 四、启动 RTAB 地图&#xff1a; 五、启动导航&#xff08;nav2_bringup应安装软件包&#xff09;&#xff1a; 背景&#xff1a; 1、设备&…

什么是企业远程访问

企业远程访问是一种安全策略&#xff0c;可为授权用户提供对本地网络之外的关键资源&#xff08;如服务器、数据库和应用程序&#xff09;的访问权限。企业不断发展&#xff0c;远程访问解决方案通过允许对关键端点的即时安全访问&#xff0c;帮助组织确保业务连续性并保持员工…

MySQL连接方式: Unix套接字 TCP/IP

今天连接mysql数据库使用mysql -u root -p指令的时候遇到了这个问题&#xff1a; 解决之后来总结一下mysql的连接方式 文章目录 1. Unix套接字&#xff08;或Windows命名管道&#xff09;特点&#xff1a;场景&#xff1a; 2. TCP/IP特点&#xff1a;场景&#xff1a; 3.对比总…

Linux系统管理:虚拟机Centos Stream 9安装

目录 一、理论 1.Centos Stream 9 二、实验 1.虚拟机Centos Stream 9安装准备阶段 2.安装Centos Stream 9 3.进入系统 一、理论 1.Centos Stream 9 (1) 简介 CentOS Stream 是一种 Linux 操作系统。安装此操作系统的难题在于&#xff0c;在安装此系统之前&#xff0c…