又到周末一我的侘在家里无事可干,这就是程序员的悲哀啊。好了咱们利用周末的时间继续介绍android apk防止反编译技术的另外一种方法。前三篇咱们讲了加壳技术(http://my.oschina.net/u/2323218/blog/393372)、运行时修改字节码(http://my.oschina.net/u/2323218/blog/396203)和伪加密(http://my.oschina.net/u/2323218/blog/399326),若是有不明白的能够查看个人博客的前三篇中关于这三种技术的介绍。接下来咱们将介绍另外一种防止apk反编译的技术-对抗JD-GUI。java
1、对抗JD-GUI原理android
一般在对apk进行反编译的时候用到的最多的两个工具就是apk-tool和dex2jar。利用这两个工具将apk首先反编译成classes.dex而后再将classes.dex反编译成jar文件或者将apk直接反编译成jar文件;获得jar文件之后就能够利用JD-GUI将获得的jar文件打开就能够直接查看apk的java源码了。咱们花了那么大心思写的程序就这么容易被别人拿到源码是否是很不甘心,如今我就告诉你对抗JD-GUI查看源码的方法。咱们在用JD-GUI查看源码时有时有些函数的根本看不到直接提示error错误,咱们就利用这点来保护咱们的apk。原来JD-GUI在将通过混淆处理的jar里面的class字节码文件转成java文件时,遇到函数中根本走不到的分支的特殊实现时就会提示函数error。这时咱们只要查看这些提示error的文件或者函数对应的源码是有什么语句引发的,将这些语句加到咱们的源码中就能够防止利用JD-GUI去查看咱们的apk源码了。程序员
2、原理实现微信
(1)假如咱们的apk onCreate的函数实现以下:微信公众平台
1
2
3
4
5
|
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
|
(2)将咱们的apk通过混淆处理后通过签名导出咱们的apk,咱们用dex2jar工具将咱们的apk转换成jar文件ide
(3)用JD-GUI打开咱们的jar文件就能够看到咱们的apk onCreate函数的源码了。以下:函数
(4)这时咱们在apk onCreate函数里面加上不可能的特殊分支语句,代码以下:工具
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
switch(0)
{
case 1:
JSONObject jsoObj;
String date=null;
String second=null;
try
{
jsoObj=new JSONObject();
date=jsoObj.getString("date");
second=jsoObj.getString("second");
}
catch(JSONException e)
{
e.printStackTrace();
}
test.settime(date,second);
break;
}
}
|
1
2
3
4
|
class test
{
public static void settime(String a,String b){}
}
|
(5)咱们用(2)中一样的方法将apk转成jar文件,而后用JD-GUI打开会看到提示error错误。以下:加密
根据上面的讲述相信你们对对抗JD-GUI的方法有了必定的了解,我只是举了其中的一个方法,之因此说是特殊的分支语句是由于不是全部的分支语句均可以让JD-GUI提示error。咱们能够根据原理多注意一些这样的特殊分支语句以便用来保护咱们的apk,下一篇咱们将讲解另外一种android apk防止反编译技术,期待你们的捧场。若是对这篇讲的技术有任何疑问:spa
欢迎关注我的微信公众平台:程序员互动联盟(coder_online),扫一扫下方二维码或搜索微信号coder_online便可关注,咱们能够在线交流。