Java Awesome
约 3 分钟阅读
标签:资源精选
- 反编译/解密
- mstrobel/procyonGitHubmstrobel/procyon
- CFR another java decompiler
- Fernflower JetBrains/intellij-community/plugins/java-decompiler/engineGitHub FileJetBrains/intellij-community/plugins/java-decompiler/engine
- Apache-2.0
- by IDEA
- mirror fesh0r/fernflowerGitHubfesh0r/fernflower
- java-deobfuscator/deobfuscatorGitHubjava-deobfuscator/deobfuscator
- Apache-2.0
- JD-GUI java-decompiler/jd-guiGitHubjava-decompiler/jd-gui
- 加密/混淆
- core-lib/xjarGitHubcore-lib/xjar
- Apache-2.0, Java
- roseboy/classfinalGitHubroseboy/classfinalClassFinal 是一款java class文件安全加密工具,支持直接加密jar包或war包,无需修改任何项目代码,兼容spring-framework;可避免源码泄漏或字节码被反编译。 · 要点 · 拿到 password · 可能内置了故事:解密 ClassFinal 加密的 Java Jar 包
- Apache-2.0, Java
- Java Class Encryption Tool
- 基于 -agentJava.jar
- 原始的class文件并不会完全被加密,只是方法体被清空,保留方法参数、注解等信息,这是为了兼容spring,swagger等扫描注解的框架; 方法体被清空后,反编译者只能看到方法名和注解,看不到方法的具体内容;当class被classloader加载时,真正的方法体会被解密注入。
- gitee
java -javaagent:yourpaoject-encrypted.jar='-pwd 0000000' -jar yourpaoject-encrypted.jar- 为了保证项目在运行时的安全,启动jvm时请加参数: -XX:+DisableAttachMechanism
- roseboy/classfinal/classfinal-core/src/main/java/net/roseboy/classfinal/JarDecryptor.javaGitHub Fileroseboy/classfinal/classfinal-core/src/main/java/net/roseboy/classfinal/JarDecryptor.java
- 默认密码 org.springframework.config.Pass
- 机器码 org.springframework.config.Code
- 密码的 Hash org.springframework.config.PassHash
- META-INF/.classes/
- net.roseboy.classfinal.CoreAgent
- core-lib/xjarGitHubcore-lib/xjar
import net.roseboy.classfinal.JarDecryptor;
import net.roseboy.classfinal.util.EncryptUtils;
import net.roseboy.classfinal.util.StrUtils;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
public class DecryptClassFinal {
public static void main(String[] args) throws IOException {
String src =System.getProperty("user.dir") + "/tmp/META-INF/.classes";
String dst = System.getProperty("user.dir") + "/src/main/class";
File srcDir = new File(src);
JarDecryptor.getInstance();
String pass = Files.readString(Path.of(src+"/org.springframework.config.Pass"));
char[] password = EncryptUtils.md5(pass.toCharArray());
System.out.printf("src:%s\n", src);
System.out.printf("dst:%s\n", dst);
System.out.printf("password:%s\n", pass);
if (srcDir.isDirectory()) {
for (File file : srcDir.listFiles()) {
String fp = file.getName();
if (fp.startsWith("org.springframework")) {
continue;
}
byte[] fileBytes = Files.readAllBytes(file.toPath());
byte[] out = dec(password, fp, fileBytes);
String[] split = fp.split("[.]");
String fn = split[split.length-1];
String p = dst+"/"+ fp.substring(0, fp.lastIndexOf('.')).replaceAll("[.]", "/");
new File(p).mkdirs();
String f = p+"/"+ fn +".class";
System.out.println("Write to: "+f+" Len:"+out.length);
Files.write(new File(f).toPath(), out);
}
}
}
public static byte[] dec(char[] password, String fileName, byte[] bytes){
char[] pass;
pass = StrUtils.merger(new char[][]{password, fileName.toCharArray()});
return EncryptUtils.de(bytes, pass, 1);
}
}java -cp ~/Applications/IntelliJ\ IDEA\ Ultimate.app/Contents/plugins/java-decompiler/lib/java-decompiler.jar \
org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler \
-dgs=true \
src/main/class/ src/main/java/JDK
如何选择 JDK 和 版本?
- 用 Adoptium
- 只用 LTS 版本
- 发行版
- Adoptium
- AdoptOpenJDK -> Adoptium
- Eclipse 维护
- Eclipse Temurin - name of the OpenJDK distribution from Adoptium
- Amazon Corretto
- Alibaba Dragonwell
- GraalVM
- Java.net
- Zulu
- Liberica
- Liberica NIK
- Microsoft
- Oracle
- Mandrel
- SapMachine
- Semeru
- Trava
- Adoptium
- JVM 实现
- Hotpot
- OpenJ9
- GraalVM
- SubstrateVMGitHub Fileoracle/graal/substratevm
- GraalVM Native
- whichjdk
- Version Manager
- sdkman.io
- sdkman/sdkman-cliGitHubsdkman/sdkman-clisdkman/sdkman-cli · SDKMANDIR=/.sdkman · /candidates/java/17.0.6-tem · /tmp · java-17.0.6-tem.bin - 可手动下载 · visualvm-2.0.2.bin笔记:sdkman
- shell
- sdkman/sdkman-cliGitHubsdkman/sdkman-clisdkman/sdkman-cli · SDKMANDIR=/.sdkman · /candidates/java/17.0.6-tem · /tmp · java-17.0.6-tem.bin - 可手动下载 · visualvm-2.0.2.bin笔记:sdkman
- jenv/jenvGitHubjenv/jenv
- shell
- shyiko/jabbaGitHubshyiko/jabba
- golang
- sdkman.io
Languages
- kotlin
- graalvm
- javacc笔记JavaCCJavaCC - The Java Parser Generator · javacc/javacc · 默认 LL(1) 可 LL(k) · - · 生成的代码没有运行时依赖 · grammar repository打开:/notes/languages/parser/javacc
- antlr
效率
- lombok
Frameworks
- spring
- microprofile
- quakus
- OpenLiberty/open-libertyGitHubOpenLiberty/open-liberty
- IBM
- oracle/helidonGitHuboracle/helidon
- microservices
- micronaut
- vertx
- Sprint Cloud Vendor
- Sprint Cloud Alibaba
- Sprint Cloud GCP
- Sprint Cloud Netflix
- Sprint Cloud AWS
- Sprint Cloud Azure
- Sprint Cloud Huawei
- 国产
- nutzam/nutzGitHubnutzam/nutz
整合
- jhipster
- jeecgboot/jeecg-bootGitHubjeecgboot/jeecg-boot
- elunez/eladminGitHubelunez/eladmin
Database
IoC
- guice笔记Guicegoogle/guice打开:/notes/java/lib/guice
- dapper
Library
- Core
- apache commons
- dromara/hutoolGitHubdromara/hutool
- oblac/joddGitHuboblac/jodd
- ⚠️ 不活跃
- Lambda
- Reflection
- DTO/Convert
- mapstruct/mapstructGitHubmapstruct/mapstruct
- 对象互转 - 基于反射
- mapstruct/mapstructGitHubmapstruct/mapstruct
- Doc/Meta
- springdoc笔记Spring Docspringdoc/springdoc-openapi · OpenAPI 3 · JSR-303 · SpringBoot v1,v2,v3 · 支持 GraalVM · 支持 Javadoc, Groovy, Kotlin · Javadoc dnault/therapi-runtime-javadoc打开:/notes/java/lib/springdoc
- OpenAPI 3
- JSR-303
- SpringBoot v1,v2,v3
- 支持 GraalVM
- springfox/springfoxGitHubspringfox/springfox
- ⚠️ 停止维护,不支持 SpringBoot 3.0
- 使用注解
- springdoc笔记Spring Docspringdoc/springdoc-openapi · OpenAPI 3 · JSR-303 · SpringBoot v1,v2,v3 · 支持 GraalVM · 支持 Javadoc, Groovy, Kotlin · Javadoc dnault/therapi-runtime-javadoc打开:/notes/java/lib/springdoc
- HTML/Dom
- javersGitHubjavers/javers
- object auditing and diff framework for Java
- @Audited
- @javax.persistence.OrderColumn
- @CollectionId
- AuditJoinTable
- AuditMappedBy
Tool Chain
- maven笔记MavenMaven 包类型 · pom - Project Object Model · jar - Java Application Archive · ear - Enterprise Application Archive · war - Web Application Archive打开:/notes/java/build/maven
- gradle笔记GradleUserguide · Building Java 9 Modules · maven 2 gradle · 转换 dependency · https://gradle.org/releases/ · gradle.properties · | env | default | for |打开:/notes/java/build/gradle
- jib笔记jibGoogleContainerTools/jib · tar · docker 要先 load 才能 push · crane 可以直接 push · credential helpers · $XDGRUNTIMEDIR/containers/auth.json打开:/notes/java/build/jib
Learn
GUI
- JetBrains/compose-jbGitHubJetBrains/compose-jb
- Compose for Desktop
Misc
- apple/GCGCGitHubapple/GCGC
- GC 日志分析
Spec
Debugging
- runsidekick/sidekickGitHubrunsidekick/sidekick
- AGPL-3.0, Java
- Like chrome dev tools but for your backend
Template
- Apache FreeMarker
- Apache Velocity
- Thymeleaf
- Apache Tiles
- Web APP
- Mustache.java
- Groovy
- jsp
- antlr/stringtemplate4GitHubantlr/stringtemplate4
QA
- Checkstyle, PMD, JDepend
- Platform
- Hudson
- Jenkins
- SonarQube
- Squale
- XRadar
- maven.apache.org/code-quality-management.html
关联信息
反向链接、本文链接的其他页面和外部资料。
站内链接
- Gradle笔记 · gradle
Userguide · Building Java 9 Modules · maven 2 gradle · 转换 dependency · https://gradle.org/releases/ · gradle.properties · | env | default | for |
- Guice笔记 · guice
google/guice
- JavaCC笔记 · javacc
JavaCC - The Java Parser Generator · javacc/javacc · 默认 LL(1) 可 LL(k) · - · 生成的代码没有运行时依赖 · grammar repository
- jib笔记 · jib
GoogleContainerTools/jib · tar · docker 要先 load 才能 push · crane 可以直接 push · credential helpers · $XDGRUNTIMEDIR/containers/auth.json
- Maven笔记 · maven
Maven 包类型 · pom - Project Object Model · jar - Java Application Archive · ear - Enterprise Application Archive · war - Web Application Archive
- Spring Doc笔记 · springdoc
springdoc/springdoc-openapi · OpenAPI 3 · JSR-303 · SpringBoot v1,v2,v3 · 支持 GraalVM · 支持 Javadoc, Groovy, Kotlin · Javadoc dnault/therapi-runtime-javadoc
References
GitHub32 条
- antlr/stringtemplate4github.com/antlr/stringtemplate4
- apple/GCGCgithub.com/apple/GCGC
- core-lib/xjargithub.com/core-lib/xjar
- dromara/hutoolgithub.com/dromara/hutool
- ebarlas/project-loom-comparisongithub.com/ebarlas/project-loom-comparison
- elunez/eladmingithub.com/elunez/eladmin
- fesh0r/fernflowergithub.com/fesh0r/fernflower
- java-decompiler/jd-guigithub.com/java-decompiler/jd-gui
- java-deobfuscator/deobfuscatorgithub.com/java-deobfuscator/deobfuscator
- javers/javersgithub.com/javers/javers
- jeecgboot/jeecg-bootgithub.com/jeecgboot/jeecg-boot
- jenv/jenvgithub.com/jenv/jenv
- JetBrains/compose-jbgithub.com/JetBrains/compose-jb
- JetBrains/intellij-community/plugins/java-decompiler/enginegithub.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine
- jOOQ/jOOLgithub.com/jOOQ/jOOL
- jOOQ/jOOQgithub.com/jOOQ/jOOQ
- jOOQ/jOORgithub.com/jOOQ/jOOR
- jOOQ/jOOXgithub.com/jOOQ/jOOX
- mapstruct/mapstructgithub.com/mapstruct/mapstruct
- mstrobel/procyongithub.com/mstrobel/procyon
- nutzam/nutzgithub.com/nutzam/nutz
- oblac/joddgithub.com/oblac/jodd
- OpenLiberty/open-libertygithub.com/OpenLiberty/open-liberty
- oracle/graal/substratevmgithub.com/oracle/graal/tree/master/substratevm
- oracle/helidongithub.com/oracle/helidon
- roseboy/classfinalgithub.com/roseboy/classfinal
- roseboy/classfinal/classfinal-core/src/main/java/net/roseboy/classfinal/JarDecryptor.javagithub.com/roseboy/classfinal/blob/master/classfinal-core/src/main/java/net/roseboy/classfinal/JarDecryptor.java
- runsidekick/sidekickgithub.com/runsidekick/sidekick
- sdkman/sdkman-cligithub.com/sdkman/sdkman-cli
- shyiko/jabbagithub.com/shyiko/jabba
- Snailclimb/JavaGuidegithub.com/Snailclimb/JavaGuide
- springfox/springfoxgithub.com/springfox/springfox
其他外链9 条
- adoptium.netadoptium.net/
- docs.sonarqube.org/latest/analyzing-source-code/scanners/jenkins-extension-sonarqubedocs.sonarqube.org/latest/analyzing-source-code/scanners/jenkins-extension-sonarqube
- gitee.com/roseboy/classfinalgitee.com/roseboy/classfinal
- jd.benow.cajd.benow.ca/
- maven.apache.org/code-quality-management.htmlmaven.apache.org/code-quality-management.html
- sdkman.iosdkman.io/
- whichjdk.comwhichjdk.com/
- www.benf.org/other/cfrwww.benf.org/other/cfr
- www.pentalog.com/blog/it-development-technology/java-versions-distributions-platformswww.pentalog.com/blog/it-development-technology/java-versions-distributions-platforms