彻底改掉进程名

写了个改进程名的东西,跟大家分享!技术含量不高,大牛飘过。

先总结一下,一个进程的名字有可能从以下部位获取(参考小伟同学的《伪造进程初探》一文):

一、EPROCESS中:
    1、EPROCESS-->ImageFileName(很常用,冰刃获取进程名的地方)
    2、EPROCESS-->SeAuditProcessCreationInfo->ImageFileName(任务管理器获取进程名的地方,NtQueryInformationProcess就是从这里获取进程名的)
    3、EPROCESS->SectionObject->Segment->ControlArea->FileObject->FileName(RKU获取进程名的方法)
    4、VAD(记录用户空间内存分配情况的数据结构,里面当然有进程的exe模块)
二、PEB中:
    1、PEB-->ProcessParameters-->ImagePathName
    2、PEB-->ProcessParameters-->CommandLine
    3、PEB-->ProcessParameters-->WindowTitle(这个地方比较奇怪,如果双击的是exe的快捷方式,则记录的是快捷方式的路径,还是一并改掉的好)
    4、PEB-->LDR-->InLoadOrderModuleList->第一个结构->FullDllName
    5、PEB-->LDR-->InLoadOrderModuleList->第一个结构->BaseDllName
    6、PEB-->LDR-->InMemoryOrderModuleList->第一个结构->FullDllName(此处的BaseDllName貌似为NULL,就不管它了)
    (PEB-->LDR-->InInitializationOrderModuleList这个表里貌似没有exe模块,也不管它了)


把这些地方都改掉即可彻底改掉进程名(如果不够彻底,谢谢补充!)。

示例代码如下(示例代码中以winmine.exe做测试,平台为XP SP3。代码中硬编码很多,通用性不强。囧):
//Fypher
/http://hi.baidu.com/nmn714

VOID ChangeName(ULONG pProcess){
    ULONG peb,ProcessParameters,ldr;
    ULONG InLoadOrderModuleList;
    ULONG InMemoryOrderModuleList;
    ULONG tmp;

    KAPC_STATE kapc;
    PUCHAR str;
    PWCHAR wstr;
    
    //get PEB
    peb=*(PULONG)(pProcess + 0x1b0);
    
    KeStackAttachProcess((PEPROCESS)pProcess,&kapc);
    __try{
        ProcessParameters = *(PULONG)(peb + 0x010);

        //ImagePathName
        FindAndChangeUni(ProcessParameters+0x038);

        //CommandLine
        FindAndChangeUni(ProcessParameters+0x040);

        //WindowTitle
        FindAndChangeUni(ProcessParameters+0x070);

        //Ldr
        ldr = *(PULONG)(peb + 0x00c);

        //InLoadOrderModuleList->FullDllName
        InLoadOrderModuleList = *(PULONG)(ldr+0x00c);
        FindAndChangeUni(InLoadOrderModuleList+0x024);

        //InLoadOrderModuleList->BaseDllName
        FindAndChangeUni(InLoadOrderModuleList+0x02c);

        //InMemoryOrderModuleList->FullDllName
        InMemoryOrderModuleList = *(PULONG)(ldr+0x014);
        FindAndChangeUni(InMemoryOrderModuleList+0x024);
    }__except(1){
        KdPrint(("exception occured!"));
    }
    KeUnstackDetachProcess (&kapc);

    //EPROCESS-->ImageFileName
    FindAndChangeA(pProcess+0x174,16);

    //EPROCESS-->SeAuditProcessCreationInfo->ImageFileName
    FindAndChangeUni(*(PULONG)(pProcess + 0x1F4));

    //EPROCESS->SectionObject->Segment->ControlArea->FileObject->FileName
    //should use MmIsAddressValid to verify
    tmp=*(PULONG)(pProcess+0x138);
    tmp=*(PULONG)(tmp+0x14);
    tmp=*(PULONG)tmp;
    tmp=*(PULONG)(tmp+0x024);
    FindAndChangeUni(tmp+0x030);
    
    //VAD
    //should use MmIsAddressValid to verify
    tmp=*(PULONG)(pProcess+0x11c);
    tmp=*(PULONG)(tmp+0x10);
    tmp=*(PULONG)(tmp+0x018);
    tmp=*(PULONG)(tmp+0x024);
    FindAndChangeUni(tmp+0x030);
}
其中,FindAndChangeUni和FindAndChangeA的作用是在一个字符串(UNICODE_STRING或CHAR)中定位“winmine.exe”并改成"winxxoo.exe"。代码如下:
//Fypher
/http://hi.baidu.com/nmn714

VOID FindAndChangeUni(ULONG strAddr){
    PUNICODE_STRING uniStr = (PUNICODE_STRING)strAddr;
    ULONG len = uniStr->Length / 2;
    ULONG maxLen = uniStr->MaximumLength / 2;
    PWCHAR str = uniStr->Buffer;
    ULONG i=0;

    if(!str || len<11|| maxLen<11 )
        return;

    for(i=0;i<= len - 11;++i){
        if(!_wcsnicmp(str+i,L"winmine.exe",11))
            break;
    }

    if(i>len - 11)
        return;
    
    _asm{
        cli
        mov eax, cr0
        and eax, not 0x10000
        mov cr0, eax
    }
    //str可能是PEB中的,故try之
    __try{
        str[i+3]=L'x';
        str[i+4]=L'x';
        str[i+5]=L'o';
        str[i+6]=L'o';
    }__except(1){
    }    
    _asm{
        mov eax, cr0
        or eax,0x10000
        mov cr0,eax
        sti
    }
}

