首页
社区
课程
招聘
软件反破解的几个思路
发表于: 2007-3-24 09:58 18159

软件反破解的几个思路

2007-3-24 09:58
18159
软件反破解的几个思路
整理兼补充:Q389004625管佳明

1、检测调试寄存器

  (1)检测 softice 等系统级调试器

  检测softice的方法有很多.检测主要在驱动里中实现。

  (2)监测用户级调试器用户级调试器具有一下几个特征:

  用户级调试器是采用microsoft提供的dbghelp.dll库来实现对软件跟踪调试的。

  被调试的软件其父进程为调试器。

  所以可以采用如下的方法来检测:

  a.调用api函数isdebuggerpresent()(或是直接采用isdebuggerpresent的反汇编代码,以防破解者拦截对该函数的调用)来检测是否有用户级调试器存在。

  b.监测调试寄存器的方法。

  c.采用tlb的方法,检查父进程的方法. 在winnt下,可以采用进程注入的技术来检测软件的父进程是否正确的方法。

  d.设置seh进行反跟踪。

  由于破解者者可以拦截软件对调试器的检测操作,所以将保护判断加在驱动程序中。因为驱动程序在访问系统资源时受到的限制比普通应用程序少得多,这也给了破解者增加了破解的难度。

  2、crc检校

  增加对软件自身的完整性检查。这包括对磁盘文件和内存映像的检查,以防止破解者未经允许修改程序以达到破解的目的。dll和exe之间可以互相检查完整性。

  为了防止破解者采用替代word,以及edocguard的dll,通过计算dll的crc值来验证。

3、运行时库的重新编写

  破解者往往是在hmemcpy,strcpy等运行时库函数上下断点,通过分析其中的字符串来窥视程序的内部运行。对于edocguard,虽然不是密码的处理,但是内存解密的部分就是使用的memcpy,所以需要重新编写这些运行时库,这个可以从vc或其他编译器的运行时库中的代码改写获得。

  需要修改的是vc6_encry_lib,clinetfile里面,hook dll里面的readfile,驱动里的解密。

  4、花指令的添加

  用花指令来对付静态汇编是很有效的,这会使解密者无法一眼看到全部指令,杜绝了先把程序打印下来再慢慢分析的做法。

  一条指令的长度是不等长的,假使有一条指令为 3 字节长,从它的第二个字节开始反汇编,会看到一条面目全非的指令,‘花指令’就是在指令流中插入很多‘垃圾’,使静态反汇编无法进行。

  5、干扰代码的添加

  在关键部位添加jmp nop cmp 等跳转指令,比较指令以及一些没返回的循环等。插入这些大量无用的运算以误导解密者,防止静态反汇编,增加破解者动态汇编时难度。

  到处贴条件转移

  没有循环,只是跳转,作为有条件的路障,这样,没有简单的反向操作可以执行。

  6、api函数的不规则调用

  在软件中对于api的调用不采用直接调用api的方法,因为这样破解者很容易了解到软件所调用的api,进而了解到软件的工作流程。可以采用由dll的输出表来定位api的函数地址的方法。

  对于调试器来说,在对api设置断点时,是在api函数地址上添加一个int 3指令。所以在调用api时,把api的前几个代码指令复制到调用处,执行前几个代码指令,然后跳转到api函数中。

  这样调试器对于api断点的监视是无效的。

  7、接口与字符串

  dll,com不使用有意义的函数接口.不采用一目了然的名字来命名函数和文件,如openfile( )、setpermisson等。

  所有可能被破解者利用的字符串都不以明文形式直接存放在可执行文件中,采用加密的形式,在需要时进行解密。

  尽可能少地给用户提示信息以防解密者直接了解软件的流程。比如,当检测到破解企图之后,不要立即给用户提示信息,而是在系统的某个地方做一个记号,随机地过一段时间后使软件停止工作,或者装作正常工作但实际上却在所处理的数据中加入了一些垃圾。

  8、输入表输出表拦截的检测

  定时检测软件各个模块的输入输出表是否一致,输入表、输出表中的函数地址是否处于对应模块的内存区域中,防止破解者采用hook api 的方法对软件进程破解操作。

  9、加壳

  软件最终发行之前将可执行程序进行加壳/压缩,使得解密者无法直接修改程序。如果采用现成的加壳工具,最好不选择流行的工具,因为这些工具已被广泛深入地加以研究,有了通用的脱壳/解压办法。另外,采用两种以上的不同的工具来对程序进行加壳/压缩,并尽可能地利用这些工具提供的反跟踪特性。

    10、有条件允许使用加密狗,加密狗尽量选最新的,因为许多解密者对于新狗是没有研究的,即使他本人精通加密狗,也需要花费一段时间才能弄懂,这就为你的软件在第一时间销售争取到足够的时间。
  
  11、发布功能不全的软件提供免费试用,正版则要花钱购买。这样即使解密者破解了软件但因为功能不全,他一样相当于什么也没得到,而只有汇款给你的人才能得到功能齐全的版本。
  

  12、推出无需注册的免费软件,这个不是一般人能承受的起的,但是已经有许多人在做了,试想如果你的软件根本不用注册就能使用,那解密的人就会没有软件可破而下岗。同时你的软件也会在使用者中留下良好的口碑。大家都用你的软件,你就会逐渐成为市场的主流,而你的同行恐怕就会慢慢退出市场了。

  13、在软件中加入一些程序,使软件在运行一段时间后自动丢失信息或自动销毁或突然死机。如财务管理软件,这样一来使用者会担心自己因为使用破解版本造成巨大损失,而不得不主动购买你的正版软件。

  14、
  15、上面没有写是想给你们留下广阔的空间,我相信每一位聪明人看了这13条之后都能独立想出一个行之有效的办法来保护你的软件。那这一条就教由你自己来完成了。
