快捷方式,包含内外网筛选

2019-10-14 17:24 来源:未知

一,制作U盘启动盘

 

  随着个人电脑的“飞入寻常百姓家”,喜欢DIY电脑的发烧友们也越来越多。

  安装系统是DIY最基本的要求,很容易做到;

  那么如果要求用U盘装系统呢,你可能会说简单,直接下载个老毛桃或是大白菜一类的软件一键就搞定了;

  那么如果要求用系统自带的命令行工具制作U盘启动安装盘呢?

 

1、Win+r 组合键打开 “运行”,输入 “regedit” 打开 注册表

简介

在Socket编程的时候,我们需要实时获取我们所需要的IP地址。例如在编写后门的时候,我们可能需要获得有效的外网IP或内网IP;有时候我们可能需要判断我们获取的是否是虚拟机网卡,这时候就需要对每一张网卡上的特征进行识别。以下笔者总结了一些常用的处理方法供大家参考。


参考资料:1. 提取网卡信息方法
              2. 虚拟与物理网卡区分方法

工具/原料:

  U盘一个(4G可能不够用,最好8G
  系统iso镜像一个(这里用Win10企业版)

 

2、依次打开注册表,定位到以下位置:

C++代码样例

方法/步骤:

 

  1,把要制作成U盘启动安装盘的U盘,插入到电脑的USB接口中,确保资源管理器已经正确识别U盘。下图中是小编的8G的U盘,实际有效容量是7.60G。

  2,右键左下角开始按钮,选择“命令提示符(管理员)”。

  3,在命令行中输入“diskpart”(不包括双引号,下同)后按回车键,此命令是Windows系统自带的硬盘分区工具。

  4,在命令行中输入“list disk”后按回车键,此命令用于显示电脑上所有的硬盘(注意,diskpart会把U盘也看成硬盘),从“大小”一栏中一下就能看到U盘被看做了“磁盘 1”,这一步非常重要,因为后面会格式化,所以一定要仔细确定哪个是U盘并记住U盘的编号。

  5,在命令行中输入“select disk 1”后按回车键,此命令用于选择接下来要操作的磁盘,这里的“1”就是小编的U盘编号(从上一步所得)。

  6,在命令行中输入“clean”后按回车键,此命令用于清除U盘上的所有数据,所以在执行此步骤之前,如果U盘中有重要数据,务必备份,否则会被清除无法恢复。

  7,在命令行中输入“create part pri”后按回车键,此命令是“create partition primary”的简写形式,作用是在U盘上创建主分区。

  8,在命令行中输入“select part 1”后按回车键,此命令是“select partition 1”的简写形式,作用是选择分区1,也就是上一步创建的主分区。

  9,在命令行中输入“format fs=fat32 quick”后按回车键,此命令用于快速格式化主分区为fat32文件系统格式。

  10,在命令行中输入“active”后按回车键,此命令用于把当前分区标志为“活动”。

  11,在命令行中输入“exit”后按回车键,此命令用于退出diskpart分区工具。

 

整个过程截图如下:

图片 1

 

图片 2

  

OK了,现在U盘已经变成可启动U盘了。你只需要把下载好的Win10系统的iso文件解压到U盘中即可。是的,就是解压iso文件,任何解压软件都可以,关键是解压到U盘的根目录中。

接下来就是设置从U盘启动了,启动之后就自动开始安装Win10系统,过程和使用光盘一致。祝你DIY愉快!

 

注意事项:纵观整个过程,最重要的就是创建一个活动主分区。

参考链接:

 

HKEY_CURRENT_USERSOFTWAREMICROSOFTWINDOWScurrentversionExplorerFileExts.lnk

1. 头文件(包含特征处理函数)

/////////////////////////////////////////
//
// FileName : NetInfoProc.h
// Creator : PeterZ
// Date : 2018-6-21 23:50
// Comment : 网卡信息筛选
// Editor : Visual Studio 2017
//
/////////////////////////////////////////

#pragma once

#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <strsafe.h>
#include <WinSock2.h>
#include <Iphlpapi.h>
#include <cstring>

#pragma comment(lib,"Iphlpapi.lib")

using namespace std;

#define REG_ERROR -2
#define NO_PCI -1
#define IS_PCI 0


/**
 * @brief 查看字符串中是否有指定特征串
 * @param source 指向源字符串的指针
 * @param target 指向目标字符串的指针
 */
BOOL IsInString(LPCSTR source, LPCSTR target)
{
    if (source == NULL && target == NULL)
    {
        return false;
    }
    const size_t targetLength = strlen(target);
    const size_t sourceLength = strlen(source);

    if (sourceLength >= targetLength)
    {
        for (int i = 0; i < strlen(source); i++)
        {
            if (i + targetLength > sourceLength)
            {
                return false;
            }
            for (int j = 0; j < targetLength; j++)
            {
                if (*(source + i + j) != *(target + j))
                {
                    break;
                }
                if (j == targetLength - 1)
                {
                    return true;
                }
            }
        }
    }
    return false;
}

/**
 * @brief 获取注册表数据
 * @param hRoot 根键
 * @param szSubKey 子键
 * @param szValueName 数据项名
 * @param szRegInfo 数据
 */
BOOL GetRegInfo(HKEY hRoot, LPCTSTR szSubKey, LPCTSTR szValueName, LPSTR szRegInfo)
{
    HKEY hKey;
    DWORD dwType = REG_SZ;
    DWORD dwLenData = strlen(szRegInfo);
    LONG lRes = RegCreateKeyEx(hRoot, szSubKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, NULL);
    if (lRes != ERROR_SUCCESS)
    {
        if (lRes == 5)
        {
            printf("Please use Administrator Privilege !n");
        }
        else
        {
            printf("Get Register Info Error! Error Code is ");
            printf("%ldn", lRes);
        }
        RegCloseKey(hKey);
        RegCloseKey(hRoot);
        return false;
    }
    RegQueryValueEx(hKey, szValueName, 0, &dwType, NULL, &dwLenData);
    lRes = RegQueryValueEx(hKey, szValueName, 0, &dwType, (LPBYTE)szRegInfo, &dwLenData);
    if (lRes != ERROR_SUCCESS)
    {
        RegCloseKey(hKey);
        RegCloseKey(hRoot);
        return false;
    }
    RegCloseKey(hKey);
    RegCloseKey(hRoot);
    return true;
}

/**
 * @brief 验证注册信息是否是PCI物理网卡(需要以管理员权限运行程序)
 * @param pIpAdapterInfo 指向网卡数据的指针
 */
int IsPCINetCard(const PIP_ADAPTER_INFO pIpAdapterInfo)
{
    //通过注册表特征去除非物理网卡
    CHAR szRegSubKey[255] = "SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\";
    CHAR szNetCardRegInfo[255] = "";
    StringCchCat(szRegSubKey, sizeof(szRegSubKey), pIpAdapterInfo->AdapterName);
    StringCchCat(szRegSubKey, sizeof(szRegSubKey), "\Connection");
    if (!GetRegInfo(HKEY_LOCAL_MACHINE, szRegSubKey, "PnPInstanceId", szNetCardRegInfo))
    {
        return REG_ERROR;
    }
    if (strncmp(szNetCardRegInfo, "PCI", 3) == 0) return IS_PCI;
    else return NO_PCI;

}


/**
 * @brief 验证是否是虚拟网卡
 * @param pIpAdapterInfo 指向网卡数据的指针
 */
BOOL IsVirtualNetCard(const PIP_ADAPTER_INFO pIpAdapterInfo)
{
    //去除有特征名的虚拟网卡
    if (IsInString(strlwr(pIpAdapterInfo->Description), "virtual")) return true;
    //去除有MAC的虚拟网卡 vmware
    if (pIpAdapterInfo->Address[0] == 0x00 && pIpAdapterInfo->Address[1] == 0x05 && pIpAdapterInfo->Address[2] == 0x69) return true;
    //去除有MAC的虚拟网卡 vmware
    if (pIpAdapterInfo->Address[0] == 0x00 && pIpAdapterInfo->Address[1] == 0x0C && pIpAdapterInfo->Address[2] == 0x29) return true;
    //去除有MAC的虚拟网卡 vmware
    if (pIpAdapterInfo->Address[0] == 0x00 && pIpAdapterInfo->Address[1] == 0x50 && pIpAdapterInfo->Address[2] == 0x56) return true;
    //去除有MAC的虚拟网卡 vmware
    if (pIpAdapterInfo->Address[0] == 0x00 && pIpAdapterInfo->Address[1] == 0x1C && pIpAdapterInfo->Address[2] == 0x14) return true;
    //去除有MAC的虚拟网卡 parallels
    if (pIpAdapterInfo->Address[0] == 0x00 && pIpAdapterInfo->Address[1] == 0x1C && pIpAdapterInfo->Address[2] == 0x42) return true;
    //去除有MAC的虚拟网卡 microsoft virtual pc
    if (pIpAdapterInfo->Address[0] == 0x00 && pIpAdapterInfo->Address[1] == 0x03 && pIpAdapterInfo->Address[2] == 0xFF) return true;
    //去除有MAC的虚拟网卡 virtual iron
    if (pIpAdapterInfo->Address[0] == 0x00 && pIpAdapterInfo->Address[1] == 0x0F && pIpAdapterInfo->Address[2] == 0x4B) return true;
    //去除有MAC的虚拟网卡 red hat xen , oracle vm , xen source, novell xen
    if (pIpAdapterInfo->Address[0] == 0x00 && pIpAdapterInfo->Address[1] == 0x16 && pIpAdapterInfo->Address[2] == 0x3E) return true;
    //去除有MAC的虚拟网卡 virtualbox
    if (pIpAdapterInfo->Address[0] == 0x08 && pIpAdapterInfo->Address[1] == 0x00 && pIpAdapterInfo->Address[2] == 0x27) return true;
    return false;
}


/**
 * @brief 验证是否是0.0.0.0不可用IP
 * @param pIpAdapterInfo 指向网卡数据的指针
 */
BOOL IsInvalidIp(const PIP_ADAPTER_INFO pIpAdapterInfo)
{
    IP_ADDR_STRING *pIpAddrString = &(pIpAdapterInfo->IpAddressList);
    do
    {
        if (!strcmp(pIpAddrString->IpAddress.String, "0.0.0.0"))
        {
            return false;
        }
        if ((pIpAddrString = pIpAddrString->Next) == NULL)
        {
            return true;
        }
    } while (pIpAddrString);
    return true;
}

/**
* @brief 验证是否是内网IP
* @param pIpAdapterInfo 指向网卡数据的指针
*/
BOOL IsIntranetIP(const PIP_ADAPTER_INFO pIpAdapterInfo)
{
    IP_ADDR_STRING *pIpAddrString = &(pIpAdapterInfo->IpAddressList);
    do
    {
        if (strncmp(pIpAddrString->IpAddress.String, "10", 2) == 0 || (strncmp(pIpAddrString->IpAddress.String, "172.16", 6) > 0 && strncmp(pIpAddrString->IpAddress.String, "172.31", 6) < 0) || strncmp(pIpAddrString->IpAddress.String, "192.168", 7) == 0)
        {
            return true;
        }
        if ((pIpAddrString = pIpAddrString->Next) == NULL)
        {
            return false;
        }
    } while (pIpAddrString);
    return true;
}
TAG标签:
版权声明:本文由澳门金莎娱乐网站发布于澳门金莎娱乐网站,转载请注明出处:快捷方式,包含内外网筛选