易语言api hook GetAdaptersAddresses 劫持网卡物理地址

511遇见

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))

教程获取下载:


发布日期:

所属分类: 易语言 标签: