首页
社区
课程
招聘
奇思妙想:让同一个KEY在不同的硬盘上照样使用 [讨论]
发表于: 2006-6-24 18:26 5635

奇思妙想:让同一个KEY在不同的硬盘上照样使用 [讨论]

2006-6-24 18:26
5635
现在很多软件采用一机一码的注册方式,其中又以取硬盘ID的注册方式居多

我们知道,WIN32下的应用程序与系统打交道,都是通过调用API实现的,那么注册软件是通过什么来取得

硬盘ID的呢?我想也是通过API吧?

   如果我们挂勾这个API,也就是常说的API HOOK技术,让这个API返回我们指定的硬盘ID号,不就

变相地达到了修改硬盘ID号的目地!我相信这个也应该很容易实现的.

   好,假如我们现在有一个软件的正版KEY,它对应的硬盘ID号是159544386,我们写一个DLL(key.dll)

它的作用是修改载体(注册程序)取硬盘ID的API,使注册程序调用它时只返回我们指定的硬盘ID号(159544386)

  我们现在要做的是,怎么让注册程序加载这个DLL,不知道这样可以吗?

我们先用Stud_PE查看注册程序入口点和Functions中LoadLibraryA的地址,记下,同时也记下这个地址,

用OD载入程序,点右键,搜索→二进制字符,出现一个搜索栏,在HEX栏里输入大量的0,点确定找到程序空

白代码处,我找到了这个地址:"00545B7E 0000 add byte ptr ds:[eax],al" ,下面有很多这样的空白行

就用它了,记下先,来看看我记下的东西:

LoadLibraryA的地址为:0054641C,原入口点为004FF657:,空白代码为00545B7E;

然后我们在找到的空间处顺序出写入下面的代码:

00545B7E   push 00545B90 ;参数入饯

00545B83   call dword ptr[0054641C] ;调用LoadLibrary加载key.dll

00545B89   jmp 004FF657   ;跳到原来的入口点

00545B90   ascii "key.dll",0   ;和第一句代码对应

修改后,用keymake做个注册机,和key.dll以及KEY一起发布,放在要破解的程序的相同目录,运行注册机就OK了.

已上是我用汇编写HOOK API时忽然想到的,不知道行的通吗?

我本来是想用汇编写个这样的DLL,但汇编的一些基本用法我还没搞清楚,正在论坛请教呢.

还有取硬盘ID的API具体是什么?

如果那位大虾知道答案的话请一定要告诉我哦,我好写一个这样的DLL,

我以易语言4.03版做了个实验,插入key.dll成功,如果我们在key.dll里面勾住取硬盘ID的API,那么

呵呵,不用我说就知道结果了吧!放上实验品供大家研究

http://bbs.chinapyg.com/viewthread.php?tid=5690&extra=page%3D1

再帖上取硬盘ID的API供大家研究

GetVolumeInformation

VB声明
Declare Function GetVolumeInformation Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long
说明
获取与一个磁盘卷有关的信息
返回值
Long,非零表示成功,零表示失败。会设置GetLastError
参数表
参数 类型及说明
lpRootPathName String,欲获取信息的那个卷的根路径
lpVolumeNameBuffer String,用于装载卷名(卷标)的一个字串
nVolumeNameSize Long,lpVolumeNameBuffer字串的长度
lpVolumeSerialNumber Long,用于装载磁盘卷序列号的变量 lpMaximumComponentLength Long,指定一个变量,用于装载文件名每一部分的长度。例如,在“c:\component1\component2.ext”的情况下,它就代表component1或component2名称的长度
lpFileSystemFlags Long,用于装载一个或多个二进制位标志的变量。对这些标志位的解释如下:
FS_CASE_IS_PRESERVED 文件名的大小写记录于文件系统
FS_CASE_SENSITIVE 文件名要区分大小写
FS_UNICODE_STORED_ON_DISK 文件名保存为Unicode格式
FS_PERSISTANT_ACLS 文件系统支持文件的访问控制列表(ACL)安全机制
FS_FILE_COMPRESSION 文件系统支持逐文件的进行文件压缩
FS_VOL_IS_COMPRESSED 整个磁盘卷都是压缩的
lpFileSystemNameBuffer String,指定一个缓冲区,用于装载文件系统的名称(如FAT,NTFS以及其他)
nFileSystemNameSize Long,lpFileSystemNameBuffer字串的长度

Top

===========================

0012F930  /CALL 到 GetVolumeInformationA 来自 e.00518D61
0012F934  |RootPathName = "D:\"
0012F938  |VolumeNameBuffer = NULL
0012F93C  |MaxVolumeNameSize = 0
0012F940  |pVolumeSerialNumber = NULL
0012F944  |pMaxFilenameLength = 0012FA9C
0012F948  |pFileSystemFlags = 0012FAA4
0012F94C  |pFileSystemNameBuffer = NULL
0012F950  \pFileSystemNameSize = NULL

希望大家可以写出个KEY.DLL

我先用易的DLL(易写DLL要在装了易语言的机器上才能用)写个先用用

HOHO

也希望那个汇遍大虾能写个改写内存的汇编(Masm)代码给我学习学习

谢谢了

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

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
这好像是分区卷标!不是硬盘ID。
分区卷标,可以用软件直接修改!
硬盘ID,是物理表示,一般不容易更改,要专业软件才可以!读取时需要直接读硬盘物理端口!
2006-6-24 22:29
0
雪    币: 246
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
与其这么麻烦,还不如直接将程序爆掉。
2006-6-25 01:49
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
同意楼上的观点
2006-6-25 09:30
0
雪    币: 750
活跃值: (228)
能力值: ( LV9,RANK:780 )
在线值:
发帖
回帖
粉丝
5
最初由 gz818 发布
这好像是分区卷标!不是硬盘ID。
分区卷标,可以用软件直接修改!
硬盘ID,是物理表示,一般不容易更改,要专业软件才可以!读取时需要直接读硬盘物理端口!


啊,那程序最终调用了API吗?
2006-6-25 18:03
0
雪    币: 270
活跃值: (176)
能力值: ( LV12,RANK:370 )
在线值:
发帖
回帖
粉丝
6
没有.
这样的例子代码网上很多,可以下个自己看看.
2006-6-25 18:20
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
物理盘的序列号一般采用
DeviceIoControl     CreateFile("\\.\Scsi0:"
等方式获得
2006-6-25 22:20
0
雪    币: 1489
活跃值: (235)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
http://bbs.pediy.com/showthread.php?s=&threadid=22008
2006-6-26 09:25
0
雪    币: 200
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
9
现在的软件提取硬盘的ID可没那么简单:他是把硬盘的ID影射到注册表里,而且这个ID还不是明码的,解密是转来转去,转到你头痛,我前两个月跟这种加密的软件跟到傻,最后放弃了,不知这类的又是怎么改?
2006-6-26 18:10
0
雪    币: 3
活跃值: (353)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
我在linux下,曾经费了很多力气写了一个内核模块来模拟硬盘.
2006-6-26 18:35
0
游客
登录 | 注册 方可回帖
返回
//