hook GetAdaptersInfos随机返回MAC地址

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
DWORD WINAPI NewGetAdaptersInfo(PIP_ADAPTER_INFO pAdapterInfo, PULONG pOutBufLen)
{
        PIP_ADAPTER_INFO pAdapter = NULL;
        DWORD nRet = NULL;

        // 这里调用HOOK前的原始函数
        nRet = OldGetAdaptersInfo(pAdapterInfo,pOutBufLen);
        if(nRet == ERROR_BUFFER_OVERFLOW)
        {
                free(pAdapterInfo);
                pAdapterInfo = (IP_ADAPTER_INFO *)malloc(pOutBufLen);
                nRet = GetAdaptersInfo(pAdapterInfo,&pOutBufLen);
        }

        if (nRet == NO_ERROR)
        {
                pAdapter = pAdapterInfo;
                while (pAdapter)
                {
                        TRACE("旧MAC: \t%02x-%02x-%02x-%02x-%02x-%02x\r\n",
                                pAdapter->Address[0],
                                pAdapter->Address[1],
                                pAdapter->Address[2],
                                pAdapter->Address[3],
                                pAdapter->Address[4],
                                pAdapter->Address[5]);
                       
                        // 新的MAC为随机值
                        srand((unsigned)time(NULL));
                        for (unsigned int i=0; i<MAX_ADAPTER_ADDRESS_LENGTH; i++)
                                pAdapter->Address[i] = rand() % 255;
                       
                        pAdapter = pAdapter->Next;
                }
        }
}