博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android apk 防止反编译技术第四篇-对抗JD-GUI
阅读量:5842 次
发布时间:2019-06-18

本文共 1849 字,大约阅读时间需要 6 分钟。

又到周末一个人侘在家里无事可干,这就是程序员的悲哀啊。好了我们利用周末的时间继续介绍android apk防止反编译技术的另一种方法。前三篇我们讲了加壳技术()、运行时修改字节码()和伪加密(),如果有不明白的可以查看我的博客的前三篇中关于这三种技术的介绍。接下来我们将介绍另一种防止apk反编译的技术-对抗JD-GUI。

 

一、对抗JD-GUI原理

通常在对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源码了。

 

二、原理实现

(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文件

 

(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防止反编译技术,期待大家的捧场。如果对这篇讲的技术有任何疑问:

欢迎关注个人微信公众平台:程序员互动联盟(coder_online),扫一扫下方二维码或搜索微信号coder_online即可关注,我们可以在线交流。

转载于:https://www.cnblogs.com/yistn/p/4440664.html

你可能感兴趣的文章
hp 服务器通过串口重定向功能的使用
查看>>
java中回调函数以及关于包装类的Demo
查看>>
ul下的li浮动,如何是ul有li的高度
查看>>
网站文章如何能自动判定是抄袭?一种算法和实践架构剖析
查看>>
【OpenCV学习】滚动条
查看>>
为找好心人抚养孩子 浙江一离婚父亲将幼童丢弃公园
查看>>
读书:为了那个美妙的咔哒声
查看>>
ASMFD (ASM Filter Driver) Support on OS Platforms (Certification Matrix). (文档 ID 2034681.1)
查看>>
OllyDBG 入门系列教学--让你瞬间成为破解高手
查看>>
listbox用法
查看>>
寻找链表相交节点
查看>>
Linux crontab定时执行任务
查看>>
自己遇到的,曾未知道的知识点
查看>>
docker 基础
查看>>
我的友情链接
查看>>
写Use Case的一种方式,从oracle的tutorial抄来的
查看>>
【C#】protected 变量类型
查看>>
爬虫去重(只是讲了去重的策略,没有具体讲实现过程,反正就是云里雾里)...
查看>>
react中将px转化为rem或者vw
查看>>
avcodec_open2()分析
查看>>