| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
免费IT实战开发视频教程合集分享千里之行 始于足下
共有 10658 人关注过本帖
标题:软件防破解的一种思路(暗桩的一种)
只看楼主 加入收藏
wsg1212
Rank: 1
来 自:518抽奖软件
等 级:新手上路
帖 子:10
专家分:0
注 册:2015-5-6
  问题点数:0  回复次数:10   
软件防破解的一种思路(暗桩的一种)
软件防破解的一种思路(暗桩的一种)

我的一个软件(518抽奖软件),开发的时候,怕用户盗版,还怕用户用了盗版出了问题还怨我们软件不好。 要找到一种识别盗版的好方法、方法要准确。

所以想到盗版软件都修改软件的菜单、窗口里面的文字,去掉购买菜单等。所以软件就检查自己的菜单、窗口是否被修改过,如果修改就是盗版,然后在合适的机会让软件罢工,逼迫用户购买 :)

当然了,如果遇到高手还是会破解,但是一般小白破解的可以防止了。

大家一起交流,这是我的网站:http://www.518cj.net/
搜索更多相关主题的帖子: 盗版软件  开发  网站  用户  
2015-05-06 17:42
贸易飞飞
Rank: 1
等 级:新手上路
帖 子:7
专家分:5
注 册:2015-5-4
  得分:0 
其实,使用数字签名技术更好,如果程序被人重新编译过,就能被程序在自检时立马发现,然后,就……………………
2015-05-11 09:25
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2786
专家分:14619
注 册:2014-10-16
  得分:0 
现在破解的软件很多,而且功能还是挺稳定的。遇到高手很难防得住啊

一片落叶掉进了回忆的流年。
2015-05-11 09:32
贸易飞飞
Rank: 1
等 级:新手上路
帖 子:7
专家分:5
注 册:2015-5-4
  得分:0 
以下是引用诸葛欧阳在2015-5-11 09:32:56的发言:

现在破解的软件很多,而且功能还是挺稳定的。遇到高手很难防得住啊



从理论上讲,数据加密容易解密难,但软件却相反,软件破解容易加密难。
所以,天下没有破解不了的软件,甚至没有很难破解的软件,只是看有没有人、值不值得有人去破解。
顺便说点题外话,一个软件真的有人很想去破解,大家千方百计要去破了它,那作者肯定发达啦。破解的越多,作者收钱也越多,呵呵。

理论上,软件加密,无非就是逼迫用户注册。
用户注册,无非就是输入用户名+序列号、机器码+注册码等。

用户名+序列号是最原始的,最容易对付的,也是好的软件最通用的(破解越多,作者收钱越多),大家共用用户名与注册码即可,我想,我们很少有人没干过这事吧。

机器码,其实也很好办,交钱买个注册码,然后,在新机器上,当程序去读机器码时,进行拦截,把合法注册的那台机器的机器码输入给它,然后让他再去读原来机器对应的注册码,OK,蒙混过去啦。

关于软件防修改,进行自身的MD5自检,也是一种办法,可以检查一下程序是否被人擅自修改过。
破解方法也同机器码,在自检时进行拦截,输入原来正常的MD5,从而蒙混过去。

戏法人人会变,巧妙各有不同。
原理虽然很简单,但作者仍然有一定的技巧来对付破解者,至少使得对方不能那么轻易地得手。
本来这个周末就想写点这方面的,但发帖后看大家兴致不高,故扔下了,有空再接着讲。
2015-05-11 11:08
qq1206695190
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2015-5-11
  得分:0 
2015-05-11 11:14
AleTiff
Rank: 3Rank: 3
等 级:论坛游侠
威 望:4
帖 子:64
专家分:157
注 册:2015-3-30
  得分:0 
不错,不错,很感兴趣的,能不能详细讲讲?比如:

为什么说:
从理论上讲,数据加密容易解密难,但软件却相反,软件破解容易加密难


文中提到的用 MD5 校验,是指加载后校验还是磁盘文件校验?假如不是指磁盘文件校验的话,能不能也大致介绍一下?

另外还特别感兴趣拦截方面都有哪些方法,一般都是使用什么样的工具的。
2015-05-11 13:09
贸易飞飞
Rank: 1
等 级:新手上路
帖 子:7
专家分:5
注 册:2015-5-4
  得分:0 