VOID FindAndChangeA(ULONG strAddr,ULONG len){
    PUCHAR str = (PUCHAR)strAddr;
    ULONG i=0;

    if(!str || len<11 )
        return;

    for(i=0;i<= len - 11;++i){
        if(!_strnicmp(str+i,"winmine.exe",11))
            break;
    }

    if(i>len - 11)
        return;
    
    _asm{
        cli
        mov eax, cr0
        and eax, not 0x10000
        mov cr0, eax
    }
    //str可能是PEB中的,故try之
    __try{
        str[i+3]='x';
        str[i+4]='x';
        str[i+5]='o';
        str[i+6]='o';
    }__except(1){
    }    
    
    _asm{
        mov eax, cr0
        or eax,0x10000
        mov cr0,eax
        sti
    }
}
http://www.315safe.com/tech/program/24181.shtml

<think>好的,我现在需要帮助用户解决如何在操作系统中永久修改网卡称的问题。用户提到参考了引用[1]中的内容,关于CentOS系统网卡重命的步骤。首先,我需要确认用户的操作系统版本,因为不同的Linux发行版和版本有不同的方法。引用里提到CentOS6及更早使用eth#命,而内核3.0.0之后称变长,所以用户可能使用的是较新的系统,比如CentOS7或8。 接下来,我需要回想在CentOS7及以上系统中,网卡命规则默认是基于固件、拓扑等信息的可预测命,如ens33。要永久修改,通常需要修改grub配置、udev规则以及网络配置文件。用户需要的是永久修改,所以临时用ip命令改的方法不合适。 首先,修改grub配置文件,添加net.ifnames=0和biosdevname=0参数,禁用可预测命,让系统使用传统的eth0命方式。这需要编辑/etc/default/grub文件,然后在GRUB_CMDLINE_LINUX中添加参数,运行grub2-mkconfig生成新的grub.cfg。 然后,可能需要修改或创建udev规则,确保网卡MAC地址对应到新的称。编辑70-persistent-net.rules文件,但新系统可能没有这个文件,所以可能需要手动创建或使用其他方法。 接下来,修改网络配置文件,比如/etc/sysconfig/network-scripts/ifcfg-ens33,将NAME和DEVICE字段改为新的称,比如eth0,同时重命配置文件为ifcfg-eth0。 最后,重启系统使更改生效,并检查网卡称是否改变。如果有问题,可能需要检查各个步骤是否正确,特别是grub参数和udev规则是否正确应用。 需要注意的是,不同发行版可能有差异,比如Ubuntu使用netplan,步骤会有所不同。用户没有明确系统版本,可能需要提醒他们根据实际情况调整步骤。另外,操作前备份重要文件,避免配置错误导致网络不可用。 可能的问题点包括:是否正确禁用可预测命,udev规则是否生效,网络配置文件是否正确,以及重启后服务是否正常启动。用户如果遇到问题,可能需要检查日志,如journalctl或dmesg,查看网卡初始化过程中的错误信息。 现在,我需要将这些步骤整理成用户易懂的指导,分步骤说明,并提醒注意事项。同时,生成相关问题,可能涉及其他系统或临时修改方法,以及常见错误的处理。</think>### 如何永久修改Linux系统中的网卡称 以下是针对**CentOS 7/8/9**及类似发行版的详细步骤: --- #### **步骤1:修改GRUB启动参数** 1. 编辑GRUB配置文件: ```bash sudo vim /etc/default/grub ``` 2. 在`GRUB_CMDLINE_LINUX`行中添加参数: ```bash GRUB_CMDLINE_LINUX="... net.ifnames=0 biosdevname=0" ``` - `net.ifnames=0`:禁用可预测命规则 - `biosdevname=0`:禁用BIOS设备命规则[^1] 3. 生成新的GRUB配置文件: ```bash sudo grub2-mkconfig -o /boot/grub2/grub.cfg ``` --- #### **步骤2:重命网络配置文件** 1. 进入网络配置目录: ```bash cd /etc/sysconfig/network-scripts/ ``` 2. 修改原网卡配置文件(例如原网卡为`ens192`): ```bash sudo mv ifcfg-ens192 ifcfg-eth0 ``` 3. 编辑文件并修改称字段: ```bash NAME=eth0 DEVICE=eth0 ``` --- #### **步骤3:更新UDEV规则(可选)** 为防止系统重启后称恢复,可绑定MAC地址: ```bash sudo vim /etc/udev/rules.d/70-persistent-net.rules ``` 添加规则(示例): ```bash SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:xx:xx:xx", NAME="eth0" ``` --- #### **步骤4:重启系统** ```bash sudo reboot ``` 重启后通过`ip addr`验证新称是否生效。 --- ### 注意事项 1. **兼容性问题**:Ubuntu系统需修改`/etc/netplan/*.yaml`配置 2. **风险提示**:操作前建议备份`/etc/default/grub`和网络配置文件 3. **故障排查**:若重启后网络失效,可通过控制台检查日志: ```bash journalctl -u network.service ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值