最后一条就是联合起来,搞破解的人可以联合,所以他们破一个软件会很容易,因为那不是某个人的智慧而是多个人的智慧,反过来,搞软件研发的人也应该联合起来,这样你们的保护才能不断的完善。采用高难度算法,如果想在算法上更胜一筹就得换成不可逆算法,让破解者找不到头绪。如同走迷宫,我介绍一种方法,不是CRC,因为我是应试教育的受害者,本人数学只会解方程。如果把方程应用到算法中会很有效。比如
设注册码为:X,Y两部分,
x,y的运算过程是:x,y是方程组:
      2    3
     X Y - X  -331 Y  =19     编程后为:X*X*Y- X*X*X-331*Y=19
                                                              

       2  2
     X Y -X -1312 Y =38
的两根,把你的注册码两部分经过代入方程组中检验,这样破解者推出方程,根本解不出来。
他累死也不会想到 X=26 Y=51,其它值均错误。既你的注册码前一部分是26,后一部分是
51,这样看起来好象并没有多大作用,但是x,y并不完全是固定的数字,可以是你的注册码每一位字母或数字的ascii码相加之和,经过四则运算,再减去一个数的结果。最后x,y的值可以不超过百位数,x,y也就可以按你的需要赋值了。像这样的方程我这里要多少有多少,保证X,Y解全都不一样,当然只是举一个很简单的例子,
真正要去编写是不会写这样简单的流程,我愿意无偿为你提供
多种方程组均带唯一解X,Y值。(本人qq389004625)鲁迅先生说过:世上本没有路,走的人多了也便成了
路,软件本没有算法,研究的人多了,也便成了算法。
或者换个思路,使用指纹或"DNA"识别系统,笔记本电脑很多采用了开机指纹识别,所以小偷盗走,因为没有指纹
密码等于得到一盒废铁。银行的保险柜,有一部分也是采用指纹的,即使有匪徒进入,得不到指纹对应,也会一无所获,软件中也应该加入这样的信息,你的软件只能用特定的指纹
识别,并且指纹随机产生,可以设想,安装上会麻烦一些,第一次运行程序提示你扫描指纹。使用者要有扫描仪,指纹在软件内部随机产生,第一次使用软件,提示注册用的指纹都不一样,而这个指纹的计算规律作者知道,作者计算出指纹,从指纹库中复制一个发送给需要者,软件每次重新安装都会提示输入不同的指纹,并且软件绑定计算机的硬件。软件中加入类似CIH的破坏"基因",三次扫描指纹错误,软件自动重启电脑并直接破坏硬盘引导分区,改写分区表,破坏零磁道,改写G-list,向firmware全部模块中写入错误信息。这样硬盘数据全部丢失,或被完全破坏,在BIOS中显示为0.只有找你才能解决,本人是搞数据恢复的,经常做破坏和修复硬盘的测试,对破坏硬盘数据比较在行。就像你把手机重重扔在地上让它碎了很容易,再想修好它太不容易了。这也是没有办法,只能用对付强盗的办法,免得破解者拿了你的软件翻来覆去地研究。如果遇到这方面的故障我可以帮你们恢复数据,之前我都已测试过,有恢复成功的可能。视恢复程度收取费用了。

如果以上几种方法都做了,所有能想到的办法都用了,仍然没有办法阻止自己的软件被破解,那只好
使用“绝招”了,改行,另谋高就。现在竞争很激烈,利润空间降到了最低点。只靠一种行业养活自己是不行的,破产了,倒闭了之类的事情也都看到过发生过。所以软件同行们,你们也得抓紧时间多学习些其它的技能,或者像我
一样把软件当兼职来做,要不然哪一天你自己的共享软件到了你无力支撑下去的时候,你会选择什么呢?  

(大家应该懂什么叫思路吧,思路不是指具体的做法。)

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (16)
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
2
楼主的思路跟04年时的差不多。已经很落后了

