前往Shuct.Net首页

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

关于反编译的搜索

防止JAVA代码被反编译的方法>>Java>>中国云安网 Www.Yunsec.Net - 中国云安网 Www.Yunsec.Net - 资讯黑客动态安全人物互联资讯病毒预警 学院操作系统网络通信木马病毒网站建设程序语言 软件漏洞扫描木马清理密码破解杀毒软件 教程系统管理加密破解菜鸟建站无线破解Linux  专题企业网络硬件产品网吧技术手机安全 安全漏洞发布网站安全网络攻击高级编程无线安全 首页 资讯学院 软件 教程 专题 安全 论坛 智能模糊搜索 仅搜索标题 热门关键字:   网站安全  黑客攻防  安全漏洞  系统安全  网络安全 站外广告 域名申请虚拟主机 信息安全 文字广告位招租 网络安全技术 企业网络安全 站外广告 文字广告位招租 蚁巡运维监控 文字广告位招租 文字广告位招租 云安全 当前位置: 中国云安网 > 学院 > 程序开发 > Java > 防止JAVA代码被反编译的方法 发布时间:2010-10-29 12:01文章来源:网络文章作者:秩名 点击次数: 次 摘要:我们都知道JAVA是一种解析型语言,这就决定JAVA文件编译后不是机器码,而是一个字节码文件,也就是CLASS文件。而这样的文件是存在规律的,经过反编译工具是可以还原回来的。例如Decafe、FrontEnd,YingJAD和Jode等等软件。下面是《Nokia中Short数组转换算法...   我们都知道JAVA是一种解析型语言,这就决定JAVA文件编译后不是机器码,而是一个字节码文件,也就是CLASS文件。而这样的文件是存在规律的,经过反编译工具是可以还原回来的。例如Decafe、FrontEnd,YingJAD和Jode等等软件。下面是《Nokia中Short数组转换算法》   类中Main函数的ByteCode:   0 ldc #16   2 invokestatic #18   5 astore_1   6 return   其源代码是:short [] pixels = parseImage("/ef1s.png");   我们通过反编译工具是可以还原出以上源代码的。而通过简单的分析,我们也能自己写出源代码的。   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 的意思。   JAVA手机网[www.cnjm.net]这就是parseImage这个函数的运行,我们反过来看看parseImage的原型就明白了   short [] parseImage(String)   那么Ljava/lang/String;就是说需要传入一个String对象,而为什么前面要有一个L呢,这是JAVA虚拟机用来表示这是一个Object。如果是基本类型,这里就不需要有L了。然后返回为short的一维数组,也就是对应的[S。是不是很有意思,S对应着Short类型,而&ldquo;[&rdquo;对应一维数组,那有些朋友要问了,两维呢,那就&ldquo;[[&rdquo;,呵呵,是不是很有意思。   好了,调用了函数,返回的值要保存下来吧。那么就是第三行要做的事情了。   第三行:5 astore_1   呵呵,很简单的。但是却有文章,也是比较容易混乱的地方。   astore_为虚拟机指令,作用为:将当前reference存储到局部变量中去。而必须是对当前框架的局部变量的有效索引。打个比方,可能我们这个函数中可能还要用到这个局部变量,我们可以通过来找到它。例如调用虚拟机指令:   aload_1,就能得到该值。   第四行:6 return   同样的,return也是虚拟机指令了,它的作用为:从方法返回void。   这里也就是退出main函数。   ok,终于啰嗦完毕了。有些朋友可能要问,这么复杂,才四行就说这么多,呵呵,可能是我这人废话过多,当然如果你熟悉了,一点就能看懂了。通过肉眼就可以反编译程序了。目前所有的反编译工具都无法做到完美反编译,在有问题的地方还需要人去修正。 标签分类: JAVA 共3页: 上一页123下一页 上一篇:用Java调用EXE 下一篇:Java内存溢出分析 相关阅读 JAVA中执行DOS命令分析 在Java中调用Perl脚本 Spring提供的事务管理方法浅谈 JAVA的AES加密步骤解释 用javascript禁止操作 Java获取客户端用户的真实 IP的方法 JAVA解决文本长度问题-标准化文本向量 J2EE新手入门之“Hibernate”名词解释 JDBC字符类型转换 优化SQL Server节省 Java开发 网页浏览器组件介绍 排行榜 最新 热点 Ajax通过GET方式与PHP进行交互 JAVA中执行DOS命令分析 使用Java组件itext 生成pdf介绍 JSF中用户登出返回登录页面问题 Java包导入机制的研究与解析 java clone方法使用详解 Java多线程应用方法全解密 Java如何获得文件编码格式 Java解压zip和rar文件 java for循环详细说明 JAVA实现HTML表格导出和导入Excel功 JDK1.6.0+Tomcat6.0的安装配置(配置 java获取当前系统性能信息 Java运行shell脚本 Java判断Ftp服务器目录是否存在,若不 使用Java组件itext 生成pdf介绍 Java如何实现网页截图的功能? Java SSH远程执行Shell脚本实现 Java输入输出流详解 Tomcat解压缩版 修改Tomcat的启动内 特别推荐 Web攻防之二实施渗透测试(黑客如何 Discuz!X2.5 Release20120407版命令 DedeCMS几个最新bug分析 IIS6使用冒号上传漏洞 Metasploit BackDoor For Windows 一次简单的POST注入测试 浅析浏览器的跨域安全问题 Mysql数据库攻击技术 PHP本地文件包含(LFI)漏洞利用 针对Windows Smb的攻击方式 10种 热点推荐 Ajax通过GET方式与PHP进行交互 java编程之注册表操作 Java输入输出流详解 Web 应用环境下管理 pureQuery 客户 JAVA通过搜狗词库过滤指定词性 用JAVA实现的一种改进的K均值聚类算 JAVA解决文本长度问题-标准化文本向 Java如何实现网页截图的功能? Java串行端口通讯技术慨论 Tomcat解压缩版 修改Tomcat的启动内 云安网 ( 黔ICP备13003640号-3) | 关于我们 | 网站地图 | RSS订阅 | 投稿&广告 联系站长 QQ:83054150 Email:admin@hackline.net Copyright &copy; 2009-2013 中国云安网. 版权所有 Powered by www.yunsec.net