GetAdaptersAddresses是获取物理网卡的MAC,这里我们通过HOOK,随机的改变它,效果如下图,获取本节MAC可以采用精易模块的MAC_取本机MAC (1)
GetAdaptersAddresses
.版本 2
.DLL命令 GetAdaptersAddresses, 整数型, "iphlpapi", "GetAdaptersAddresses"
.参数 Family
.参数 Flags
.参数 Reserved
.参数 AdapterAddresses
.参数 SizePointer, , 传址
hook
.版本 2
h.安装Hook (“iphlpapi.dll”, “GetAdaptersAddresses”, 到整数 (&macaddress))
h.开始Hook ()
macaddress回调
我们采用了取随机字母来改变物理网课的MAC
.版本 2
.支持库 spec
.子程序 macaddress, 整数型
.参数 Family
.参数 Flags
.参数 Reserved
.参数 AdapterAddresses, , 参考
.参数 SizePointer, , 参考, 数据大小
.局部变量 ret, 整数型
.局部变量 buf, 字节集
.局部变量 lodsiz, 整数型
.局部变量 IPAA, IP_ADAPTER_ADDRESSES
.局部变量 s, 整数型
.局部变量 macdatee, 字节集
.局部变量 MAC_S, 文本型, , "6"
h.停止Hook ()
lodsiz = SizePointer
ret = GetAdaptersAddresses2 (Family, Flags, Reserved, AdapterAddresses, SizePointer)
.如果真 (lodsiz ≠ 0)
' 在这里任意修改网卡信息。
拷贝内存_IP_ADAPTER (IPAA, 取变量数据地址 (AdapterAddresses), Len_IP_ADAPTER (IPAA))
拷贝内存_IP_ADAPTER (lens, 取变量数据地址 (AdapterAddresses), Len_IP_ADAPTER (IPAA)) ' 复制一个新的网卡数据组
lens.pNext = 0
' MAC_S = { “1C”, “B7”, “2C”, “DD”, “FF”, “B1” }
MAC_S [1] = 随机数母2 ()
MAC_S [2] = 随机数母2 ()
MAC_S [3] = 随机数母2 ()
MAC_S [4] = 随机数母2 ()
MAC_S [5] = 随机数母2 ()
MAC_S [6] = 随机数母2 ()
.计次循环首 (6, s)
IPAA.PhysicalAddress [s] = 进制_十六到十 (MAC_S [s]) ' 修改网卡1 的网卡mac
.计次循环尾 ()
.计次循环首 (6, s)
lens.PhysicalAddress [s] = 进制_十六到十 (MAC_S [s]) ' 修改网卡2 的网卡mac
.计次循环尾 ()
拷贝内存 (IPAA.pNext, lens, Len_IP_ADAPTER (IPAA)) ' 将之前拷贝出的新数据地址写入pNext 提供枚举获取
拷贝内存 (取变量数据地址 (AdapterAddresses), IPAA, Len_IP_ADAPTER (IPAA))
.如果真结束
h.开始Hook ()
返回 (ret)
hook dll 源码
我们也可以写一个注入的DLL,采用了EIP注入和远程线程注入来演示,以下是源码:
.版本 2
.支持库 spec
hook ()
_临时子程序 () ' 在初始化代码执行完毕后调用测试代码
返回 (0) ' 返回值被忽略。
.子程序 _临时子程序
' 本名称子程序用作测试程序用,仅在开发及调试环境中有效,编译发布程序前将被系统自动清空,请将所有用作测试的临时代码放在本子程序中。 ***注意不要修改本子程序的名称、参数及返回值类型。
.子程序 hook, , 公开
h.安装Hook (“iphlpapi.dll”, “GetAdaptersAddresses”, 到整数 (&macaddress))
h.开始Hook ()
.子程序 macaddress, 整数型
.参数 Family
.参数 Flags
.参数 Reserved
.参数 AdapterAddresses, , 参考
.参数 SizePointer, , 参考
.局部变量 ret, 整数型
.局部变量 buf, 字节集
.局部变量 lodsiz, 整数型
.局部变量 IPAA, IP_ADAPTER_ADDRESSES
.局部变量 s, 整数型
.局部变量 macdatee, 字节集
.局部变量 MAC_S, 文本型, , "6"
h.停止Hook ()
lodsiz = SizePointer
ret = GetAdaptersAddresses (Family, Flags, Reserved, AdapterAddresses, SizePointer)
.如果真 (lodsiz ≠ 0)
' 在这里任意修改网卡信息。
拷贝内存_IP_ADAPTER (IPAA, 取变量数据地址 (AdapterAddresses), Len_IP_ADAPTER (IPAA))
拷贝内存_IP_ADAPTER (lens, 取变量数据地址 (AdapterAddresses), Len_IP_ADAPTER (IPAA)) ' 复制一个新的网卡数据组
lens.pNext = 0
' MAC_S = { “1C”, “B7”, “2C”, “DD”, “FF”, “B1” }
MAC_S [1] = 随机字母数字 ()
MAC_S [2] = 随机字母数字 ()
MAC_S [3] = 随机字母数字 ()
MAC_S [4] = 随机字母数字 ()
MAC_S [5] = 随机字母数字 ()
MAC_S [6] = 随机字母数字 ()
.计次循环首 (6, s)
IPAA.PhysicalAddress [s] = 进制_十六到十 (MAC_S [s]) ' 修改网卡1 的网卡mac
.计次循环尾 ()
.计次循环首 (6, s)
lens.PhysicalAddress [s] = 进制_十六到十 (MAC_S [s]) ' 修改网卡2 的网卡mac
.计次循环尾 ()
拷贝内存 (IPAA.pNext, lens, Len_IP_ADAPTER (IPAA)) ' 将之前拷贝出的新数据地址写入pNext 提供枚举获取
拷贝内存 (取变量数据地址 (AdapterAddresses), IPAA, Len_IP_ADAPTER (IPAA))
.如果真结束
h.开始Hook ()
返回 (ret)
.子程序 进制_十六到十, 长整数型, 公开, 将16进制文件转换到10进制数值(返回十进制数)
.参数 文本, 文本型
.局部变量 i, 整数型
.局部变量 t, 文本型
.局部变量 结果, 长整数型
.局部变量 局_文本, 文本型
t = “0123456789ABCDEF”
局_文本 = 到大写 (文本)
.计次循环首 (取文本长度 (文本), i)
结果 = 结果 × 16 + 寻找文本 (t, 取文本中间 (局_文本, i, 1), , 假) - 1
.计次循环尾 ()
返回 (结果)
.子程序 随机字母数字, 文本型
.局部变量 tmp, 字节型, , "2"
.局部变量 i, 整数型
置随机数种子 ()
.计次循环首 (2, i)
tmp [i] = 取代码 (取文本中间 (“0123456789ABCDEF”, 取随机数 (1, 16), 1), )
.判断开始 (取文本左边 (到文本 (tmp), 1) = “0”)
tmp [i] = 取代码 (取文本中间 (“123456789ABCDEF”, 取随机数 (1, 15), 1), )
.默认
.判断结束
.计次循环尾 ()
返回 (到文本 (tmp))