前往Shuct.Net首页

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

关于反编译的搜索

反编译VS“反反编译”?还会有“反反反编译”吗? - Java ME技术讨论区 - 中国移动MM论坛 首页 管理中心 资料库 创业计划 论坛 登录 | 注册 | 业务合作 | EN | MM商场 全文 标题 全文 论坛首页 我的帖子 论坛任务 论坛帮助 今天第一次登陆,加一个积分 关闭 中国移动用户登录 手机号: 使用密码 获取验证码 验证码: 暂停使用,请使用开发者账号登录! 验证码已发出,如您60秒之内仍未收到,请重新获取 开发者登录 账户名: 密 码: 验证码: 换一张 注册 忘记密码? 中国移动MM论坛 » Java ME技术讨论区 » 反编译VS“反反编译”?还会有“反反反编译”吗? 返回列表 回复 发帖 发新话题发布投票发布悬赏发布辩论发布活动发布视频发布商品 tigerding 发短消息 加为好友 tigerding (tigerding)当前离线 UID178 帖子76 精华0 阅读权限100 来自广东-广州市 在线时间8 小时 注册时间2009-4-14 最后登录2010-5-25 登峰造极 UID178 积分2662 学分4 学分如何兑换礼品来自广东-广州市 1# 打印 字体大小: tT 发表于 2009-5-5 10:39 | 只看该作者 反编译VS“反反编译”?还会有“反反反编译”吗? Java是半编译半解释型语言,也就是源码首先要编译成字节码,再由虚拟机来解释执行,这也是java之所以能“平台无关”的原因。Java要实现这一点,就使得从字节码再反编译回源码不是什么难事(字节码“可读性”强)。Java也似乎没在源代码加密上下太多工夫,这也似乎不是Java的重点。 从得到的class文件,程序员可以轻松的利用反编译器得到源码,现在最流行的应该就是JAD以及以JAD为引擎的几个GUI程序。 Jad - the fast JAva Decompiler http://www.kpdus.com/jad.html 引擎。本身是个命令行程序,很多GUI程序是用它做引擎。 Cavaj Java Decompiler Cavaj Java Decompiler is a graphical freeware utility that reconstructs java source code from CLASS files. You can decompile java applets, jar and zip files producing accurate java source code. Browse the reconstructed source code with the Class View for instant access to methods and fields. Cavaj Java Decompiler is Windows 95/98/ME/NT/2000/XP compatible. Cavaj Java Decompiler is a standalone Windows application, it doesn't require you to have Java installed. Cavaj Java decompiler uses Jad as its Java decompiling engine. If you have questions about Jad please visit the Jad site. http://www.sureshotsoftware.com/cavaj/index.html JODE JODE is a java package containing a decompiler and an optimizer for java. The decompiler reads in class files and produces something similar to the original java file. Of course this can't be perfect: There is no way to produce the comments or the names of local variables (except when compiled with debuging) and there are often more ways to write the same thing. The optimizer transforms class files in various ways with can be controlled by a script file. It supports the following operations:Renaming class, method, field and local names to shorter, obfuscated, or unique names or according to a given translation table Removing debugging information Removing dead code (classes, fields, methods) and constant fields Optimizing local variable allocation http://jode.sourceforge.net/index.html DJ JAVA DECOMPILER http://members.fortunecity.com/neshkov/dj.html 这个东西收费,但功能较多,还可以当Java-IDE来用。免费版的只能用n次(好像是10次),不爽。 既然能反编译,当然就能反反编译。但是并不像想象的那样可以完全让反编译的人得不到源代码,这是不可能的。所谓反反编译只是把源码中有意义的符号变得无意义,所以反反编译工具实际叫“混淆器”(Obfuscator)。如:有一属性private long accessNumber; 猜也猜出大概就是指访问次数的变量,但经过混淆后也许会变成private long t001;这样的话,其他人就很难猜出它是什么意思了。如果你得到的是全篇都是这样无意义符号的源码,你是不是就立刻崩溃了?可读性很差。当然,如果你本来写代码就毫不注重编码规则的话,也就根本不需要混淆器了(笑)。另外,这样做的话,还会起到节省档案空间的作用,毕竟起一个长的容易懂的代号和短的无意义的代号,对JVM来说都一样,易读性只是对人类而言的。混淆器除了会对属性、方法、变量等符号作无意义化处理,有的还会加入根本不会执行的代码来“混淆视听”。 常用的有Proguard,开源软件,当然免费。http://proguard.sourceforge.net/ 那么还会不会有反混淆器的东西呢(反反反编译器??)。如果要反混淆,那么就要从杂乱无意义的符号中读出原程序员的本意,即机器来理解人的思维,这需要较高的AI,短期内恐难实现。所以,用反混淆器作出的class就基本可以说是不可能被反编译回原本的源码了。 但不可能被反编译 不等于 不可能被读懂。 再烂的代码只要人想读,还是有读懂的可能性的。我们只是用混淆器,给试图盗用者制造一堆麻烦而以。拿到一大堆烂代码比重写还要困难吧? 收藏 分享--> 评分 回复 引用 订阅 TOP xiaocilang 发短消息 加为好友 xiaocilang (xiaocilang)当前离线 UID7814 帖子944 精华1 阅读权限110 来自广东-广州市 在线时间83 小时 注册时间2009-8-12 最后登录2010-3-14 神功绝世 UID7814 积分4875 学分0 学分如何兑换礼品来自广东-广州市 2# 发表于 2009-8-19 18:58 | 只看该作者 谢谢楼主分享 回复 引用 TOP 1251966236 发短消息 加为好友 1251966236 (E5BE90)当前离线 UID4927 帖子2 精华0 阅读权限10 来自山东-青岛市 在线时间1 小时 注册时间2009-8-8 最后登录2011-4-27 初学乍练 UID4927 积分0 学分0 学分如何兑换礼品来自山东-青岛市 3# 发表于 2009-8-21 06:55 | 只看该作者 承接J2ME逆向工程项目 联系方式: Email:E5BE90@QQ.com QQ:1104601912 MSN:E5BE90@Live.cn 何谓逆向工程?所谓逆向工程就是分析编译之后的二进制文件,并且依据分析出的程序架构重写全部代码。 逆向工程有什么好处?软件开发是一个逐步求精的过程,一款成熟的软件需要许多人付出艰辛的努力不断的测试,这是一个耗费大量时间与金钱的过程,而逆向工程可以直接分析稳定运行的成熟的软件,写出源代码,在此基础上二次开发,从而降低开发成本与风险。 以逆向某著名即时通讯软件(手机J2ME版)为例,需要做的准备工作如下: 一:知识准备 必须熟悉Java虚拟机指令。用IDA工具反编译之后的代码以虚拟机指令码显示,所以必须要知道指令的具体含义。参考文档:http://java.sun.com/docs/books/j ... /VMSpecTOC.doc.html 二:工具准备 主要使用3种工具,它们是DJ Java Decompiler, IDA, Eclipse。 使用DJ Java Decompiler完成初步的反编译,此工具依据class文件生成java文件,不过,遇到逻辑稍微复杂一点的代码,它就无能力了,这时候就要用到IDA。IDA是一款非常强大的反编译工具,可以用流程图的方式显示反编译之后的指令。 做好以上准备之后就可以开始工作了,先使用DJ Java Decompiler分析整个jar包,自动生成java代码文件,生成的代码文件有许多错误,在总共323个类文件中,有137个类文件有错误。DJ Java Decompiler已经完成了它的使命,下面该Eclipse和IDA出场了,在Eclipse中新建立一个Eclipse Me工程,把生成的java类文件复制到该工程所在文件夹中的src目录中,编译工程,以便让Eclipse检测到有错误的类。使用IDA逐个分析有错误的类,手工重写代码,当全部错误更正之后,再开始分析每行代码的含义。由于代码已经被混淆过,生成的类,字段,方法全是以a,b,c字母表示,需要对每个类,字段,方法赋予有意义的名称。在此示例中,字符串资源有655个,颜色值有104个,为此还要在Excel编写脚本,以便辅助分析源代码(未完待续)。 [ 本帖最后由 1251966236 于 2009-8-20 22:57 编辑 ] 回复 引用 TOP duanmeng 发短消息 加为好友 duanmeng (duanmeng)当前离线 UID22696 帖子2 精华0 阅读权限10 来自北京-北京市 在线时间0 小时 注册时间2009-10-3 最后登录2009-10-3 初学乍练 UID22696 积分7 学分0 学分如何兑换礼品来自北京-北京市 4# 发表于 2009-10-3 11:42 | 只看该作者 混淆器混淆的代码是不可能回到原始代码的,就像打了马赛克的图片,图层都已经合并了,就没有什么可还原的余地了(因为跟本就没有记录马赛克下面覆盖的图片的信息),即便是反向工程也只能说是自己在给那些无意义的变量起个有意义的名字,但决不会和原始代码的名字相同。 再说了,你能起出什么有意义的名字? 还有混淆后的代码都在同一个文件夹下(除了MIDLet文件),完全打乱了以前的package顺序,这个也是不可逆的,这样的程序谁会去读?你能反向出原始的package结构?我不信 回复 引用 TOP Leonsoft 发短消息 加为好友 Leonsoft (Leonsoft)当前离线 UID5391 帖子3 精华0 阅读权限10 来自广东-深圳市 在线时间1 小时 注册时间2009-8-10 最后登录2009-10-4 初学乍练 UID5391 积分1 学分0 学分如何兑换礼品来自广东-深圳市 5# 发表于 2009-10-4 14:25 | 只看该作者 我的期望比较现实一点:希望decompile产生的代码不带goto和label,不含编译错误和逻辑错误。现在的反编译软件,反编译以后的代码,常常带有很多编译错误,甚至莫名其妙的东西。尤其是try结构,嵌套的try,循环语句等,通常不能正常反编译。 回复 引用 TOP 返回列表 进展 分享 ∧ ×分享开发者社区给好友成功分享可获得社区积分 开发者社区网站地址: 或分享到: QQ空间 新浪微博 搜狐白社会 人人网 开心网 豆瓣 抓虾 鲜果 法律声明 | 联系我们 | 帮助中心 京ICP备05002571号 | 中国移动通信版权所有