常见保护攻击:序号

评论:(1)序列号保护机制


数学算法是密码加密的核心,但在一般的软件加密,这似乎不是很关心,因为大多数时候,软件加密的实现本身作为一个编程技巧。但近年来,随着序列号加密程序的普及,在软件加密的数学算法的比例似乎要增加。


U3000









(1)序列号保护机制


数学算法是密码加密的核心,但在一般的软件加密,这似乎不是很关心,因为大多数时候,软件加密的实现本身作为一个编程技巧。但近年来,随着序列号加密程序的普及,在软件加密的数学算法的比例似乎要增加。


让我们在网络上的序列号加密的工作原理看,当用户从网络下载一些sharewaremdash,正与共享软件,他们通常使用时间的限制。共享软件的试用期后,你必须去软件公司登记,然后才能继续使用。注册过程一般是用户自己的私人信息(主要指普通的名字)连同信用卡号码告诉软件公司,软件公司会根据用户的信息来计算用户的代码序列,获得的序列码,根据软件输入注册信息和注册码注册需要的步骤,法律登记信息通过软件验证,软件将取消限制本身,这种加密相对简单,不需要额外的成本,用户购买也非常方便ENT,互联网上的80%个软件就是这样保护的。


我们注意到软件验证序列号的合法性是验证用户名和序列号之间转换关系正确性的过程。一种是根据用户的名字生成注册码,然后与用户的输入代码进行比较。公式如下:


序列号= f(用户名)


但是这种方法相当于软件公司注册码生成复制过程中的用户软件,其实不是很安全,不管转换过程多么复杂,转换过程中只有解密你的程序才能从一个普通的注册程序中提取出来。


另一种是通过注册码验证用户名的有效性,该表达式如下所示:


用户名= F逆(序列号)(如ACDSee,小楼注)


这实际上是软件公司注册码计算过程的逆算法。如果前向算法和反向算法不是对称算法,则解密算子很困难,但这种算法相当差。


所以有些人考虑算法:


f1(用户名)= F2(序列号)


f1和F2是两种完全不同的算法,而用用户名计算的特征词等于f1算法计算的特征词。该算法设计相对简单,保密性比较强,两种算法也比较好,如果能将f1和F2算法设计成不可逆算法,安全性相当好。一旦解密算子找到一个逆算法,这个算法就不安全了,一元算法的设计看起来有多难,很难有大突破。两元钱怎么样


特定值=(用户名,序列号)


这个算法看上去相当不错,用户名称和序列号之间的关系不是那么清晰,一对一的关系,也失去了对用户的序列号,软件开发者必须保持用户名和序列号之间的自身的独特性,但这似乎并不难做的事情,建立一个好的数据库。当然,你也可以把用户的名字和序号为几部分,按照这个思路来构建多个算法。


特定值=(用户名1,用户名2),…序列号1,序列号2……)


大多数现有的序列号加密算法的软件开发人员设计的,他们中的大多数是很简单的。和一些算法,虽然他们已经做了很多工作,往往得不到他们想要的结果。事实上,有许多现有的加密算法,可以使用,如rsades MD4,MD5,,但这些算法用于加密的密文或密码,并有不同的方法来加密序列号。我在这里作为一个例子,希望能有抛砖引玉的作用:


1。软件程序中有加密的密码S。


2。密钥(用户名,序列号)通过上面的两个元素算法获得密钥。


3、清晰的文字a f-des(密文,密钥)用来解密密文到明文的D


4、CRC CRC(明文D)适用于各种CRC统计得到的明文


5,检查CRC是否正确,最好设计几个CRC算法,检查多个CRC校验结果是否正确。


这样,没有已知正确的序列号,就不会计算正确的序列号。


(2)如何攻击序列号保护


找到序列号或修改跳转指令之后判断序列号,最重要的是使用各种工具来定位编号的代码段。这些常用的API包括getdlgitemint,getdlgitemtexta,gettabbedtextextenta,getwindowtexta、Hmemcpy(Windows 9x只),lstrcmp,lstrlen,memcpy(限于lstrcmp)。


1)数据约束的秘密


提出了兽人这个概念,是有限的一种保护,对注册码明文。大多数序列号保护程序,物权登记代码或密码(密码)在某一时刻的记忆,当然,它的位置是不固定的,但在大多数情况下,它会在一系列的内存地址+ 0x90字节来存储用户输入序列的一些地方。这是在加密工具的使用工具的Windows数据传输的约束确定。


2)hmemcpy功能(俗称万能断点)


功能hmemcpy,Windows9x操作系统的内部功能,位于Kernel32.dll,它的功能是复制一块内存中的数据到另一个地方。因为Windows9x系统经常使用这个函数来处理各种字符串,它是使用它作为一个断点很有用。它是在Windows9x平台最常用的断点。没有断点在Windows NT / 2K因为其内核和程序是完全不同的。


3)命令


由于S命令忽略页面不在内存中,你可以使用32位地址数据段描述符30h飞机在整个4GB的搜索(0 ~ ffffffff H)空间,通常在Windows9x。具体步骤是:首先输入名称或错误的序列号(如:78787878),切换到SoftICE下Ctrl D,和搜索命令:


我的30:0 ffffffff '78787878


它会搜索地址:SS:ssssssss(这些地址可能不止一个),然后使用BPM断点监控假冒注册码搜索和跟踪程序是如何处理输入的序列号,因此它是有可能找到正确的序列号。


4)使用消息断点


消息断点wm_gettext和wm_command可用于处理字符串。前者是用来读取控件中的文本,一个缓冲区,如在编辑窗口复制序列号提供程序;后者是用来通知一个控件的父窗口,例如,当输入序列通过点击OK按钮,按钮的父窗口将收到一个wm_command消息。为了显示按钮被单击。


英国商人服务协会XXXX wm_gettext(截取序列号)


英国商人服务协会XXXX wm_command(拦截OK按钮)


你可以提供的SoftICE hWnd命令窗口句柄的信息,或在Visual Studio中使用的间谍工具来获得相应的窗口的句柄值,然后使用英国商人服务协会设置断点的情况下拦截:


0129 wm_command英国商人服务协会