文档章节

写给软件开发者---Binnary Security.

hysjw
 hysjw
发布于 2013/01/12 11:50
字数 1000
阅读 2222
收藏 64

本文目标:

  1. 大致了解Java byte code以及Assembly.
  2. 简单概述如何反编译Java Class
  3. 二进制文件的反编译
  4. 回答难道真的不能保护程序源码吗?

Java Byte Code:

  1. 使用命令javap -c <ClassName>来把Java源代码编译为Java Byte Code
  2. 要编译Java源代码必须保证所在机器上有JVM环境
  3. 不同的操作系统必须安装相应的JVM环境

Java Byte Code的简单语法:

  • iconst_0 : push 0 onto the stack
  • istore_1: pop the top of the stack as variable 1
  • goto: jump to line
  • iload_1: push variable 1 onto the stack
  • bipush, ldc: push value onto stack
  • if_icmplt: if 1St item on stack > 2nd jump to line
  • Ifeq: if 1st item on stack > 2nd jump to line

更多语法请自己Google.

反编译:

反编译通常执行编译器的相反动作 —---- 即把含有相对抽象的底层代码(通常指那些被设计用来给计算机读取的语言)转化为高级语言代码(我们经常使用并能简单看懂的语言)。

这里以JD-GUI来说明,它本身是一款Java发编译软件,即把Java Byte Code转化为Java 源代码。

1. 使用JD-GUI来查看一个可运行的JAR文件,源文件是一个软件需要注册码的例子。

上述例子有什么用处?

  • 反编译可以让我们看明白整个程序的运行过程 并且可以了解一些软件的内部算法
  • 反编译可以更好的更改和重新编译程序
  • 所有被用来保护软件核心机制的代码都可以被移除,比如破解软件等

当然反编译不是万能的,只能编译出大概,并不能保证百分百的正确。例如,trueByte Code中的显示和1是一样的。因此反编译并不能分辨1true, 0false。(不过相差不会太多。) 

Binaries:

  • 即汇编语言
  • 相对于 Java Byte Code 更加底层
  • 不同的 OS 需要使用不同的编译器,当然原理是一样的

 

汇编语法:

  • PUSH: add to top of stack
  • CALL: execute a function
  • RET, RETN, RETF: end a function and restart calling code

更多信息依旧请自己查阅Google

2. Windows中最经典的调试程序ollydbg。说明一下上述两个软件都是Free的。

原理解析:上图中被选中的那行执行了StrCmp这个函数,事实上就是比对两个String,也就是通常程序用来验证密码的最基本方式。这一行的上面两行则是提取了2个密码,一个是Built-in的,一个一般是用户输入的。只要在调试器中更改ECXEDX即可让程序比对密码时,提取同一个密码,也就是说讲永远为True。值得说明,下一句的TEST即是比对。

Ollydbg在破解中的作用是什么:

  • 可以搜索内存中的String,初级软件,比如教学视频一般会把密码直接藏在内存中。
  • 可以查看Register中的KeyValue 
  • 可以通过调换JEQJNEQ来绕过IF语句。
  • …… 

如何防御反编译或者调试程序探查:

  • 动态生成 Key 但是黑客可以运行程序
  • 加密程序或者加壳 但是程序中其实依旧有相对应用来解密的 Key 能被黑客发现
  • 混编数据和代码,甚至加入无用信息 能够拖延黑客破解所用的时间,数月甚至几年,例如 Skype
  • 现实中真正有用的防御手段 -    部分或者全部数据存放在网络服务器上,例如 WoW, BlueRay 或者 硬件级别的保护措施

End:

结尾送大家两句话,是我对互联网以及安全领域的真正理解。写完了才发现貌似和开源没关系T.T

  1. Attackers own the internet.
  2. Good protection tends to slow down this decryption, not stop it.

本文为原创,转载请注明出处Oschina。

© 著作权归作者所有

hysjw
粉丝 4
博文 1
码字总数 1000
作品 0
嘉兴
技术主管
私信 提问
加载中

评论(5)

