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 条评论
登录 后参与评论

相关文章

来自专栏技术小讲堂

探寻ASP.NET MVC鲜为人知的奥秘(1):对LESS的支持

在ASP.NET MVC3中(从那时开始),我们拥有了对js和css等文件的捆绑(Bundling)和压缩(Minification)的能力,这是ASP.NET...

2636
来自专栏小白鼠

Ionic3 表单处理

在项目中,可以使用angular中的 @angular/forms模块处理表单,但是并不需要在app.module中引用@angular/forms模块,因为在...

431
来自专栏码农小知识

使用GDB来调试Python里optimized out的问题

http://www.cnblogs.com/dkblog/p/3806277.html

51319
来自专栏知识分享

android 权限动态申请

但是Android6.0之后呢,有些权限必须手动让用户同意才可以,哪些权限需要用户手动同意,哪些不需要这里大家自行百度

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

提高性能:用RequireJS优化Wijmo Web页面

上周Wijmo 2014 V2版本刚刚发布(下载地址),  有网友下载后发现仅仅使用了40个Widgets的一小部分,还需要加载全部的jquery.wijmo-...

1855
来自专栏dotnet core相关

年前辞职-WCF入门学习(5)

本来想第六集一起介绍的,后来发现第六集内容比较多,有半个多小时,就不一起了。网站规定6小时内只能发布一篇文章到首页,,那我就11点再发布吧。

656
来自专栏京东技术

警告:Android P(禁用非官方API)

警告:Android P(禁用非官方API) ? 1 作者介绍 李俊涛 京东前台产品研发部-资深Android工程师 看雪论坛 Android安全小组成员 前言...

5074
来自专栏向治洪

android插件开发机制

插件机制实质上就是由主体程序定义接口,然后由插件去实现这些接口,以达到功能模块化。Android系统是基于Linux内核的,其安全机制也继承了Linux的特性...

1977
来自专栏Golang语言社区

[Go 语言社区] redis数据清楚机制实现

规则需求: 1 设计redis保存玩家用户的每天的数据,但是需要第二天清楚重置 程序设计: 1 程序触发事件保存数据。(满足数据保存需求) 2 清除脚本...

3034
来自专栏微信终端开发团队的专栏

安装包立减1M--微信Android资源混淆打包工具

上一篇文章我们讲述了Android减少安装包体积的一些tips,本文主要对前文提到的资源混淆做一个简单的分析。微信中的资源混淆工具主要为了混淆资源ID长度(例如...

2648

扫描关注云+社区