
Java 소스 코드를 난독화하여 리버스 엔지니어링, 디컴파일 및 지적 재산권 도용으로부터 보호합니다. 변수/메서드 이름을 변경하고, 문자열을 암호화하며, 제어 흐름을 난독화합니다.
JObfuscator는 Java 프로그래밍 언어용 소스 코드 난독화 도구입니다. 해킹, 크래킹, 리버스 엔지니어링, 디컴파일 및 기술 도용으로부터 Java 소스 코드와 알고리즘을 보호할 수 있습니다.
JObfuscator는 다양한 난독화 기법을 사용하여 Java 소스 코드의 실제 기능을 보호하고 은닉합니다.
모든 변수와 메서드 이름을 변경하고, 코드 흐름을 비선형적으로 만들어 난독화하며, 최첨단 다형성 문자열 암호화 엔진으로 모든 문자열을 암호화합니다.
더 자세한 기술 정보, 다운로드 및 문서는 다음에서 확인할 수 있습니다:
https://www.pelock.com/products/jobfuscator

Windows 및 Linux(Mono 필요)에서 사용할 수 있습니다:
https://www.pelock.com/products/jobfuscator/download
다양한 프로그래밍 API 제공:
https://www.pelock.com/products/jobfuscator/api
온라인 난독화 인터페이스:
https://www.pelock.com/jobfuscator/
Java로 작성되어 JAR, WAR 또는 CLASS 형식으로 컴파일된 애플리케이션은 디컴파일에 취약합니다.
컴파일된 코드를 거의 완벽하게 Java 소스로 재구성할 수 있는 여러 디컴파일러가 있습니다.
문제는 컴파일된 Java 코드가 네이티브 CPU 코드(예: x86 또는 x86-64)와 달리 JVM용 소위 바이트코드로 작성된다는 점입니다.
이러한 코드 형태는 완벽하게 문서화되어 있을 뿐만 아니라, 고수준 Java 소스 코드에서 원래 명령어를 매우 정확하게 재현할 수 있게 해줍니다.
다음 예시를 살펴보세요:

이것은 디컴파일된 Java 코드입니다! 모든 변수, 속성 및 메서드 이름이 읽을 수 있습니다. 디컴파일된 전체 프로젝트를 탐색하며 한 클래스에서 다른 클래스로 쉽게 이동할 수도 있습니다.
놀라셨나요? 경쟁사, 해커, 크래커 또는 다른 누군가가 분석하는 것이 바로 여러분의 소프트웨어일 수 있습니다.
그들은 이 코드로 무엇을 할 수 있을까요? 대부분의 경우 소프트웨어나 그 알고리즘은 경쟁 제품에 도용되거나 복제됩니다.
다른 경우에는 소프트웨어가 크래킹되어 디컴파일된 소스 코드에서 명확하게 보이는 라이선스 검사가 패치되거나, 크래킹된 전체 소프트웨어가 재컴파일되어 불법 사이트에 게시되기도 합니다.
난독화는 Java 소스 코드를 보호된 버전으로 변환하는 과정입니다.
기능은 변경되지 않고 모든 것이 동일하게 작동하지만, 소스 코드와 최종 컴파일된 바이트코드는 디컴파일 이후에도 리버스 엔지니어링 분석으로부터 보호됩니다.
import java.util.; import java.lang.; import java.io.*;
// // you must include a custom annotation // to enable the entire class or a single // method obfuscation // @Obfuscate class Ideone { //@Obfuscate public static double calculateSD(double numArray[]) { double sum = 0.0, standardDeviation = 0.0; int length = numArray.length;
for(double num : numArray) {
sum += num;
}
double mean = sum/length;
for(double num: numArray) {
standardDeviation += Math.pow(num - mean, 2);
}
return Math.sqrt(standardDeviation/length);
}
//
// selective obfuscation strategies
// can be applied for the entire
// class or a single method (by
// default all obfuscation strategies
// are enabled when you use @Obfuscate
// annotation alone)
//
//@Obfuscate(
// array_int_crypt = true,
// array_char_crypt = true,
// array_double_crypt = true,
// array_string_crypt = true,
// split_strings = true,
// crypt_strings = true,
// rename_methods = false,
// shuffle_methods = true,
// ints_math_crypt = true,
// dbls_math_crypt = true,
// rename_variables = true,
// mix_code_flow = true,
// string_char_vault = true,
// ints_from_double_math = true,
// opaque_mixer_chain = true,
// complexify_booleans = true,
// try_finally_noise = true,
// ints_to_arrays = true,
// dbls_to_arrays = true
// )
public static void main(String[] args) {
double[] numArray = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
double SD = calculateSD(numArray);
System.out.format("Standard Deviation = %.6f", SD);
}
}
### 난독화 후의 동일한 Java 소스 코드```java
////////////////////////////////////////////////////////////////////////////////
//
// An output from JObfuscator v1.30 - Bartosz Wójcik
//
// Website : https://www.pelock.com/products/jobfuscator
// Version : v1.30
// Params : /MixCodeFlow /RenMethods /RenVars /ShuffleMethods /ArrayIntCrypt
// /ArrayDoubleCrypt /ArrayCharCrypt /ArrayStringCrypt
// /IntsMathCrypt /DblsMathCrypt /StringSplit /CryptStr
// /StringCharVault /IntsFromDoubleMath /OpaqueMixerChain
// /ComplexifyBooleans /TryFinallyNoise /IntsToArray /DblsToArray
// New lines : Windows (CRLF - \r\n)
// Date : 12.05.2026
//
////////////////////////////////////////////////////////////////////////////////
import java.util.*;
import java.lang.*;
import java.io.*;
import java.lang.Math.*;
class Ideone {