代码混淆

目的:

  • JAVA编程实现Android手机代码混淆,并使用反编译查看效果

原理:

  • 代码混淆(Obfuscated code)亦称花指令,是保护APP常见技术之一,方法是将程序代码转换成一种功能上等价,但是难于阅读和理解的形式,本实验介绍使用代码混淆技术对抗静态分析。混淆就是对发布出去的程序进行重新组织和处理,使得处理后的代码与处理前代码完成相同的功能,而混淆后的代码很难被反编译,即使反编译成功也很难得出程序的真正语义。被混淆过的程序代码,仍然遵照原来的档案格式和指令集,执行结果也与混淆前一样,只是混淆器将代码中的所有变量、函数、类的名称变为简短的英文字母代号,在缺乏相应的函数名和程序注释的情况下,即使被反编译,也将难以阅读。同时混淆是不可逆的,在混淆的过程中一些不影响正常运行的信息将永久丢失,这些信息的丢失使程序变得更加难以理解。混淆器的作用不仅仅是保护代码,它也有精简编译后程序大小的作用。由于以上介绍的缩短变量和函数名以及丢失部分信息的原因,编译后jar文件体积大约能减少25% ,这对当前费用较贵的无线网络传输是有一定意义的。

过程:

1
2
3
4
5
6
7
8
9
-libraryjars ./libs/android-support-v4.jar
-downwarn android.support.v4.**
-downwarn **CompatHoneycomb
-downwarn **CompatHoneycombMR2
-downwarn **CompatCreatorHoneycombMR2
-keep interface android.support.v4.app.**{*;}
-keep class android.support.v4.**{*;}
-keep public class * extends android.support.v4.**
-keep public class * extends android.app.Fragment
  • 点击file,选择exportimage-20211229094244824

  • 选择export android applicationimage-20211229094303845

  • 点击nextimage-20211229094340365

  • 生成证书加密(点击browse选择路径),本实验所有密码为123456image-20211229094428828

  • 选择Alias并输入密码,点击nextimage-20211229094501941

  • 点击browse选择生成的APK保存路径image-20211229094535011

  • 使用JD-GUIimage-20211229095219086

  • 用解压缩工具解压simpleedu23.apk,得到classes.deximage-20211229095342782

  • 将classes.dex与dex2jar放在同一目录image-20211229095427029

  • Cmd执行指令d2j-dex2jar.bat classes.deximage-20211229095743092

  • 在dex2jar目录下获得目标程序的源代码image-20211229095802525

  • 用jd-gui打开jar包,得到反编译后的源代码image-20211229095848546