hysjw
hysjw

引用来自“我土鳖”的评论

是Binary,不是Binnary。

是哦 打错了 抱歉哈~
hysjw
hysjw

引用来自“Quttap”的评论

不明白楼主的意思. 这些东西一般程序员都会知道的吧..

只是随便写点东西而已 呵呵
Zero__One
Zero__One
不明白楼主的意思. 这些东西一般程序员都会知道的吧..
我土鳖
是Binary,不是Binnary。
ellan
ellan
没有破不了的,只是时间上的问题
苹果准备推广Safari浏览器扩展插件

苹果今天向注册开发人员发出邮件,提醒他们尽快提交自己开发的Safari浏览器插件,以便能够列入苹果即将推出的“Safari Extensions Gallery”(插件艺廊)当中。 上月初的WWDC大会上,苹果发布...

红薯
2010/07/14
780
0
Fedora 17 LibreOffice 办公套件的安装与汉化

甲骨文公司收购 Sun 后,在开源办公软件 OpenOffice 上的决策上与社区产生了冲突。导致开发者出走成立了 The Document Foundation,创建了分支 LibreOffice。 Fedora 17 的 DVD 版本集成了 ...

不必在乎朕是谁
2012/10/04
0
0
写给程序员:我们这一代不是汽车工人

软件开发圈是个奇怪的圈子。尽管有着低失业率、高薪水和美好前景,显然一直处于危险和衰退之中,或者迫切需要警醒。有的开发者将最近软件开发的兴旺仅仅看做是未来衰退的前兆,并且开始写宿命...

oschina
2013/12/16
5.8K
20
[译]Android 安全概述之简介

Android 是一个设计成完全开放的现代的移动平台。Android 应用程序通过使用暴漏给平台的先进的硬件和软件,以及本地和服务的数据,给消费者带来创新和价值。为了保护那价值,这个平台必须提供...

chexEMet
2013/06/25
0
0
51CTO首页周末博客头条记录(2012年)

12.28 [一探究竟,项目为什么会失败?][2012精彩无末日,重生展望2013] [有话跟老板说吗?发给我吧][ 12.21 [奋斗与快乐共享][会的多,会的精,你选择哪个?] [Hadoop的虚拟化之恋][IT女孩的...

懒小米
2018/06/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

ngrok 外网映射工具

ngrok介绍 许多刚学java web的同学(包括我自己)肯定都非常好奇,如何在外网上访问自己做的项目,跟我们本地访问tomcat有什么区别? 今天就向大家介绍一个非常强大的外网映射工具:ngrok.ngrok可以...

edison_kwok
30分钟前
1
0
Spark Streaming的优化之路——从Receiver到Direct模式

          作者:个推数据研发工程师 学长 1 业务背景 随着大数据的快速发展,业务场景越来越复杂,离线式的批处理框架MapReduce已经不能满足业务,大量的场景需要实时的数据处理结果来...

个推
今天
3
0
壮丽70年·奋斗新时代|蒸妙集团熏蒸中会阴熏蒸的神奇好处

聚结相合之处为会。会阴居两阴间,为督、任、冲三脉的起点,三脉背出两阴之间,会聚阴部,因名会阴。会阴,经穴名。出《针灸甲乙经》。会阴别名屏翳、下极、金门。属任脉。在会阴部,男性当阴...

公益传承
今天
2
0
pentaho-kettle-8.2.0.0-R源码开发环境搭建

1.从Kettle官网下载源码,本文使用的是pentaho-kettle-8.2.0.0-R 下载地址:https://codeload.github.com/pentaho/pentaho-kettle/zip/8.2.0.0-R 2.打开eclipse,选择一个新的工作空间,然后设...

gq_2010
今天
1
0
lua web快速开发指南(7) - 高效的接口调用 - httpc库

httpc库基于cf框架都内部实现的socket编写的http client库. httpc库内置SSL支持, 在不使用代理的情况下就可以请求第三方接口. httpc支持header、args、body、timeout请求设置, 完美支持各种h...

水果糖的小铺子
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部