对于密届高手脱壳或者解密可能是很简单的事情,但是否对于一些带狗软件有时候也觉得麻烦。目前较新的狗程序都采用对硬件通讯纪录的方法,普通的方法是无法跟踪到的,如果用拦截端口的方法实在太麻烦。在这里我将自己整理的复制狗方法希望对大家有所帮助。
基础知识什么是加密狗(基础知识高手不要看了)
首先用一点儿时间来谈谈什么是加密狗(dongle),dongle经常被认为是硬件保护,它是一个可被附加在计算机并口、串口或USB上的小插件,它包含厂家烧制的EPROM和定制的专用集成电路。dongle保护的的原理就是软件开发者在程序里经常检查dongle中的单元(Cell)的并对比返回值,这种检查可以是直接读单元或者是使用某种内部算法(此时单元受到保护无法直接读)。尽管任何称职的硬件工程师都能很容易地分析出dongle是如何实现的,但是实际上并不用那么麻烦,dongle保护最薄弱的环节在于应用程序要通过dongle厂家提供的函数库来访问dongle,而应用程序和这些函数的连接通常是很弱的,因为软件开发人员不管这些函数如何访问dongle,它只检查函数的返回值是表示成功还是失败,那么只要打补丁让所有函数返回成功即可,而且这些函数通常并不多,从厂家提供的API手册中很容易查到这些函数的定义(参数和返回值)。一般来说dongle解密不需要原来的正版狗。
必须指出从(西方)法律上来说,破解狗与调试独立的程序有一些细微的不同,后者是完全合法的,但前者在德国有被判为非法的案例(即使你已经购买了正版的软件),美国的“数字千年版权法案”(DMCA) 有一个著名的但引起强烈争议的“反规避条款”(1201),事实上对软件狗的解密做了极其严格的限制,但因为遭到消费者和甚至一些厂商强烈反对,因此在2000年10月28日,1201a条款规定了七种例外,在公平使用的前提下,把软件狗的研究从中删除(Dongles are exempt from Section 1201a of the Digital Millennium Copyright Act),因此,我理解,至少在美国,对软件狗的研究甚至复制是合法的。我不知道我国法律是如何规定的,好在我们不讨论国产软件。
下面是一些著名dongle厂商的官方网站,从中可以下载用户手册,应用程序接口(API)和其它相关资料,也可以了解dongle技术的最新进展。
比如说,从彩虹公司提供的API文档中我们可以了解到Sentinel Superpro(以下简称 sspro)的一些情况,sspro有64个内存单元(memory cells),其中56个可以被用户使用,这些单元中的每一个都可以被用为三种类型之一:算法、数据值和计数器。
算法(algorithm)是这样一种技术,你用sproQuery(queryData)函数访问它,其中 queryData是查询值,上述函数有一个返回值,被加密的程序知道一组这样的查询值/返回值对,在需要加密的地方,用上述函数检查狗的存在和真伪。对于被指定为算法的单元,软件上是无法读和修改的,即使你是合法的用户也是如此,我理解这种技术除了增加程序复杂性以外,主要是为了对付使用模拟器技术的破解。
数据值和计数器就比较好理解了,数据值用户存储在可读写的单元中的数,用户可以用它存储自己的信息,计数器(counter)是这样一种单元,软件开发商在其软件中使用sproDecrement函数可以把其值减一,当计数器和某种活动的(active)算法关联时,计数器为零则会封闭(deactive) 这个算法。
下面是sspro的所有API函数:
RNBOsproActivate() 激活或反激活一个算法以便它能被RNBOsproQuery()函数使用。
RNBOsproDecrement() 把计数器或一个可读写的单元减一。
RNBOsproExtendedRead() 读任一非隐藏单元的值和连接码(access code)
RNBOsproFindFirstUnit() 查找指定的狗。
RNBOsproFindNextUnit() 查找同一ID的下一个狗。
RNBOsproFormatPacket() 初始化一些数据结构,这个函数必须在其他API函数之前调用。
RNBOsproGetVersion() 返回驱动程序的版本。
RNBOsproInitialize() 驱动程序初始化。
RNBOsproOverwrite() 可以修改除保留单元00–07之外的任何单元的值和连接码。
RNBOsproQuery() 提供一个查询值,给应用程序返回一个加密的返回值。
RNBOsproRead() 读非隐藏单元的值。
RNBOsproWrite() 改变某单元的值。
DesKey的API函数就更简单了: Dk2DriverInstalled 检查驱动程序是否安装
findDk2 检查DK2狗是否安装
dk2readmemory 读DK2某个单元的内容
dk2readdowncounter 读计数器的值
dk2decrementDowncounter 计数器减一
具体的函数细节可以查看sspro和Deskey的开发者指南(本站有下载)
了解了上述函数之后,你就可以使用IDA对你的目标进行分析,然后应用相应的sig符号表(本站有下载),IDA就可以在反汇编的结果中找到上述函数(如果有的话),接下来就看你的汇编语言工夫和思维是否清晰了。
加密狗的分析
那一款普通的并口加密狗来说,某个雕刻机控制软件用的。既然上文中提到加密狗的程序是存放在eprom中的,我们可以简单的推理以下如果我们直接复制eprom的数据然后再做对应的辅助电路pcb就可以复制了,pcb复制很简单这个没有什么好说的关键是eprom,eprom用于加密狗的一般分为2种一种是只读型存储器,此类芯片只能对内部硅芯片做一次写操作,然后其对应的写入脚就被烧断了。常见有atmel公司的24rc02。另一种是可读写多次存储器这种芯片往往用于需要升级的程序的加密狗一般都为传行芯片。这里我先不讲如何将芯片的数据读取出来,我们先看看其辅助电路吧!
有的朋友可能要问为什么要先看辅助电路,原因很简单eprom的型号有几千种如果他们将芯片的型号打磨掉你怎么知道他是什么型号的又怎么知道其引脚定义呢。废话不多说。不论什么芯片他要与计算机通讯就需要一片专用的通讯协议芯片,并口通讯一般都是才用74hc367或者cd4503这两种,串口的一般都用max232。我现在手上这个狗就是采用了4503来做通讯电路的,由此可判断它采用的传行芯片是24rc 24rf系列,我是怎么判断的呢?很简单加密狗的厂家都不是傻子4503只能用来给24 25系列芯片作通讯协议24c 25c系列的芯片都是无法对芯片加密的,而且这两个系列的芯片都是可读写的。24rc 24rf系列是atmel公司推出的专用于加密数据保存的芯片类似于单片机的工作机制。普通用编程器读写的方法是行不通的,但这不是不能破解了,国外早已经有了对应的仿真程序编程器,说是编程器其实很简单我在下面已经附了这个度取数据用的编程器电路图和上位机软件,24rf芯片的写入脚和读取脚都是内部烧断的,我们需要从另外的三个脚度取数据详细方法看我的附件。
关于24RF的应用领域很多加密狗 笔记本密码 手机密码 通讯密码 车载音像等都用这个芯片可见ATMEL 对这个芯片的安全系数之自信,不过可能也到头了呵呵,芯片分为8个脚的和14个脚的2中不论是否打磨型号都可以用我下面提供的程序读一下不会损坏芯片本身的。另外如果读不出来数据有可能是你找错芯片了现在有些流氓狗厂家用GAL做通讯的,可以测量一下第一脚于 第四脚是否是导通的如果是就说明这个芯片是辅助芯片而不是数据芯片。后面我会继续更新谢谢
目前最新的加密狗都采用usb接口的其对应的eprom当然也有所不同了下面是我收集的常见狗采用的芯片
M29F102BB. W49L102. AT49F1024. M29W102BB M50xxx MB162LV03等这些芯片要读取的话就需要用高档的编程器了我现在也没找到可用的简单方法来读取这些芯片。