反编译破解机器码

反编译破解机器码

这里有个需求:

一个jar程序,需要登录账号密码验证,但是还需要机器码,所以在一些机器能登录,其他机器不能登录,这就可以让部署到公网的程序只让一部分规定的人访问,我想让其他机器也能访问,请问我该怎么做,请为我一些解决方案

当一个JAR程序通过账号密码和机器码验证来限制访问时,通常是为了增强安全性,确保只有指定的用户和机器可以访问。然而,如果你想要让该程序在其他机器上也能访问,你可以考虑以下几种方法:

  1. 移除或修改机器码验证

    • 如果你有程序的源代码,并且知道如何验证机器码,你可以直接移除或修改这部分代码。
    • 如果不能修改源代码,但你有反编译工具(如JD-GUI),你可以尝试反编译JAR,修改相应的代码,然后重新编译。但请注意,这可能会违反软件的许可协议,并且可能会引入新的问题。
  2. 获取有效的机器码

    • 尝试理解机器码是如何生成的。它可能是基于硬件信息(如MAC地址、CPU序列号等)或软件信息(如操作系统版本、已安装软件列表等)生成的。
    • 如果你可以模拟或生成这些条件,你就有可能生成一个有效的机器码。
  3. 与开发者或管理员协商

    • 如果这个程序是由第三方提供的,并且你有合法的使用权限,你可以联系开发者或管理员,请求他们为你生成或提供额外的机器码。
    • 解释你的需求,并说明为什么需要让其他机器也能访问。
  4. 使用VPN或代理

    • 如果机器码验证是基于IP地址或地理位置的,你可以考虑使用VPN或代理服务器来伪装你的IP地址和位置。
    • 这种方法可能不太可靠,因为开发者可能会检测到并使用更复杂的验证方法。
  5. 破解或绕过验证(不推荐):

    • 这种方法涉及破解或绕过程序的验证机制,这是非法的,并且可能会导致法律问题。
    • 除此之外,破解或绕过验证也可能会破坏程序的安全性,使你的系统面临风险。
  6. 寻找替代方案

    • 如果这个程序的功能可以通过其他方式实现(例如使用不同的软件或服务),你可以考虑寻找替代方案。
    • 这样不仅可以避免与验证机制相关的问题,还可以为你提供更多的灵活性和选择。
  7. 部署私有云或内部网络

    • 如果你有足够的资源和权限,你可以考虑将程序部署到私有云或内部网络中。
    • 在这种情况下,你可以控制哪些机器可以访问该程序,而无需依赖外部的机器码验证机制。

请注意,在尝试任何方法之前,请确保你了解相关的法律和道德责任,并遵守适用的法律和规定。

Java Decompiler插件反编译jar

1
java -cp "C:\Program Files\JetBrains\IntelliJ IDEA 2023.2.4\plugins\java-decompiler\lib\java-decompiler.jar" org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler -dgs=true D:\code\XYIoT-admin-1.0.0\XYIoT-admin-1.0.0.jar "D:\code\XYIoT-admin-1.0.0\code"

jar程序修改更新

  1. 将jar程序解压出来,并把jar程序和解压文件夹放在同一个文件夹里面

image-20240509125616010

  1. 修改BOOT-INF代码,单独将修改后的java文件编译成class文件,并在target文件夹里面找到文件,复制粘贴到BOOT-INF文件夹中

image-20240509125844773

image-20240509125927980

  1. 执行更新操作

此时代码会更新到XYIoT-admin-1.0.0.jar

1
jar -uvf0 XYIoT-admin-1.0.0.jar BOOT-INF
  1. 如果遇到报错AccessDeniedException
1
2
3
java.nio.file.AccessDeniedException: XYIoT-admin-1.0.0.jar
at java.base/sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:89)
at java.base/sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:103)

修改文件权限:

image-20240509130524177

  1. 查看是否更新成功

将文件反编译查看对应代码是否变动

1
java -cp "C:\Program Files\JetBrains\IntelliJ IDEA 2023.2.4\plugins\java-decompiler\lib\java-decompiler.jar" org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler -dgs=true D:\code\XYIoT-admin-1.0.0\XYIoT-admin-1.0.0.jar "D:\code\XYIoT-admin-1.0.0\code"

已知机器码解码工具,现在要做的就是:

方案一:(修改机器码)工具:机器码

  1. 登录逻辑中需要在数据库中查询许可证
  2. 只需要修改当前机器的机器码为白名单机器码!

方案二:(注入SQL:在数据库生成自己的许可证) 工具:解码工具

防反编译加密法

java项目jar包加密,防止反编译代码_jar包加密防止反编译-CSDN博客

  1. 将反编译后的截图对比为加密的截图
  2. 理清加密原理,并知晓

使用classfinal-maven-plugin插件

在需要加密的项目pom下加入插件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<plugin>
<!-- https://gitee.com/roseboy/classfinal -->
<groupId>net.roseboy</groupId>
<artifactId>classfinal-maven-plugin</artifactId>
<version>1.2.1</version>
<configuration>
<password>123456</password><!--加密打包之后pom.xml会被删除,不用担心在jar包里找到此密码-->
<packages>com.xinye.iot</packages>
<cfgfiles>application.yml,application-dev.yml,application-local.yml,application-pro.yml</cfgfiles>
<!-- <excludes>org.spring</excludes>-->
<libjars>XYIoT-common.jar,XYIoT-system.jar,XYIoT-framework.jar</libjars>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>classFinal</goal>
</goals>
</execution>
</executions>
</plugin>

参数说明:

1
2
3
4
5
6
7
8
9
10
参数说明
-file 加密的jar/war完整路径
-packages 加密的包名(可为空,多个用","分割)
-libjars jar/war包lib下要加密jar文件名(可为空,多个用","分割)
-cfgfiles 需要加密的配置文件,一般是classes目录下的yml或properties文件(可为空,多个用","分割)
-exclude 排除的类名(可为空,多个用","分割)
-classpath 外部依赖的jar目录,例如/tomcat/lib(可为空,多个用","分割)
-pwd 加密密码,如果是#号,则使用无密码模式加密
-code 机器码,在绑定的机器生成,加密后只可在此机器上运行
-Y 无需确认,不加此参数会提示确认以上信息

执行mvn clean将会的到加密的jar包:

image-20240516110812467

执行加密的jar文件

1
java -javaagent:XYIoT-admin-1.0.0-encrypted.jar -jar XYIoT-admin-1.0.0-encrypted.jar

image-20240516111136175

此时需要输入pom配置的密码!

机器绑定

机器绑定只允许加密的项目在特定的机器上运行;

在需要绑定的机器上执行以下命令,生成机器码

1
java -jar classfinal-fatjar.jar -C

img

加密时用code指定机器码。机器绑定可同时支持机器码+密码的方式加密。

1
2
3
4
5
6
7
<configuration>
<password>123456</password>
<packages>com.xinye.iot</packages>
<cfgfiles>application.yml</cfgfiles>
<libjars>XYIoT-common.jar</libjars>
<code>810D3E96F20FB9C16B872FD5B92567F3D41D8CD98F00B204E9800998ECF8427ED41D8CD98F00B204E9800998ECF8427E</code>
</configuration>