本帖最后由 毛超 于 2022-6-19 08:58 编辑
前言:
机器码两种方式
1.取硬件信息 好处:支持检测重装系统变化 劣势:容易被通用过检测工具hook掉,因为取机器码通常为各类信息综合的id,如果hook更改其中一项,则整个机器码换掉,不准确
2.写入固定隐藏文件 好处:通常外面的hook替换工具无效,因为没有取硬件信息,且更换硬盘等设施能继续识别 劣势:重装系统后会消失
推荐:
硬件更换比较,显卡 > 内存条 > 硬盘 > CPU > 主板
综上所述最合适的方式,取简约的硬件信息,取最少的信息,实现外面的工具替换的信息根本不是你所用到的信息,并且兼容做到唯一值 所以,不要选经常更换的硬件,取主板的唯一id和型号是最小最稳健的办法没有之一
比如,可以轻松防住,以下热门的修改工具,还可以兼容区分用户唯一的能力
变量名 | 类 型 | 静态 | 数组 | 备 注 | size | 整数型 | | | data | 字节集 | | | i | 整数型 | | | Length | 整数型 | | | uuid | 文本型 | | | between | 字节集 | | | time_low | 整数型 | | | n | 整数型 | | | withlow | 字节集 | | |
size = GetSystemFirmwareTable (1381190978, 0, data, 0 )data = 取空白字节集 (size )如果真 (size < 1 )返回 (“”)GetSystemFirmwareTable (1381190978, 0, data, size)如果真 (size < 1 )返回 (“”)i = 9 判断循环首 (真) 如果真 (data [i ] = 1 )跳出循环 ()Length = data [i + 1 ]i = i + Length 判断循环首 (data [i ] ≠ 0 或 data [i + 1 ] ≠ 0 )i = i + 1 判断循环尾 ()i = i + 2 判断循环尾 ()i = i + 8 time_low = 取字节集数据 (data, #整数型, i )uuid = 进制_十到十六 (time_low, 真) between = 取字节集中间 (data, i, 4 ) withlow = between 计次循环首 (4 ÷ 2, n )withlow [n × 2 - 1 ] = between [n × 2 ]withlow [n × 2 ] = between [n × 2 - 1 ]计次循环尾 ()between = withlow 计次循环首 (4, n ) uuid = uuid + 进制_十到十六 (between [n ], ) 计次循环尾 ()i = i + 4 计次循环首 (8, ) uuid = uuid + 进制_十到十六 (data [i ], )i = i + 1 计次循环尾 () uuid = uuid + 取文本注册项 (4, “HARDWARE\DESCRIPTION\System\BIOS\BaseBoardProduct”, ) uuid = 校验_取md5_文本 (uuid, , , )返回 (uuid )
|