-dontskipnonpubliclibraryclassmembers
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontpreverify
-verbose
# keep option들..
# keep옵션이란 난독화시 난독화를 하지 않아야 하는 코드들을 미리 지정하는 것으로
# 안드로이드 jar파일이나 프로젝트의 경우 아래의 keep옵션들이 필요할 것입니다.
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class com.android.vending.licensing.ILicensingService
-keepclasseswithmembers,allowshrinking class * {
public <init>(android.content.Context,android.util.AttributeSet);
}
-keepclasseswithmembers,allowshrinking class * {
public <init>(android.content.Context,android.util.AttributeSet,int);
}
# Also keep - Enumerations. Keep the special static methods that are required in
# enumeration classes.
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
# Keep names - Native method names. Keep all native class/method names.
-keepclasseswithmembers,allowshrinking class * {
native <methods>;
}
위 옵션들과 함께 입력파일과 출력파일을 지정하고 참조하고 있는 라이브러리까지 지정하는 스크립트 코드는 아래와 같습니다.
# 난독화를 진행할 입력 파일명
-injars myjar.jar
# 난독화를 거친 출력 파일명
-outjars out_myjar.jar
# 입력파일이 참조하는 라이브러리들...
# 안드로이드용 jar라면 android.jar를 반드시 포함해야 할것이다.
# 그 외에 혹시 추가로 참조하는 라이브러리가 있다면 추가해 주어야 한다.
-libraryjars /Users/yosamlee/Desktop/android-sdk-mac_x86/platforms/android-7/android.jar
-libraryjars /Users/yosamlee/_TOOL/workspace/MyJar/lib/referencelib.jar
위의 스크립트를 모두 모아서 확장자 *.pro로 저장한다.
proguard설치 폴더로 가서 bin폴더의 proguardgui를 실행한다. 아래와 같은 커맨드라인 명령을 콘솔에서 입력하면 됩니다.
java -jar ../lib/proguardgui.jar
위 화면에서 "Load configuration ..."을 선택 후 앞서 저장해 둔 스크립트파일을 오픈합니다
스크립트 파일이 성공적으로 열렸다면 Process tab에서 "Process!"버튼을 선택하면 난독화 과정을 거칩니다.
...
Number of branch peephole optimizations: 0
Number of simplified instructions: 0
Number of removed instructions: 0
Number of removed local variables: 0
Number of removed exception blocks: 0
Number of optimized local variable frames: 0
Shrinking...
Removing unused program classes and class elements...
Original number of program classes: 26
Final number of program classes: 26
Obfuscating...
Writing output...
Preparing output jar [/Users/yosamlee/_TOOL/workspace/MyJar/bin/out_myjar.jar]
Copying resources from program jar [/Users/yosamlee/_TOOL/workspace/MyJar/bin/myjar.jar]
Processing completed successfully
정상적으로 과정이 진행되었다면 위와 같은 성공하였다는 메세지를 보게 될것입니다.
이제 out_myjar.jar파일을 리버스엔지니어링 해보길 바랍니다.
원하는 만큼 난독화가 진행되었는지 말이죠~!
만족할 만한 결과가 나왔기를 바랍니다.
ps) 이미 느끼신 분들도 계시겠지만 위 과정은 proguardgui버전에서 그대로 수행이 가능합니다. 저는 왜 수동으로 스크립트를 만들었냐면요.... 옵션들이 하도 많아서 헤깔려서요. GUI버전이 편하신 분들은 그걸 사용하셔도 됩니다.