http://www.openrce.org/articles/full_view/28

07年2月22日发表的文章,通过一个破解实例讲解如何对抗现代软件保护机制(包括VM,STOLEN CODE等)。

通过编写IDA processor module和插件,直接静态把壳脱掉了。

另外使用驱动对付破解,利用的只是大多数人对RING0的不了解,正如你对驱动具体能如何反调试一无所知那样。

http://bbs.pediy.com/showthread.php?s=&threadid=41074

再看看我翻译的另一篇文章:TheMida_defeating_ring0【翻译】

你会认识到,调试器只不过是一种工具,即使没有它,还有很多方法可以进行破解。

关于API断点的问题,最好的方法是能自己完全模拟一个API,不使用任何系统调用。

如果你有留意壳的分析文章,你会发现04年已经有人使用这个方法了。

只要你还在使用系统提供的服务,在RING3根本就无法避开来自R0的监视。甚至我只需要在NTDLL下断就足够了。
2007-3-24 14:09
0
雪    币: 82
活跃值: (10)
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
3
这不就是上次对我们有看法的老兄么。。。欢迎回来!
2007-3-26 16:35
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
看来只有用免费的软件才能有效防止破解了。还有就是上传一些功能不全的软件,否则道高一尺魔高一丈。有道是智者千虑必有一失,单一的防破解已经没有
成效了。还好我现在改行研究硬件,偶尔用用PC3000,不过PC3000也有能破解的,真愁人。还好会俄语的人不多,能用好这个软件的人最很少了。
2007-3-27 19:22
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
看来只有用免费的软件才能有效防止破解了。还有就是上传一些功能不全的软件,否则道高一尺魔高一丈。有道是智者千虑必有一失,单一的防破解已经没有
成效了。还好我现在改行研究硬件,偶尔用用PC3000,不过PC3000也有能破解的,真愁人。
2007-3-27 19:23
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
6
看来楼主还没搞懂

不是道高一尺魔高一丈,而是人怕出名,猪怕壮。

THEMIDA的注册机之所以会出现,就是因为它太优秀了。破解它可以满足业余爱好者的虚荣心。另外本来要破解它,得花上很长的时间,假如为了破解一款用了优秀保护机制的软件而花上这么长时间是不划算的。

一旦用它加密的东西多了,破解了它就等于破解大量软件,那么就会吸引更多的人来破它。

此外N年前看的新闻,某国际闻名的CRACKER组织就是俄国的。
2007-3-27 20:36
0
雪    币: 263
活跃值: (10)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
7
最初由 笨笨雄 发布
看来楼主还没搞懂

不是道高一尺魔高一丈,而是人怕出名,猪怕壮。

THEMIDA的注册机之所以会出现,就是因为它太优秀了。破解它可以满足业余爱好者的虚荣心。另外本来要破解它,得花上很长的时间,假如为了破解一款用了优秀保护机制的软件而花上这么长时间是不划算的。
........


不是虚荣心,而是追求技术上的极致。
2007-3-28 08:41
0
雪    币: 721
活跃值: (350)
能力值: ( LV9,RANK:1250 )
在线值:
发帖
回帖
粉丝
8
我现在就不相信有什么东东被别人破解不了的,而无论任何软件保护机制。一切只是时间问题,况且,这个时间不会很长。
因为,只要出了一种保护机制,肯定就会伴随出现相关技术的研究者。
2007-3-28 10:46
0
雪    币: 210
活跃值: (17)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
最好的保护就是不保护!
2007-3-28 10:59
0
雪    币: 212
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
最初由 ljfu 发布
最好的保护就是不保护!




就像linux那样谁去破他啊。。。研究他的代码都来不及。。。或者说反正都是开源,我有空再看吧。。。然后一直都不会去理会。。。

反而vista就是要推广,你不破就得买正版。。。时间上迫使要破了。。。
2007-3-28 13:22
0
雪    币: 16
活跃值: (60)
能力值: (RANK:30 )
在线值:
发帖
回帖
粉丝
11
大家都是这么想呀.
2007-3-29 08:43
0
雪    币: 598
活跃值: (282)
能力值: ( LV13,RANK:330 )
在线值:
发帖
回帖
粉丝
12
打了许多字。。算了。。
2007-3-29 10:20
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
新手上来,先学习学习,谢谢楼主发帖!
2007-3-29 10:26
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
搞清楚什么是crack,
什么是hack.
这两者有本质的不同....
2007-3-30 09:11
0
雪    币: 12
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
只要牛人不去碰,我自己做保护可以保证95%的人都破不了,这个就足够了。
2007-3-30 12:42
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
学习哦!!!!!
2007-3-31 16:34
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
为什么反破解?

服务、升级就好了
2007-4-3 04:53
0
游客
登录 | 注册 方可回帖
返回
//