谁动了我的代码(1)

原创 2006年06月07日 02:39:00

  前几天在一家公司看到他们在使用的一个很简单的套打软件,发现那是我写的,仔细一看,又好像不是,认真看过之后,确认是我写的,那个汗啊。那原来是我帮学校写的一个毕业生派遣证的打印,当初应学校的要求,把每个部分都做成了可设置的,结果现在改头换面一下,就成别人的了,我当时那个郁闷啊!!
  不过后来想想,自己也经常“利用”别人的成果,以前做的一些网站都是下载别人的源码,稍微做一些修改就OK了,很多软件的核心技术也是网友的杰作。
  如此看来,大家对代码的保护还很不够,所以我就去图书馆找了几本书,好好地研究了一段时间,现在就来看看,谁会动我的代码,谁动了我的代码!

(本文主要灵感来自清华大学出版社的《Cracker终结者——提供最优秀的软件保护技术》一书,在此对原作者Pavol Cerven和译者韩宏莲致敬!)

  “软件的保护和破解就像是盾与矛的关系,但在这场看不见硝烟的拉锯战中,解密高手却往往成为胜利者。双方在信息与资源上常常存在巨大的不对称性,这也许是战局不平衡的一个重要原因。”

  什么人会对你的代码感兴趣呢?
  首先要看你的Project是哪种类型的。如果是通用的项目,那就意味着很多人可以拿到你的Application,“开发者往往对解密者的能力和人数估计不足,这也是软件保护开发者可能犯下的严重错误。”解密者往往会在解密之后“免费发布解密软件和信息,使你的软件失值,并将利益转给解密软件的用户”,也许你会觉得奇怪,这样做对那些解密者有什么意义呢?大家有没有见过Microsoft Office 2003 绿色中文免安装版,直接复制到任何地方就可以用了,不需要安装,解密者在分发解密软件的时候往往都会添加一些版权信息,这样,他在解密界就名声大躁了!再看微软的操作系统,哪一个不是被人破解的,很多破解版本都修改了注册信息,试想一下,往电子城一走,每三个公司就有一个用的是“你”的操作系统,那种感觉如何?!
  也许你会说,你写的虽然是通用的项目,但是有特定的用户群的,这样的软件应该没有人要破解吧?错了,从使用的角度来讲,软件的核心是数据,如果你的软件被人破解了,那么系统中的机密数据可能也就要成为“公开的秘密”了。这应该不是你所希望看到的吧!
  或者你要说,你写的只是一些实用型的小软件,本身就是免费的,那么OK,你完全可以做成OpenSource的啊,这不是本文讨论的范畴咯。

  那么又是什么人动了你的代码呢?三大帮凶:调试程序、反汇编程序和反编译程序!
  调试程序:设置断点,逐语句(指令)跟踪调试,就跟我们用高级语言编程时所用的各种IDE类似的,所不同的是,调试程序只能看到每一步执行之后内存中对应的值,但是这些对于解密者来说就已经足够了。虽然说编程语言的级别越高,跟踪就越困难,但这是把双刃剑,使用高级语言进行软件保护要显得更困难。
  反汇编程序:反汇编程序就是把程序从二进制代码转化为汇编语言程序,显然,不管你的程序是用什么编写的,它总可以转化成汇编语言程序。
  反编译程序:反编译程序是把应用程序代码转化成原代码,显然不同的语言必然有不同的反编译程序,反编译程序转化得到的原代码虽然不可能跟实际的原代码完全一样,但是有一定经验的解密者,还是可以很容易地看出你的编码思路,从而找到他感兴趣的部分。

  Pavol Cerven在他的书里向我们介绍了几种解密者最常用的程序,我没有用过,但为了能“知已知彼”,还是要了解一下:

软件名称

操作系统

适用语言

官方网站

备注

