
原帖由 关毅仁 于 6-10-2010 18:16 发表
20年前,我做程序的时候,还没有安装的概念,全都是copy。我为了防拷贝,就在程序第一次运行的时候,将硬盘的最后一个扇区置为bad标志,然后回写5寸源盘,记录当前硬盘的柱面数磁道数。如果用源盘拷贝到新机器,磁道 ...

原帖由 四香油饼 于 7-10-2010 16:23 发表
我记得刚刚玩计算机的时候,江湖上流传着各种“硬拷贝”软件,记得有一种将HDCOPY来着,就把软盘按扇区一个一个的复制过去。从APPLE II 到 PC-XT,一直到386时代,有了光盘后,这种加密方式才慢慢不留行了。当时真是 ...

3.系统启动时调用c++的解密算法解密dll到内存中,验证数字签名之后将解密后的dll镜像直接在内存中加载。
4.将加载核心的程序混淆化。在系统多个地方进行数字签名验证
我们使用C++加密算法是一个大学生的毕业设计,并非标准算法。加密和解密的代码是分离的。加密代码永远不会发布。
原帖由 GPS 于 11-10-2010 17:00 发表
很久以前,用针在5寸盘上扎个洞,这样的话,在一个扇区里有部分可读,部分不行,而且,很难准确重现。
破解那些行业软件,常常用脱壳程序(因为这些软件加密较差),就是把if else的那个地方找到,记得有不少脱壳的 ...
原帖由 四香油饼 于 7-10-2010 16:23 发表
我记得刚刚玩计算机的时候,江湖上流传着各种“硬拷贝”软件,记得有一种将HDCOPY来着,就把软盘按扇区一个一个的复制过去。从APPLE II 到 PC-XT,一直到386时代,有了光盘后,这种加密方式才慢慢不留行了。当时真是觉得像是道和魔两边在斗法一样,各种加密/解密方法层出不穷,让人叹为观止。
我记得有一种号称无法破解的软盘加密方法,是把软盘上特定的磁道用激光打上孔,孔很小,用肉眼看不出来,但写入的数据再读出就会出错,而且每次还不一样,好像就是利用这个原理,再牛的拷贝软件也复制不了了,等等等等
原帖由 nilei 于 17-10-2010 16:18 发表
1. 完全没有必要用c++做这个加码解码的,c#都可以做。项目中多一个语言,维护成本上去很多。
2. 这类加密解密用一个现成库里的非对称的算法,任何中专毕业生1小时就能写完,安全性比本科生玩玩得方法好很多。
“加载核心的程序混淆化”我不是很明白什么意思,难道c#实现的别的部分的代码没有做?把原代码直接送给客户了?
原帖由 woodheadz 于 17-10-2010 22:28 发表
用C#做的加密解密对于破解者就像是层纸一样,用reflector之类的东西一看,什么东西都清清楚楚。解决这个问题的方法之一,就是你不太明白的混淆化(obfuscte)。
对于我们的项目,我们再加上了第二层就是C++对二进制 ...

原帖由 key 于 17-10-2010 22:37 发表
1. 什么叫做“完成度很低”?
2. 按你的说法,我是否可以理解:只要一个加密算法的加密程序不公开,则被加密系统永远安全?
3. 如果 2 的回答为true,我再想请教,为什么这么多年来,数据加密还需要这么多研究?
原帖由 key 于 17-10-2010 21:37 发表
由于木头同学提到小弟的名字,礼貌上回一贴。![]()
主要是请教几个问题:
1. 什么叫做“完成度很低”?
2. 按你的说法,我是否可以理解:只要一个加密算法的加密程序不公开,则被加密系统永远安全?
3. 如果 2 ...
代码混淆,是将计算机程序的代码转换成一种功能上等价,但是难于阅读和理解的形式的行为。代码混淆可以用于程序源代码,也可以用于程序编译而成的中间代码。执行代码混淆的程序被称作代码混淆器。目前已经存在许多种功能各异的代码混淆器。
代码混淆的主要目的是为了保护源代码,阻止反向工程。反向工程会带来许多问题,诸如知识产权泄露,程序弱点暴露易受攻击等。使用即时编译技术的语言,如Java、C#所编写的程序更容易受到反向工程的威胁。
代码混淆的主要的方法有:
将代码中的各种元素,如变量,函数,类的名字改写成无意义的名字。比如改写成单个字母,或是简短的无意义字母组合,甚至改写成“__”这样的符号,使得阅读的人无法根据名字猜测其用途。
重写代码中的部分逻辑,将其变成功能上等价但是更难理解的形式。比如将for循环改写成while循环,将循环改写成递归,精简中间变量,等等。
打乱代码的格式。比如删除空格,将多行代码挤到一行中,或者将一行代码断成多行等等。
代码混淆器也会带来一些问题。主要的问题包括:
被混淆的代码难于理解,因此调试除错也变得困难起来。开发人员通常需要保留原始的未混淆的代码用于调试。
对于支持反射的语言,代码混淆有可能与反射发生冲突。
代码混淆并不能真正阻止反向工程,只能增大其难度。因此,对于对安全性要求很高的场合,仅仅使用代码混淆并不能保证源代码的安全。
原帖由 coredump 于 18-10-2010 10:44 发表
被混淆的代码难于理解,因此调试除错也变得困难起来。开发人员通常需要保留原始的未混淆的代码用于调试。
对于支持反射的语言,代码混淆有可能与反射发生冲突。
原帖由 coredump 于 18-10-2010 10:44 发表
比如代码:
if RSAVerify(MD5(Key), MD5(Code), e, n) then
ShowMessage('注册成功!')
else
ShowMessage('注册失败!');如果改成
if not RSAVerify(MD5(Key), MD5(Code), e, n) then
...
原帖由 key 于 18-10-2010 11:12 发表
http://mobile.dzone.com/print/28411
这是Android环境下的一些防盗版的方案,老core不妨参考一下,
或者对于 N 记的开发有一定参考价值。不过 N 记是基于 C++ 的,
这方面有天生的优势。

原帖由 ericvan76 于 18-10-2010 15:34 发表
楼上和楼上的楼上也别抬杠了,破解软件大都不是从算法和密钥下手的,非对称加密本身没有问题,这只是一种基于密钥的加密技术,和基于算法的加密技术(好比说你自己写一个算法,永远不公开),从效果上来说并没什么本 ...
原帖由 woodheadz 于 18-10-2010 10:28 发表
而我们使用现在的做法后,破解者基本得到加密key也无法重新制作出新的授权key来(要是他能根据解密程序的二进制代码推写出加密的算法,那么我只有对他磕头了)
| 欢迎光临 FreeOZ论坛 (https://www.freeoz.org/ibbs/) | Powered by Discuz! X3.2 |