破解 DVT 25.1.8
前言
-
DVT IDE 作为 Eclipse 和 VSCode 的插件,有 DVT Eclipse 和 DVT VSCode 两类。
-
DVT Eclipse 25.1.8 有 Linux x64、Linux arm64、macOS arm64 以及 Windows x64等版本
- 解压 DVT Eclipse 的 zip 安装包,得到dvt_eclipse文件夹
- 将DVT_HOME环境变量设置为解压后的dvt_eclipse目录
- 在 Linux 平台,运行$DVT_HOME/bin/dvt.sh打开DVT Eclipse
- 在 Windows 平台,运行$DVT_HOME/bin/dvt.bat打开DVT Eclipse

- DVT VSCode 可直接从 VSCode 的插件市场安装
破解
-
破解 DVT IDE 主要分为两个步骤:
- 破解ro.amiq.dvt.flclient-2.21.jar文件
- 将DVT_LICENSE_FILE环境变量设置为dvt.lic文件的路径(dvt.lic内容见附录)
-
对于 DVT Eclipse
- ro.amiq.dvt.flclient-2.21.jar文件存在以下两个目录,只需破解其中一个,并将破解后的ro.amiq.dvt.flclient-2.21.jar放入相应的目录即可。
- 破解之前,应该先运行dvt.sh,将第二个目录的ro.amiq.dvt.flclient-2.21.jar释放出来。
- 由于第二个目录的ro.amiq.dvt.flclient-2.21.jar位置不固定,故可使用命令find $DEV_HOME -name ro.amiq.dvt.flclient-2.21.jar进行查找。
- 文件路径
- dvt_eclipse/batch/libs/ro.amiq.dvt.flclient-2.21.jar
- dvt_eclipse/eclipse/configuration/org.eclipse.osgi/304/0/.cp/libs/ro.amiq.dvt.flclient-2.21.jar
-
对于 DVT VSCode
- ro.amiq.dvt.flclient-2.21.jar文件存在一个位置,只需将破解的ro.amiq.dvt.flclient-2.21.jar替换原来的文件即可。
- 文件路径
- ~/.vscode-server/extensions/amiq.dvt-25.1.8-linux-x64/dvt_home/common/batch/libs/ro.amiq.dvt.flclient-2.21.jar
附录
-
dvt.lic文件的内容
FEATURE dvt_core dvtlmd 2099.99 29-aug-2119 uncounted \ 11111111111111111111 HOSTID=ANY SIGN2=111111111111 FEATURE dvt_cpp_ext dvtlmd 2099.99 29-aug-2119 uncounted \ 11111111111111111111 HOSTID=ANY SIGN2=111111111111 FEATURE dvt_sv dvtlmd 2099.99 29-aug-2119 uncounted \ 11111111111111111111 HOSTID=ANY SIGN2=111111111111 FEATURE dvt_sv_batch dvtlmd 2099.99 29-aug-2119 uncounted \ 11111111111111111111 HOSTID=ANY SIGN2=111111111111 FEATURE dvt_sv_debug dvtlmd 2099.99 29-aug-2119 uncounted \ 11111111111111111111 HOSTID=ANY SIGN2=111111111111 FEATURE dvt_sv_lint dvtlmd 2099.99 29-aug-2119 uncounted \ 11111111111111111111 HOSTID=ANY SIGN2=111111111111 FEATURE dvt_sv_specador dvtlmd 2099.99 29-aug-2119 uncounted \ 11111111111111111111 HOSTID=ANY SIGN2=111111111111 FEATURE dvt_vhdl dvtlmd 2099.99 29-aug-2119 uncounted \ 11111111111111111111 HOSTID=ANY SIGN2=111111111111 FEATURE dvt_vhdl_debug dvtlmd 2099.99 29-aug-2119 uncounted \ 11111111111111111111 HOSTID=ANY SIGN2=111111111111 FEATURE dvt_vhdl_lint dvtlmd 2099.99 29-aug-2119 uncounted \ 11111111111111111111 HOSTID=ANY SIGN2=111111111111 FEATURE dvt_vhdl_specador dvtlmd 2099.99 29-aug-2119 uncounted \ 11111111111111111111 HOSTID=ANY SIGN2=111111111111 FEATURE dvt_e dvtlmd 2099.99 29-aug-2119 uncounted \ 11111111111111111111 HOSTID=ANY SIGN2=111111111111 FEATURE dvt_e_batch dvtlmd 2099.99 29-aug-2119 uncounted \ 11111111111111111111 HOSTID=ANY SIGN2=111111111111 FEATURE dvt_e_debug dvtlmd 2099.99 29-aug-2119 uncounted \ 11111111111111111111 HOSTID=ANY SIGN2=111111111111 FEATURE dvt_e_specador dvtlmd 2099.99 29-aug-2119 uncounted \ 11111111111111111111 HOSTID=ANY SIGN2=111111111111 FEATURE dvt_pss dvtlmd 2099.99 29-aug-2119 uncounted \ 11111111111111111111 HOSTID=ANY SIGN2=111111111111 FEATURE dvt_pass_lint dvtlmd 2099.99 29-aug-2119 uncounted \ 11111111111111111111 HOSTID=ANY SIGN2=111111111111 FEATURE dvt_sln dvtlmd 2099.99 29-aug-2119 uncounted \ 11111111111111111111 HOSTID=ANY SIGN2=111111111111 FEATURE dvt_sdl dvtlmd 2099.99 29-aug-2119 uncounted \ 11111111111111111111 HOSTID=ANY SIGN2=111111111111 -
破解ro.amiq.dvt.flclient-2.21.jar
-
下载RecafJava字节码编辑器(Java bytecode editor)
- 从https://github.com/Col-E/Recaf/releases下载recaf-2.21.14-J8-jar-with-dependencies.jar
-
运行Recaf并加载ro.amiq.dvt.flclient-2.21.jar
- 使用命令java -jar ./recaf-2.21.14-J8-jar-with-dependencies.jar打开Recaf
- 依次点击File->Load,加载ro.amiq.dvt.flclient-2.21.jar
-
定位目标代码
- 依次点击Search->Values,使用-515、-514等值确定要修改的文件
- 展开搜索到的函数,右击函数并点击"Goto definition"
- 若代码如下所示,则为目标代码(目标函数public static boolean a(byte[] byArray, byte[] byArray2, k object, int n))
// Decompiled with: CFR 0.152 // Class Version: 8 package com.a.a.e; import com.a.a.a.s; import com.a.a.b; import com.a.a.e; import com.a.a.g; import com.a.a.k; import com.certicom.ecc.jcae.Certicom; import com.certicom.ecc.scheme.ECDSA; import com.certicom.ecc.system.SystemConfig; import com.certicom.ecc.util.Conversion; import java.security.InvalidKeyException; import java.security.KeyFactory; import java.security.NoSuchAlgorithmException; import java.security.NoSuchProviderException; import java.security.Provider; import java.security.PublicKey; import java.security.Security; import java.security.Signature; import java.security.SignatureException; import java.security.spec.InvalidKeySpecException; import java.security.spec.KeySpec; import java.security.spec.X509EncodedKeySpec; import javax.security.spec.ECParameterSpec; import javax.security.spec.ECRawPublicKeySpec; import javax.security.spec.F2mParameterSpec; /* * Duplicate member names - consider using --renamedupmembers true */ public class l implements g { private static String a; public static boolean a(byte[] byArray, byte[] byArray2, k object, int n) { boolean bl; Object object2; Object object3; System.setProperty("JDK_1_3_Compatibility", "YES"); if (a != null) { object3 = a; } else { object2 = new Certicom(); Security.addProvider((Provider)object2); object3 = object2 = (a = ((Provider)object2).getName()); } if (object3 == null) { throw new b(-514, 4026); } Object object4 = SystemConfig.getConfig(); ((SystemConfig)object4).setConformance(16); ((SystemConfig)object4).setPtCompression(2); ((SystemConfig)object4).setFormat(10); switch (n) { case 2: { break; } case 3: { ((SystemConfig)object4).setCurve("sect163k1"); break; } case 4: { ((SystemConfig)object4).setCurve("sect239k1"); break; } default: { throw new b(-515, 4027); } } object = ((k)object).a(n); if (object == null) { throw new b(-515, 4028); } object = object.getEncoded(); try { object4 = KeyFactory.getInstance("ECDSA"); if (n == 2) { ECDSA.setThreadOldHashTruncate(true); Object object5 = new int[]{9}; String string = "1.3.132.0.4"; object5 = new F2mParameterSpec(Conversion.HexString2OS("3088250ca6e7c7fe649ce85820f7"), Conversion.HexString2OS("e8bee4d3e2260744188be0e9c723"), Conversion.HexString2OS("10e723ab14d696e6768756151756febf8fcb49a9"), Conversion.HexString2OS("9d73616f35f4ab1407d73562c10f"), Conversion.HexString2OS("a52830277958ee84d1315ed31886"), Conversion.HexString2OS("100000000000000d9ccec8a39e56f"), 2, 113, (int[])object5, string); object = new ECRawPublicKeySpec((byte[])object, (ECParameterSpec)object5); object = ((KeyFactory)object4).generatePublic((KeySpec)object); } else { object = new X509EncodedKeySpec((byte[])object); object = ((KeyFactory)object4).generatePublic((KeySpec)object); } Signature signature = Signature.getInstance("ECDSA", (String)object2); signature.initVerify((PublicKey)object); signature.update(byArray); bl = signature.verify(byArray2); } catch (NoSuchAlgorithmException noSuchAlgorithmException) { throw new b(-515, 4029); } catch (InvalidKeySpecException invalidKeySpecException) { throw new b(-515, 4030); } catch (InvalidKeyException invalidKeyException) { throw new b(-515, 4031); } catch (NoSuchProviderException noSuchProviderException) { throw new b(-515, 4032); } catch (SignatureException signatureException) { throw new b(-515, 4033); } finally { Security.removeProvider(a); a = null; } return bl; } @Override public String a() { return System.getProperty("user.name"); } @Override public String b() { return s.f(); } @Override public String c() { return "JavaDisplay"; } @Override public int a() { return 255; } @Override public void a(e e2) { } }
-
反编译目标函数
- 在目标函数区域右键选择Edit with assembler
- 在弹出窗口的汇编代码开头添加如下指令,并Ctrl+S保存文件
ICONST_1 IRETURN - 再次回到目标代码,其文件内容变为
// Decompiled with: CFR 0.152 // Class Version: 8 package com.a.a.e; import com.a.a.a.s; import com.a.a.e; import com.a.a.g; import com.a.a.k; /* * Duplicate member names - consider using --renamedupmembers true */ public class l implements g { private static String a; public static boolean a(byte[] byArray, byte[] byArray2, k k2, int n) { return true; } @Override public String a() { return System.getProperty("user.name"); } @Override public String b() { return s.f(); } @Override public String c() { return "JavaDisplay"; } @Override public int a() { return 255; } @Override public void a(e e2) { } }
- 在目标函数区域右键选择Edit with assembler
-
导出jar文件
- 依次点击File->Export program,即可导出jar文件
-






浙公网安备 33010602011771号