SoftICE DOS/Windows 9x/NT   www.compuware.com  
TRW2000 Windows 9x      
WinDasm Windows     现已不再更新
SmartCheck   Visual Basic    
IDA Pro     www.ccso.com 全称为Interactive DisAssembler Pro, 交互式反汇编程序专业版
Sourcer DOS   www.v-com.com  
Hex WorkShop     www.bpsoft.com  
Hiew DOS     全称为Hack's View, 黑客视图

 

下一次要讲讲软件保护的几种常用方法。

 

《谁动了我的代码》

本博决定推出《谁动了我的代码》系列文章,文章不定期更新,主要是记录自己在公司的收获和软件方面的些许思考。《谁动了我的代码》标题创意取自于《谁动了我的奶酪》,在这个变化飞快的世界里,我们要做的就是Cha...
  • boluotou
  • boluotou
  • 2009年02月22日 20:19
  • 166

谁动了我的代码(1)

  前几天在一家公司看到他们在使用的一个很简单的套打软件,发现那是我写的,仔细一看,又好像不是,认真看过之后,确认是我写的,那个汗啊。那原来是我帮学校写的一个毕业生派遣证的打印,当初应学校的要求,把每...
  • stonecn
  • stonecn
  • 2006年06月07日 02:39
  • 1523

保护你的代码——谁动了我的组件?

来源:中国IT实验室  作为一名.NET开发人员,你没日没夜地写代码,你的组件运行在越来越多的机器上。忽然有一天,你发现你写的组件被引用在别人写的项目里,而且最可气的是,那人竟用你的名义在做破坏它人系...
  • michelsn
  • michelsn
  • 2007年11月29日 10:11
  • 482

谁动了我的代码?

      今天调试一个游戏逻辑系统时发现前两天做的一些功能失效了,诧异不已。后来查了N久,才发现,被同事改了一段代码。而这段代码是在他的模块响应我这边的模块接口。也许是出于好心,也许是为了规划其模块...
  • skydesign
  • skydesign
  • 2011年01月19日 22:16
  • 304

谁动了我的代码

前两天碰到一个问题,debug版本正常,编译成release版本之后,程序停到一个死循环上了,后面的代码竟然都没了。然后开始没有根据的怀疑,是不是别人的库有问题之类的,然后把别人的库都编译成relea...
  • tracing
  • tracing
  • 2013年05月04日 09:57
  • 856

不同人对BUG的反应,程序员:谁动了我的代码?

代码女神镇楼! Bug 是个很有趣的东西,有代码的地方就有它,不同人对待 Bug也有不同的反应,一起来看吧~ 程序员:谁动了我的代码? 这确实是一种似曾相识的感觉,我...
  • w3cschoolcn
  • w3cschoolcn
  • 2016年08月10日 16:14
  • 360

MonkeyRunner源码分析之-谁动了我的截图?

本文章的目的是通过分析monkeyrunner是如何实现截屏来作为一个例子尝试投石问路为下一篇文章做准备,往下一篇文章本人有意分析下monkeyrunner究竟是如何和目标测试机器通信的,所以最好的办...
  • zhubaitian
  • zhubaitian
  • 2014年10月19日 15:11
  • 3731

谁动了我们的DNS

 文章属性:转载文章来源:internet文章提交:root (webmaster_at_xfocus.org)本文遵从GPL协议,欢迎转载|=----------------------------...
  • yjz0065
  • yjz0065
  • 2006年10月16日 14:12
  • 3625

Android,谁动了我的内存(1)

Android,谁动了我的内存(1) 2011-03-11 00:03:57 标签:内存泄露 android OutOfMemory Bitmap Cursor 版权声明:原创作品,...
  • pi9nc
  • pi9nc
  • 2013年09月09日 21:42
  • 479

Android,谁动了我的内存

一、 Android的内存机制     Android的程序由Java语言编写,所以Android的内存管理与Java的内存管理相似。程序员通过new为对象分配内存,所有对象在java堆内分配空...
  • comkingfly
  • comkingfly
  • 2012年03月12日 17:37
  • 566
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:谁动了我的代码(1)
举报原因:
原因补充:

(最多只允许输入30个字)