前往Shuct.Net首页

Shudepb PB反编译专家长时间以来,为业内同类软件事实上的唯一选择.细节,彰显专业.态度,决定品质.

关于反编译的搜索

浅谈防止反编译(Android) - SandKing - eoe移动开发者社区SandKingsk.问答区版主&DOTA高手首页主页博客代码帖子资讯收藏Ping社区返回博客首页登录注册浅谈防止反编译(Android)作者:sk.更新于 11月28日访问(1991)评论(12)前言 作为Android应用开发者,不得不面对一个尴尬的局面,就是自己辛辛苦苦开发的应用可以被别人很轻易的就反编译出来。 Android.Apk反编译原理 众所周知,我们很清楚APK是于Java源码经过编译后,再转为Android虚拟机Dalvik的dex文件,同时使用了ZIP算法压缩后的Android可执行程序。那么,对于APK的反编译过程,其实就很清晰了,就是上面的一个反向过程。我们可以直接修改APK文件为ZIP文件,然后解压缩得到dex文件,再转dex文件为jar文件,再利用工作反编译jar文件查看Java源码即可。 Java反编译原理 说到Java反编译原理前,先探讨下各种语言的反编译吧。 编译型语言 典型案例C/C++。 C源码经过 ”汇编——编译——链接”形成机器码。 要反编译,现将机器码反汇编,然后将得到的汇编码转化为C源码。 这时难题就产生了。 1、对应了多种C源码 1 2 3 4 F1: MOV CX, 100 ... LOOP F1 既可以反汇编成 1 for (i = 0; i < 100, i++) 也可以反汇编成 1 2 3 4 5 n = 100; while (n > 0) { n-- } 当然这个只是其中一个例子,实际用的时候还有很多复杂情况。 2、汇编语言丧失了语义 int appleAccount; appleAccount = 100; 你反汇编能得到什么? 在栈区0xEEEE0000这个地址定义了一个变量,这个 变量的值为100. 这意味着,你反汇编得到的所有变量名和函数名都是一堆毫无意义的数字! 解释型语言 这种要运行的时候直接用解释器解释源码就好了,又何必反编译? Java语言 java比较特殊,是介于编译型语言和解释型语言之间的一种语言。 Java先编译成字节码,到这为止跟编译型语言是一样的; 然后字节码交给Java虚拟机运行,这跟解释型语言很类似。 这时反编译的工作跟编译型语言反编译很类似,将字节码反编译成Java源码。先将字节码先反汇编,然后将反汇编得到的汇编码反编译成java源码。 和普通编译型代码不同在于,字节码文件中含有很多调试信息[1],可以猜测出原来的变量名和函数名。 至于一些汇编码可以有多种反编译语句,可以根据具体语境选择一种反编译方式。 以上解释不等于解释型语言不能保护自己的代码 Android防止反编译 之前为了防止反编译,也着实想破了头脑。也上网查了很多信息。总的来说,就以下几种情况分别而论: 代码加密 这方式,也只能想想,一旦你自己加密了,Android系统都不认识你了,还怎么运行?(如果有那估计就是eoe现在推的爱加密吧). 代码混淆 这种方式,其实我不大愿意将他归类于防止反编译,从Android、Java编译原理上来说,针对自身代码做混淆等操作,必然防止不了反编译这个事实。他能做到的就是将字符,函数等混淆成各种a,b,c,d,1,2,3等。 这种方式一般称为,妨碍对反编译代码的阅读、观看和理解 Android中主要是针对 proguard.cfg 的配置来实现。 具体的实现网上针对这部分的解释已经太多,所以这里不详细介绍了。 动态加载类 这种方式的启发是根据web端来的。Web端你要防止,那就不发布呗。 所以我们可以将我们重要的源码,丢在服务器上,必要的时候通过DexClassLoader类去加载重要类。来防止核心代码被反编译。 具体可看DexClassLoader示例 用NDK开发核心代码 从上面已经能知道,C/C++等编译型语言的反汇编难度。所以我们可以放心的使用NDK去开发,生成SO库文件再来调用。 PS:部分资源文件若十分珍贵,可以通过 #include直接编译到库里(当然内存可能就大了),这种方式可以自己考虑。 Android反编译工具 dex2jar + jdgui apktool 声明:eoe文章著作权属于作者,受法律保护,转载时请务必以超链接形式附带如下信息原文作者: sk.原文地址: http://my.eoe.cn/sandking/archive/19772.htmlAndroidNDK反编译关于我们 | 招贤纳士 | 联系我们 | eoe安卓客户端 | 客户端源码 | 在线客服 eoe致力于构建完善的技术社区, 推荐使用Chrome浏览本站以获得更佳的视觉体验. Copyright &copy; 2009 - 2013 eoe.cn All Rights Reversed京ICP备11018032号-2 京公网安备110105014978