前往Shuct.Net首页

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

关于反编译的搜索

防止JAVA代码被反编译的简单方法 — IT技术 - 赛迪网 赛迪网 > IT技术 > 技术动态 > 文章 IT资讯搜索 赛迪网 资讯中心 通信产业 IT技术 IT产品 信息化 情报中心 百度 Google IT产品搜索 产品分类 手机 笔记本 台式机 服务器 投影机 打印机 · [Java论坛][安全论坛][数据库论坛][操作系统论坛] · [推荐] 江民安全专家永久免费 立即下载 RSA 2010 · [专题] 参与多核UTM调查 赢购物卡 谷歌遭攻击事件 · [IT技术周刊][IT资源下载专区][病毒求助专区] · [热点] 《拆弹部队》藏木马 看Xbox360与PS3背后秘密 · [热点] 报告:PDF漏洞远超微软 十款免费电子邮件程序 防止JAVA代码被反编译的简单方法 发布时间:2006.04.24 03:16 来源:minisoyo 作者:bb 我们都知道JAVA是一种解析型语言,这就决定JAVA文件编译后不是机器码,而是一个字节码文件,也就是CLASS文件。而这样的文件是存在规律的,经过反编译工具是可以还原回来的。例如Decafe、FrontEnd,YingJAD和Jode等等软件。下面是《Nokia中Short数组转换算法》类中Main函数的ByteCode:0 ldc #16 2 invokestatic #18 5 astore_16 return其源代码是:short [] pixels = parseImage("/ef1s.png");JAVA手机网[www.cnjm.net]我们通过反编译工具是可以还原出以上源代码的。而通过简单的分析,我们也能自己写出源代码的。JAVA手机网[www.cnjm.net]第一行:ldc #16 ldc为虚拟机的指令,作用是:压入常量池的项,形式如下ldc index这个index就是上面的16,也就是在常量池中的有效索引,当我们去看常量池的时候,我们就会找到index为16的值为String_info,里面存了/ef1s.png.所以这行的意思就是把/ef1s.pn作为一个String存在常量池中,其有效索引为16。第二行:2 invokestatic #18 invokestatic为虚拟机指令,作用是:调用类(static)方法,形式如下invokestatic indexbyte1 indexbyte2其中indexbyte1和indexbyte2必须是在常量池中的有效索引,而是指向的类型必须有Methodref标记,对类名,方法名和方法的描述符的引用。所以当我们看常量池中索引为18的地方,我们就会得到以下信息:Class Name : cp_info#1 Name Type : cp_info#19 1 和19都是常量池中的有效索引,值就是右边中的值,再往下跟踪我就不多说了,有兴趣的朋友可以去JAVA虚拟机规范。这里我简单介绍一下parseImage(Ljava/lang/String;)[S 的意思。这就是parseImage这个函数的运行,我们反过来看看parseImage的原型就明白了short [] parseImage(String)那么Ljava/lang/String;就是说需要传入一个String对象,而为什么前面要有一个L呢,这是JAVA虚拟机用来表示这是一个Object。如果是基本类型,这里就不需要有L了。然后返回为short的一维数组,也就是对应的[S。是不是很有意思,S对应着Short类型,而“[”对应一维数组,那有些朋友要问了,两维呢,那就“[[”,呵呵,是不是很有意思。好了,调用了函数,返回的值要保存下来吧。那么就是第三行要做的事情了。第三行:5 astore_1呵呵,很简单的。但是却有文章,也是比较容易混乱的地方。astore_为虚拟机指令,作用为:将当前reference存储到局部变量中去。而必须是对当前框架的局部变量的有效索引。打个比方,可能我们这个函数中可能还要用到这个局部变量,我们可以通过来找到它。例如调用虚拟机指令:aload_1,就能得到该值。第四行:6 returnJAVA手机网[www.cnjm.net]同样的,return也是虚拟机指令了,它的作用为:从方法返回void。这里也就是退出main函数。----------------------------------------------------------------------------ok,终于啰嗦完毕了。有些朋友可能要问,这么复杂,才四行就说这么多,呵呵,可能是我这人废话过多,当然如果你熟悉了,一点就能看懂了。通过肉眼就可以反编译程序了。目前所有的反编译工具都无法做到完美反编译,在有问题的地方还需要人去修正。好了,说了半天如何反编译,我们就来看看如果在你的程序如果防止别人来反编译。好不容易写好的程序被人反编译了,多郁闷。哈哈。工欲善其事,必先利其器,这句话用对了吗?什么混淆等等的方法,我就不说了,我这里主要是要说一种通过添加代码来在某种程度来避免当前流行的反编译工具对你的代码进行反编译。方案一。1,首先要添加一个参数为Exception类型的函数,例如这样。 public static void Fake(Exception e)JAVA手机网[www.cnjm.net] { e.toString();JAVA手机网[www.cnjm.net] } 一定要有e.toString();,因为要防止你的混淆器把无用的代码过滤。2,然后在每个类中调用这个函数,放在try...catch(Exception e)..中的catch里面,例如: try { ... } catch (Exception e) { Fake(e); }请注意 ,一定要放在catch才有用,其他地方无用。方案二。如果以上方法还不够专业,我们再来一个。呵呵~1,同样的,我们定义一个类,这个类叫做AntiCrack.。名字好像有点大。。。代码如下:public class AntiCrack{ private AntiCrack() { } public static Throwable Fake(Throwable throwable, Throwable throwable1) { try { throwable.getClass().getMethod("initCause", new Class[] { java.lang.Throwable.class }).invoke(throwable, new Object[] { throwable1 }); } catch(Exception exception) { } return throwable; }JAVA手机网[www.cnjm.net]}2,同样的,我们在catch里面调用该函数。例如如下。 try { //your code here JAVA手机网[www.cnjm.net] } catch(IOException ioexception) { IllegalArgumentException illegalargumentexception = new IllegalArgumentException(ioexception.toString()); AntiCrack.fake(illegalargumentexception, ioexception);JAVA手机网[www.cnjm.net] throw illegalargumentexception; }或者也可以这样public class AntiException extends Exception{ public AntiException() { } public AntiException(String s) { super(s); } public AntiException(String s, Throwable throwable) {JAVA手机网[www.cnjm.net] super(s); AntiCrack.fake(this, throwable); }}然后在你的程序里面 JAVA手机网[www.cnjm.net]try{}catch(IoException e)JAVA手机网[www.cnjm.net]{ throw new AntiException(ioexception.toString(), ioexception);}当采用以上方式后,任何类只要调用了该函数,生成的class反编译后出错,得不到结果。Decafe、FrontEnd和YingJAD,反编译时都有exception,然后无法进行下去。大家可以多测试变得反编译工具。建议推荐用第二个方法。 [ 发表评论 ] 字体[ 大中小 ] [ 打印 ] [ 进入博客 ] [ 进入论坛 ] [ 推荐给朋友 ] 【相关文章】 · 实例讲解PHP中的Java扩展应用 (04-23) · 如何用servlet在客户端生成一个合成图片 (04-23) · 高手经验总结:工作中常用的J2EE技术 (04-23) · 编程需要注意陷阱:Java继承是有害的 (04-23) · 如何做好网站开发项目需求分析 (04-23) · SUN 认证介绍 (08-17) · SUN认证JAVA程序员 (04-02) · 课程介绍(1):SL-110 初级Java语言编程 (06-20) · 课程介绍(2):SL-210 向Java面向对象编程技术 (01-16) · 课程介绍(3):SL-265 结构化程序员的Java技术 (11-23) 【客户需求反馈表】 * 姓  名: 更多资料  了解方案  认识厂商 详细需求信息请在此处填写! * 单位名称: * 联系电话: * 电子邮件: 1 "来自星星的你"推热社交软件line 或赶超微 2 湖南冷水江公务员工资“被公开”(图) 3 东莞扫黄引讨论 "大V"呼"东莞挺住"惹争议 4 《我是歌手》第二季赛程近半 乐视全屏播放 5 微软宣布"XP"停止服务倒计时 六成网友将坚 6 微软XP系统将停止向用户提供服务 7 诺基亚将在MWC大会上发布安卓智能手机 8 韩国科学家发布K-Glass 智能手机即将终结 9 年终奖终于落袋 余额宝、理财通到底选谁? 1 用户吐槽不“便民” WP8.1将增加通知中心 2 MWC2014大会新品前瞻:韩日系将带来大大的惊 3 十大易碎的手持设备出炉 iPad Mini榜首 4 红米1S电信版火爆预售,网站现"半小时付款" 5 首款电信天翼4G手机酷派S6发布 支持双卡多 6 红米手机1S电信版发售,配置升级至骁龙400 7 4G比3G更耗手机流量? 记者实测表明:这是错 8 LG电子2月底推新款手机G Pro2 注重拍摄效果 9 体验4G上网,还是沃快 1 英特尔至强E7 v2将实现大数据实时分析 2 那一刻我们决定在一起 高分辨率平板盘点 3 华硕VivoTab Note 8开卖!售价329美元 4 开学返校马上换机 亲民价笔记本大搜罗 5 只要大屏幕!五款27英寸以上一体机盘点 6 只求高大上不怕花钱 高端商务一体机盘点 7 14寸商务超极本 戴尔Latitude E7440评测 8 新年新气象 五款高效应对办公激打推荐 9 15.6吋IPS屏 神舟战神K610C新品4399元 1 想来一发?360搜索情人节推“嘿咻”指数 2 不越狱免费装 91助手iOS正版震撼发布 3 迪信通启动双节最强攻势 iPhone 5s买一赠一 4 “莞式”情趣用品成为情人节网购钓鱼诱饵 5 Canonical牵手魅族 全球首款Ubuntu手机诞生 6 快装越狱助手升级,支持iOS7.0.5,越狱很简 7 北京快网保障2014马年春晚直播 8 迁徙图技术隐私兼顾 百度确保数据安全 9 安天AVL SDK for Mobile获AV-TEST移动安全 资讯 通信 IT产品 IT技术 信息化 ·直播:2014中国IT市场年.. ·微软换帅:纳德拉上任,.. ·专题:2014年长虹电视发.. ·国家产业服务平台“创新.. ·4G牌照终发放 运营商直.. ·以人为本,共话用户体验.. ·专题:服务器教育行业案.. ·专题:回顾2009 原装耗.. ·专题:HP Photosmart Pl.. ·百度进军移动安全 发布.. ·“新IT 易之道”华三用.. ·软件定义网络,是高富帅.. ·垂直搜索嚣张侵权的时代即将终结 ·爱帮网为什么败诉了还在“混淆视听”? ·国产数码奢侈品为何越卖越贵? ·微软云计算的三种运营模式 ·快递也“春运”,因为电商基础设施不给力! ·试看谁能占得AMD APU先机? ·增值分销:IT分销的新蓝海 ·WiFi会改变生活方式吗 ·VeryCD关闭下载,网民何去何从? ·Gartner发布报告:SIEM助力企业安全智能 ·趋势科技:企业使用社交媒体的五项基本原则 ·Sybase SQL Server日志问题普及 ·JPEG文件格式解析 ·Tomcat最大并发数 ·Oracle 11g存在密码过期问题 ·qt 与symbian C++混编 ·RWindow QWidget ·网络与系统管理的未来发展方向探讨 访问人数过多,请稍候访问 访问人数过多,请稍候访问