为什么讲数据的加密容易而解密难,是因为数据加密时,加密算法是经过选择的,算法利用密钥去加密(含知道密钥的人,去合法地解密),他就是一种普通的数学计算,不管算法有多么复杂,但总是可以在有限的步骤里计算出结果来的,而对破解都来讲,算法本身的要求就是————如果不知道密钥,无法从数学的角度,通过有限的步骤来反向计算,只能一个数一个数地试。
    如RSA算法,知道密钥(用私钥签名解密,或者知道公钥来验证签名),进行相应的计算,都是比较容易的,而如果不知道密钥,现在的办法,除了一个数一个数地去试,就只能分解一个很大的数,而这是很难的。
    如果你不了解RSA,我换个表达方式,可能不太贴切,但也能说明这个问题:你用MD5工具,去计算一个文件(如A.txt)的MD5值,这是很容易的,计算后,现在你知道了A.txt的MD5是多少(假设是XXX),但你不告诉别人A.txt这个文件,只是告诉别人,有一个文件,它的MD5是XXX,让别人来猜,这个XXX对应是文件是什么,那别人是很难办得到的。

    数据加密算法的原理,分两类,对称密钥与不对称密钥,原理上有很大的差异,很难在本文当中展开,但总体而言:对合法用户(知道密钥的人),计算是简单的、有限步骤的,而对非法破解者,是很难倒过来推演,从加密结果,反过来计算出原来的明文数据的。




    程序的MD5自检,是指程序启动后,对磁盘当中的程序文件求MD5,然后再与事先知道的正确的MD5进行比较。
    比如,你的程序文件名为“518抽奖.exe”,那么,程序启动后,找到磁盘当中的这个文件,计算一下他的MD5。当然,这个MD5值不可能事前就写入程序当中,因为源码没有编译前,你也不知道最后程序的MD5是多少。这个MD5可以与到另外一个文件当中,如“518抽奖.ini”,然后对这个ini文件进行数字签名。程序启动后,计算出来了程序文件本身的MD5,再读取ini数据,进行数字签名比对(数字签名是无法伪造的)。
    如果别人修改了程序,则“518抽奖.exe”的MD5必然发生变化,与“518抽奖.ini”当中的数字签名无法匹配。而“518抽奖.ini”使用了数字签名,别人又是无法自行修改伪造的。

    我不懂VC,但略懂点加密算法与VB,在VB版前几天发了一个源码示例《一个关于要求用户注册(保护程序版权)的VB6示例》https://bbs.bccn.net/thread-444829-1-1.html,本来打算第二讲就是要讲如何进行通过自检MD5,防止程序被修改的。这是第一部分,讲如何把程序与硬件(示例是硬盘,当然也可以是主板、网卡等)锁定的,就是通常讲的机器码注册。

    关于拦截,是这样的,“难都不会,会者不难”,有许多办法,也有许多工具,我不搞这块,我知道原理,但具体操作不清楚,应该能在网上比较容易地找到资料与工具。
    戏法人人会变,巧妙各有不同,就在这儿啦。
    如果别人知道你利用了什么(比如我的那个示例,知道你利用硬盘的序列号),则可以针对性的,监控到程序去读硬盘序列号的动作,从而进行拦截,输入一个别的机器上已经注册的公用序列号。而对于程序作者而言,就是要摆迷魂阵,不让别人知道你利用了什么数据,不知道该去拦截那个数据。
2015-05-11 18:54
AleTiff
Rank: 3Rank: 3
等 级:论坛游侠
威 望:4
帖 子:64
专家分:157
注 册:2015-3-30
  得分:0 
嗯,原来是这样,谢谢,明白了。我最初以为之所以数据本身不好解,程序本身容易解的原因,是因为程序本身无非就是个PE结构,不仅有标准格式,还最终要加载到内存让CPU执行,所以结构上已经是没有秘密可言。而且很多时候,程序代码就算使用了复杂的加密运算,最终还是要在加载的时候自己帮它解开。嗯,这个我了解了。

程序自身对自身的磁盘文件做数字指纹的方案我觉得不太好,因为可以简单地修改程序,然后把修改后的新程序的校验值放入 ini 文件里,这样,当程序去读取校验值的时候,它会读到被修改后的校验值,而这个校验值与被修改过的程序文件产生的校验值是吻合的,于是程序还是无法知道自己已经被修改。这还是复杂的,简单一点,可以直接利用 FileMon 定位到 ini 读取的代码,然后插入一些代码,禁止程序原来的流程去读取 ini 做数字校验,代之以直接返回数值校验正常的信息。

不过,很多时候都不用去修改原始程序,程序总是要执行,要么正常执行,要么异常执行,执行的过程会留下很多痕迹,比如读了什么文件、打开了几个句柄、启动了几个线程、有没有陷入异常处理、有没有弹出对话框...

总的来说,这是个很大的话题,但还是感谢你的回答。
2015-05-12 10:54
贸易飞飞
Rank: 1
等 级:新手上路
帖 子:7
专家分:5
注 册:2015-5-4
  得分:0 
可以简单地修改程序,然后把修改后的新程序的校验值放入 ini 文件里,这样,当程序去读取校验值的时候,它会读到被修改后的校验值,而这个校验值与被修改过的程序文件产生的校验值是吻合的

    是的,这就是我前边讲的,与机器码相同的原理,破解者拦截输入。你的这个思路,其实都不用拦截了,直接把修改后的校验值(放置在INI文件里)改写掉,更省事。
    所以,通常的应对,就是我说的,要用到数字签名技术。INI文件当中不是直接放置的校验值原文,而是放置的校验值的数字签名,而数字签名,是别人无法伪造的,除非他窃取了你的密钥。

    当然,说到这儿,话题又要拉开了,那验证数字签名的公钥放哪里?
    放外边(如INI文件中),又可以被别人直接给修改了,固定在程序里边,虽然难点,但别人还是能改呀。
    呵呵,矛与盾,就是这样,一攻一守。
2015-05-12 14:53
a1336983871
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2018-5-9
  得分:0 
我有一种非常有效的反破解方法: 将重要指令不要在客户端直接传送,直是通过服务器网关中断,具体见链接。


 参考: https://user.qzone.qq.com/1336983871/blog/1525804039
2018-05-09 02:52







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026897 second(s), 7 queries.
Copyright©2004-2018, BCCN.NET, All Rights Reserved