反编译破解机器码
反编译破解机器码
FANSEA反编译破解机器码
这里有个需求:
一个jar程序,需要登录账号密码验证,但是还需要机器码,所以在一些机器能登录,其他机器不能登录,这就可以让部署到公网的程序只让一部分规定的人访问,我想让其他机器也能访问,请问我该怎么做,请为我一些解决方案
当一个JAR程序通过账号密码和机器码验证来限制访问时,通常是为了增强安全性,确保只有指定的用户和机器可以访问。然而,如果你想要让该程序在其他机器上也能访问,你可以考虑以下几种方法:
移除或修改机器码验证:
- 如果你有程序的源代码,并且知道如何验证机器码,你可以直接移除或修改这部分代码。
- 如果不能修改源代码,但你有反编译工具(如JD-GUI),你可以尝试反编译JAR,修改相应的代码,然后重新编译。但请注意,这可能会违反软件的许可协议,并且可能会引入新的问题。
获取有效的机器码:
- 尝试理解机器码是如何生成的。它可能是基于硬件信息(如MAC地址、CPU序列号等)或软件信息(如操作系统版本、已安装软件列表等)生成的。
- 如果你可以模拟或生成这些条件,你就有可能生成一个有效的机器码。
与开发者或管理员协商:
- 如果这个程序是由第三方提供的,并且你有合法的使用权限,你可以联系开发者或管理员,请求他们为你生成或提供额外的机器码。
- 解释你的需求,并说明为什么需要让其他机器也能访问。
使用VPN或代理:
- 如果机器码验证是基于IP地址或地理位置的,你可以考虑使用VPN或代理服务器来伪装你的IP地址和位置。
- 这种方法可能不太可靠,因为开发者可能会检测到并使用更复杂的验证方法。
破解或绕过验证(不推荐):
- 这种方法涉及破解或绕过程序的验证机制,这是非法的,并且可能会导致法律问题。
- 除此之外,破解或绕过验证也可能会破坏程序的安全性,使你的系统面临风险。
寻找替代方案:
- 如果这个程序的功能可以通过其他方式实现(例如使用不同的软件或服务),你可以考虑寻找替代方案。
- 这样不仅可以避免与验证机制相关的问题,还可以为你提供更多的灵活性和选择。
部署私有云或内部网络:
- 如果你有足够的资源和权限,你可以考虑将程序部署到私有云或内部网络中。
- 在这种情况下,你可以控制哪些机器可以访问该程序,而无需依赖外部的机器码验证机制。
请注意,在尝试任何方法之前,请确保你了解相关的法律和道德责任,并遵守适用的法律和规定。
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程序修改更新
- 将jar程序解压出来,并把jar程序和解压文件夹放在同一个文件夹里面
- 修改
BOOT-INF
代码,单独将修改后的java文件编译成class
文件,并在target
文件夹里面找到文件,复制粘贴到BOOT-INF
文件夹中
- 执行更新操作
此时代码会更新到
XYIoT-admin-1.0.0.jar
中
1 | jar -uvf0 XYIoT-admin-1.0.0.jar BOOT-INF |
- 如果遇到报错
AccessDeniedException
1 | java.nio.file.AccessDeniedException: XYIoT-admin-1.0.0.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" |
已知机器码和解码工具,现在要做的就是:
方案一:(修改机器码)工具:机器码
- 登录逻辑中需要在数据库中查询许可证
- 只需要修改当前机器的机器码为白名单机器码!
方案二:(注入SQL:在数据库生成自己的许可证) 工具:解码工具
防反编译加密法
java项目jar包加密,防止反编译代码_jar包加密防止反编译-CSDN博客
- 将反编译后的截图对比为加密的截图
- 理清加密原理,并知晓
使用classfinal-maven-plugin插件
在需要加密的项目pom下加入插件
1 | <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包:
执行加密的jar文件
1 | java -javaagent:XYIoT-admin-1.0.0-encrypted.jar -jar XYIoT-admin-1.0.0-encrypted.jar |
此时需要输入pom配置的密码!
机器绑定
机器绑定只允许加密的项目在特定的机器上运行;
在需要绑定的机器上执行以下命令,生成机器码
1 | java -jar classfinal-fatjar.jar -C |
加密时用code指定机器码。机器绑定可同时支持机器码+密码的方式加密。
1 | <configuration> |