android apk 防止反编译技术第四篇-对抗JD-GUI

又到周末一个人侘在家里无事可干,这就是程序员的悲哀啊。好了我们利用周末的时间继续介绍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的函数实现如下:

@Override

protected void onCreate(BundlesavedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

}

(2)将我们的apk经过混淆处理后经过签名导出我们的apk,我们用dex2jar工具将我们的apk转换成jar文件

(3)用JD-GUI打开我们的jar文件就可以看到我们的apk onCreate函数的源码了。如下:

(4)这时我们在apk onCreate函数里面加上不可能的特殊分支语句,代码如下:

@Override

protectedvoid onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

switch(0)

{

case1:

JSONObjectjsoObj;

Stringdate=null;

Stringsecond=null;

try

{

jsoObj=newJSONObject();

date=jsoObj.getString("date");

second=jsoObj.getString("second");

}

catch(JSONExceptione)

{

e.printStackTrace();

}

test.settime(date,second);

break;

}

}

class test

{

public static void settime(Stringa,String b){}

}

(5)我们用(2)中同样的方法将apk转成jar文件,然后用JD-GUI打开会看到提示error错误。如下:

根据上面的讲述相信大家对对抗JD-GUI的方法有了一定的了解,我只是举了其中的一个方法,之所以说是特殊的分支语句是因为不是所有的分支语句都可以让JD-GUI提示error。我们可以根据原理多注意一些这样的特殊分支语句以便用来保护我们的apk,下一篇我们将讲解另一种android apk防止反编译技术,期待大家的捧场。

原文发布于微信公众号 - 程序员互动联盟(coder_online)

原文发表时间:2015-04-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏GreenLeaves

五、CLR加载程序集代码时,JIT编译器对性能的产生的影响

1、CLR首次加载代码造成的性能损失      四、CLR执行程序集中代码介绍了CLR在首次执行一个类的时,会初始化一个内部结构,然后当目标方法被首次调用时,...

2787
来自专栏月色的自留地

jxa快速入门,Javascript已加入AppleScript全家桶

1864
来自专栏散尽浮华

统计代码行数的方法梳理

在日常运维工作中,会碰到对一项项目下的代码行数进行统计的需求,下面对代码行数的统计方法进行梳理,以供参考。 1)最简单的是使用wc -l直接进行代码行数统计。(...

2057
来自专栏大数据挖掘DT机器学习

使用Python绘制点击图、热图

via: http://blog.csdn.net/wenyusuran/article pyHeatMap是一个使用Python生成热图的库,基本代码是我一年...

3064
来自专栏安恒网络空间安全讲武堂

CTF逆向--.NET与Python篇

题目(来源:Jarvis-OJ): Classical Crackme Classical CrackMe2 FindKey Login Classical C...

3518
来自专栏代码GG之家

IDA Pro 工具介绍

*转载请注明来自游戏安全实验室(GSLAB.QQ.COM) 原文地址:http://gslab.qq.com/article-112-1.html ? IDA ...

7637
来自专栏生信技能树

(14)不同基因坐标转换-生信菜鸟团博客2周年精选文章集

主流有3个,我只介绍了两个: 用crossmap代替liftover做基因组坐标转换 liftover基因组版本直接的coordinate转换 其实国际三大主流...

43313
来自专栏守望轩

Visual Studio 2008 每日提示(三十)

#301、缓存符号到本地磁盘 原文链接:You can cache symbols locally to disk 操作步骤: 菜单:工具+选项+调试+符号...

3389
来自专栏葡萄城控件技术团队

Webpack4教程 - 第二部分,使用loader处理scss,图片以及转换JS

今天继续我们的Webpack 4入门教程。在介绍了Webpack的基本概念之后,是时候更深入一点了。这次我们会涉及Webpack中非常强大的一个东西:loade...

791
来自专栏IMWeb前端团队

vim进阶技巧

本文作者:IMWeb 刘志龙 原文出处:IMWeb社区 未经同意,禁止转载 都说vim是编辑器之神。 但是往往武器重要,用的人能驾驭才能把它发挥到极致...

1905

扫码关注云+社区