업무를 하던 중 솔루션을 다른 업체에게 보내주어야 할 일 있어서 사용이 가능한 것을 정리해 봤습니다.
Java는 바이트 코드로 변환되어 JVM이 실행되게 됩니다.. 바이트 코드 자체가 디컴파일이 용이하기 때문에 코드의 완벽한 난독화는 있을 수 없다고 합니다. 하지만 난독화가 되어 있는 것과 그냥 코드와는 해독하는 비용 자체가 다르다고 할 수 있고, 그렇기 때문에 코드가 유출되는 것을 방지하기 위해 난독화를 사용합니다.
난독화를 하는 라이브러리를 찾으면 대표적으로 proguard가 나오게 된다. 주로 안드로이드에서 난독화를 사용할 때 해당 라이브러리를 사용하고 있었고, Spring Project에서 대표적인 예시를 찾지 못했기 때문에 proguard가 아닌 이를 대신할 라이브러리를 찾다가 obfuscator라는 라이브러리를 찾게 되었습니다.
해당 라이브러리는 GUI 모드, 터미널 모드를 지원합니다.
java -jar obfuscator.jar --jarIn 변환할 jar --jarOut 변환 후 생성될 jar명 [--config 난독화 설정파일]
{
"input": "변환할 jar명",
"output": "변환 후 생성될 jar명",
"script": "function isRemappingEnabledForClass(node) {\n return false;\n}\nfunction isObfuscatorEnabledForClass(node) {\n return true;\n}",
"libraries": [],
"Crasher": {
"Enabled": false
},
"InvokeDynamic": {
"Enabled": false
},
"HWIDPRotection": {
"Enabled": false,
"HWID": "DC514B81D7B7121B99E35E714BC89756"
},
"Optimizer": {
"Enabled": false,
"Replace String.equals()": false,
"Replace String.equalsIgnoreCase()": false,
"Optimize static string calls": false
},
"LineNumberRemover": {
"Enabled": false,
"Rename local variables": true,
"Remove Line Numbers": false,
"Remove Debug Names": true,
"Add Local Variables": false,
"New SourceFile Name": ""
},
"StringEncryption": {
"Enabled": false,
"HideStrings": false,
"AES": false
},
"NumberObfuscation": {
"Enabled": false,
"Extract to Array": true,
"Obfuscate Zero": true,
"Shift": false,
"And": false,
"Multiple Instructions": true
},
"ReferenceProxy": {
"Enabled": false
},
"ShuffleMembers": {
"Enabled": false
},
"InnerClassRemover": {
"Enabled": false,
"Remap": false,
"Remove Metadata": false
},
"NameObfuscation": {
"Enabled": false
},
"Packager": {
"Enabled": false,
"Use MainClass from the JAR manifest": true,
"Main class": "org.example.Main"
},
"FlowObfuscator": {
"Enabled": true,
"Mangle Comparisons": true,
"Replace GOTO": true,
"Replace If": true,
"Bad POP": true,
"Bad Concat": true,
"Mangle Switches": false,
"Mangle Return": false,
"Mangle Local Variables": false
},
"HideMembers": {
"Enabled": false
},
"Inlining": {
"Enabled": false
}
}
안녕하세요 해당 깃허브에서 내려받은 후 사용하려고 했더니 obfuscator.jar 파일이 보이지 않습니다 ㅠㅠ 혹시 어떻게 사용하셨는지 알려주실수있나요?