文档库 最新最全的文档下载
当前位置:文档库 › DLL的11种注入方法资料

DLL的11种注入方法资料

DLL的11种注入方法资料
DLL的11种注入方法资料

闲着没事整理了一下DLL的N种注入方法,对学习外挂的朋友,应该有用!

第一种方法:

利用CreateRemoteThread 远程建立线程的方式注入DLL.

首先,我们要提升自己的权限,因为远程注入必不可免的要访问到目

标进程的内存空间,如果没有足够的系统权限,将无法作任何事.下

面是这个函数是用来提升我们想要的权限用的.

function EnableDebugPriv : Boolean;

var

hToken : THANDLE;

tp : TTokenPrivileges;

rl : Cardinal;

begin

result := false;

//打开进程令牌环

OpenProcessToken(GetCurrentProcess(),

TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken);

//获得进程本地唯一ID

if LookupPrivilegeValue(nil, 'SeDebugPrivilege',

tp.Privileges[0].Luid) then

begin

tp.PrivilegeCount := 1;

tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;

//调整权限

result := AdjustTokenPrivileges(hToken, False, tp,

sizeof(tp), nil, rl);

end;

end;

关于OpenProcessToken() 和AdjustTokenPrivileges() 两个API

的简单介绍:

OpenProcessToken():获得进程访问令牌的句柄.

function OpenProcessToken(

ProcessHandle: THandle; //要修改访问权限的进程句柄

DesiredAccess: DWORD; //指定你要进行的操作类型

var TokenHandle: THandle

): BOOL; //返回的访问令牌指针

AdjustTokenPrivileges() :调整进程的权限.

function AdjustTokenPrivileges(

TokenHandle: THandle; // 访问令牌的句柄

DisableAllPrivileges: BOOL; // 决定是进行权限修改还是除

能(Disable)所有权限

const NewState: TTokenPrivileges; // 指明要修改的权限,

是一个指向TOKEN_PRIVILEGES结构的指针,该结构包含一个数组,数据组的每个项指明了权限的类型和要进行的操作;

BufferLength: DWORD; //结构PreviousState的长度,如果PreviousState为空,该参数应为0

var PreviousState: TTokenPrivileges; // 指向

TOKEN_PRIVILEGES结构的指针,存放修改前的访问权限的信息var ReturnLength: DWORD //实际PreviousState结构返回的大

) : BOOL;

远程注入DLL其实是通过CreateRemoteThread 建立一个远程线程调

用LoadLibrary 函数来加载我们指定的DLL,可是如何能让远程线程

知道我要加载DLL呢,要知道在Win32系统下,每个进程都拥有自己的4G虚拟地址空间,各个进程之间都是相互独立的。所我们需要在远程

进程的内存空间里申请一块内存空间,写入我们的需要注入的DLL

的路径.需要用到的API 函数有:

OpenProcess():打开目标进程,得到目标进程的操作权限,详细参

看MSDN

function OpenProcess(

dwDesiredAccess: DWORD; // 希望获得的访问权限

bInheritHandle: BOOL; // 指明是否希望所获得的句柄可以继

dwProcessId: DWORD // 要访问的进程ID

): THandle;

VirtualAllocEx():用于在目标进程内存空间中申请内存空间以写入

DLL的文件名

function VirtualAllocEx(

hProcess: THandle; // 申请内存所在的进程句柄

lpAddress: Pointer; // 保留页面的内存地址;一般用nil自

动分配

dwSize, // 欲分配的内存大小,字节单位;注意实际分配的

内存大小是页内存大小的整数倍

flAllocationType: DWORD;

flProtect: DWORD

): Pointer;

WriteProcessMemory():往申请到的空间中写入DLL的文件名

function WriteProcessMemory(

hProcess: THandle; //要写入内存数据的目标进程句柄

const lpBaseAddress: Pointer; //要写入的目标进程的内存指

针, 需以VirtualAllocEx() 来申请

lpBuffer: Pointer; //要写入的数据

nSize: DWORD; //写入数据的大小

var lpNumberOfBytesWritten: DWORD //实际写入的大小

): BOOL;

然后就可以调用CreateRemoteThread 建立远程线程调用LoadLibrary 函数来加载我们指定的DLL.

CreateRemoteThread()//在一个远程进程中建立线程

function CreateRemoteThread(

hProcess: THandle; //远程进程的句柄

lpThreadAttributes: Pointer; //线程安全描述字,指向SECURITY_ATTRIBUTES结构的指针

dwStackSize: DWORD; //线程栈大小,以字节表示

lpStartAddress: TFNThreadStartRoutine; // 一个TFNThreadStartRoutine类型的指针,指向在远程进程中执行的函数地址

lpParameter: Pointer; //传入参数的指针

dwCreationFlags: DWORD; //创建线程的其它标志

var lpThreadId: DWORD //线程身份标志,如果为0, 则不返回 ): THandle;

整个远程注入DLL的具体实现代码如下:

function InjectDll(const DllFullPath : string; const dwRemoteProcessId : Cardinal): boolean;

var

hRemoteProcess, hRemoteThread: THANDLE;

pszLibFileRemote : Pointer;

pszLibAFilename: PwideChar;

pfnStartAddr : TFNThreadStartRoutine;

memSize, WriteSize, lpThreadId : Cardinal;

begin

result := FALSE;

// 调整权限,使程序可以访问其他进程的内存空间

if EnableDebugPriv then

begin

//打开远程线程PROCESS_ALL_ACCESS 参数表示打开所有的权限hRemoteProcess := OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwRemoteProcessId );

try

// 为注入的dll文件路径分配内存大小,由于为WideChar,故要

乘2

GetMem(pszLibAFilename, Length(DllFullPath) * 2 + 1);

// 之所以要转换成WideChar, 是因为当DLL位于有中文字符

的路径下时不会出错

StringToWideChar(DllFullPath, pszLibAFilename, Length (DllFullPath) * 2 + 1);

// 计算pszLibAFilename 的长度,注意,是以字节为单元的

长度

memSize := (1 + lstrlenW(pszLibAFilename)) * sizeof (WCHAR);

//使用VirtualAllocEx函数在远程进程的内存地址空间分配

DLL文件名空间

pszLibFileRemote := VirtualAllocEx( hRemoteProcess,

nil, memSize, MEM_COMMIT, PAGE_READWRITE);

if Assigned(pszLibFileRemote) then

begin

//使用WriteProcessMemory函数将DLL的路径名写入到远程

进程的内存空间

if WriteProcessMemory(hRemoteProcess,

pszLibFileRemote, pszLibAFilename, memSize, WriteSize) and (WriteSize = memSize) then

begin

lpThreadId := 0;

// 计算LoadLibraryW的入口地址

pfnStartAddr := GetProcAddress(LoadLibrary

('Kernel32.dll'), 'LoadLibraryW');

// 启动远程线程LoadLbraryW,通过远程线程调用创建新

的线程

hRemoteThread := CreateRemoteThread

(hRemoteProcess, nil, 0, pfnStartAddr, pszLibFileRemote, 0, lpThreadId);

// 如果执行成功返回True;

if (hRemoteThread <> 0) then

result := TRUE;

// 释放句柄

CloseHandle(hRemoteThread);

end;

end;

finally

// 释放句柄

CloseHandle(hRemoteProcess);

end;

end;

end;

接下来要说的是如何卸载注入目标进程中的DLL,其实原理和注入DLL 是完全相同的,只是远程调用调用的函数不同而已,这里要调用的是FreeLibrary.代码如下:

function UnInjectDll(const DllFullPath : string; const dwRemoteProcessId : Cardinal) : Boolean;

// 进程注入和取消注入其实都差不多,只是运行的函数不同而已

var

hRemoteProcess, hRemoteThread : THANDLE;

pszLibFileRemote : pchar;

pszLibAFilename: PwideChar;

pfnStartAddr : TFNThreadStartRoutine;

memSize, WriteSize, lpThreadId, dwHandle : Cardinal;

begin

result := FALSE;

// 调整权限,使程序可以访问其他进程的内存空间

if EnableDebugPriv then

begin

//打开远程线程PROCESS_ALL_ACCESS 参数表示打开所有的权限hRemoteProcess := OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwRemoteProcessId );

try

// 为注入的dll文件路径分配内存大小,由于为WideChar,故要

乘2

GetMem(pszLibAFilename, Length(DllFullPath) * 2 + 1);

// 之所以要转换成WideChar, 是因为当DLL位于有中文字符的路径下时不会出错

StringToWideChar(DllFullPath, pszLibAFilename, Length (DllFullPath) * 2 + 1);

// 计算pszLibAFilename 的长度,注意,是以字节为单元的长度

memSize := (1 + lstrlenW(pszLibAFilename)) * sizeof (WCHAR);

//使用VirtualAllocEx函数在远程进程的内存地址空间分配DLL文件名空间

pszLibFileRemote := VirtualAllocEx( hRemoteProcess,

nil, memSize, MEM_COMMIT, PAGE_READWRITE);

if Assigned(pszLibFileRemote) then

begin

//使用WriteProcessMemory函数将DLL的路径名写入到远程进程的内存空间

if WriteProcessMemory(hRemoteProcess, pszLibFileRemote, pszLibAFilename, memSize, WriteSize) and (WriteSize = memSize) then

begin

// 计算GetModuleHandleW的入口地址

pfnStartAddr := GetProcAddress(LoadLibrary

('Kernel32.dll'), 'GetModuleHandleW');

//使目标进程调用GetModuleHandleW,获得DLL在目标进程中的句柄

hRemoteThread := CreateRemoteThread (hRemoteProcess, nil, 0,

pfnStartAddr, pszLibFileRemote, 0, lpThreadId);

// 等待GetModuleHandle运行完毕

WaitForSingleObject(hRemoteThread,INFINITE);

// 获得GetModuleHandle的返回值,存在dwHandle变量中

GetExitCodeThread(hRemoteThread, dwHandle);

// 计算FreeLibrary的入口地址

pfnStartAddr := GetProcAddress(LoadLibrary

('Kernel32.dll'), 'FreeLibrary');

// 使目标进程调用FreeLibrary,卸载DLL

hRemoteThread := CreateRemoteThread

(hRemoteProcess, nil, 0,

pfnStartAddr, Pointer(dwHandle), 0, lpThreadId);

// 等待FreeLibrary卸载完毕

WaitForSingleObject( hRemoteThread, INFINITE );

// 如果执行成功返回True;

if hRemoteProcess<>0 then

result := TRUE;

// 释放目标进程中申请的空间

VirtualFreeEx(hRemoteProcess, pszLibFileRemote,

Length(DllFullPath)+1, MEM_DECOMMIT);

// 释放句柄

CloseHandle(hRemoteThread);

end;

end;

finally

// 释放句柄

CloseHandle(hRemoteProcess);

end;

end;

end;

第二种方法:

采用CreateProcess的方法,实现起来比较复杂,但没有上面几种方法的局限性。且可以用其他工

具(VC等)调试注入的DLL。下面进行介绍。

原理如下:

1.用CreateProcess(CREATE_SUSPENDED)启动目标进程。

2.找到目标进程的入口,用ImageHlp中的函数可以实现。

3.将目标进程入口的代码保存起来。

4.在目标进程的入口写入LoadLibrary(MyDll)实现Dll的注入。

5.用ResumeThread运行目标进程。

6.目标进程就运行了LoadLibrary(MyDll),实现DLL的注入。

7.目标进程运行完LoadLibrary(MyDll)后,将原来的代码写回目标进程的入口。

8.目标进程Jmp至原来的入口,继续运行程序。

从原理上可以看出,DLL的注入在目标进程的开始就运行了,而且不是用Debug的方案,这样,就

没有上面方案的局限性了。该方案的关键在6,7,8三步,实现方法需要监视进程和DLL 合作。下

面,结合代码进行分析。

在监视进程中,创建FileMapping,用来保存目标进程的入口代码,同时保证DLL中可以访问。在

第7步实现将原目标代码写回目标进程的入口。

//监视程序和DLL共用的结构体

#pragma pack (push ,1) //保证下面的结构体采用BYTE对齐(必须)

typedef struct

{

BYTE int_PUSHAD; // pushad 0x60

BYTE int_PUSH; // push &szDLL 0x68

DWORD push_Value; // &szDLL = "ApiSpy.dll"的path

BYTE int_MOVEAX; // move eax &LoadLibrary 0xB8

DWORD eax_Value; // &LoadLibrary

WORD call_eax; // call eax 0xD0FF(FF D0) (LoadLibrary

("ApiSpy.dll");

BYTE jmp_MOVEAX; // move eax &ReplaceOldCode 0xB8 DWORD jmp_Value; // JMP的参数

WORD jmp_eax; // jmp eax 0xE0FF(FF E0) jmp ReplaceOldCode;

char szDLL[MAX_PA TH]; // "ApiSpy.dll"的FullPath

}INJECT_LOADLIBRARY_CODE, *LPINJECT_CODE;

#pragma pack (pop , 1)

上面结构体的代码为汇编代码,对应的汇编为:

pushad

push szDll

mov eax, &LoadLibraryA

call eax // 实现调用LoadLibrary(szDll)的代码

mov eax, oldentry

jmp eax // 实现在LoadLibrary运行完后, 跳至目标进程的入口继续运行

// FileMaping的结构体

typedef struct

{

LPBYTE lpEntryPoint; // 目标进程的入口地址

BYTE oldcode[sizeof(INJECT_CODE)]; // 目标进程的代码保存

}SPY_MEM_SHARE, * LPSPY_MEM_SHARE;

准备工作:

第一步:用CreateProcess(CREATE_SUSPENDED)启动目标进程。

CreateProcessA(0, szRunFile, 0, 0, FALSE, CREATE_SUSPENDED

0, NULL, &stInfo,

&m_proInfo) ;

// 用CreateProcess启动一个暂停的目标进程

// 找到目标进程的入口点,函数如下

第二步:找到目标进程的入口,用ImageHlp中的函数可以实现。pEntryPoint = GetExeEntryPoint(szRunFile);

LPBYTE GetExeEntryPoint(char *filename)

{

PIMAGE_NT_HEADERS pNTHeader;

DWORD pEntryPoint;

PLOADED_IMAGE pImage;

pImage = ImageLoad(filename, NULL);

if(pImage == NULL)

return NULL;

pNTHeader = pImage->FileHeader;

pEntryPoint = pNTHeader->OptionalHeader.AddressOfEntryPoint + pNTHeader- >OptionalHeader.ImageBase;

ImageUnload(pImage);

return (LPBYTE)pEntryPoint;

}

// 创建FileMapping

hMap = CreateFileMapping((HANDLE)0xFFFFFFFF, NULL,

PAGE_READWRITE, 0, sizeof(SPY_MEM_SHARE), “MyDllMapView”);

// 保存目标进程的代码

第三步:将目标进程入口的代码保存起来。

LPSPY_MEM_SHARE lpMap = pMapViewOfFile(hMap,

FILE_MAP_ALL_ACCESS,

0, 0, 0);

ReadProcessMemory(m_proInfo.hProcess, pEntryPoint,

&lpMap->oldcode, sizeof(INJECT_CODE),

&cBytesMoved);

lpMap->lpEntryPoint = pEntryPoint;

// 第四步:在目标进程的入口写入LoadLibrary(MyDll)实现Dll的注入。

// 准备注入DLL的代码

INJECT_CODE newCode;

// 写入MyDll―――用全路径

lstrcpy(newCode.szDLL, szMyDll);

// 准备硬代码(汇编代码)

newCode.int_PUSHAD = 0x60;

newCode.int_PUSH = 0x68;

newCode.int_MOVEAX = 0xB8;

newCode.call_eax = 0xD0FF;

newCode.jmp_MOVEAX = 0xB8;

newCode.jmp_eax = 0xE0FF;

newCode.eax_Value = (DWORD)&LoadLibrary;

newCode.push_Value=(pEntryPoint + offsetof(INJECT_CODE,szDLL));

// 将硬代码写入目标进程的入口

// 修改内存属性

DWORD dwNewFlg, dwOldFlg;

dwNewFlg = PAGE_READWRITE;

VirtualProtectEx(m_proInfo.hProcess, (LPVOID)pEntryPoint, sizeof(DWORD), dwNewFlg,

&dwOldFlg);

WriteProcessMemory(m_proInfo.hProcess, pEntryPoint,

&newCode, sizeof(newCode),

NULL);//&dwWrited);

VirtualProtectEx(proInfo.hProcess, (LPVOID)pEntryPoint, sizeof(DWORD),

dwOldFlg, &dwNewFlg);

// 释放FileMaping 注意,不是Closehandle(hMap)

UnmapViewOfFile(lpMap);

// 继续目标进程的运行

第五步:用ResumeThread运行目标进程。

ResumeThread(m_proInfo.hThread);

在监视进程中就结束了自己的任务,剩下的第6,7,8步就需要在Dll的DllMain中进行配合。

DLL中用来保存数据的结构体

typedef struct

{

DWORD lpEntryPoint;

DWORD OldAddr;

DWORD OldCode[4];

}JMP_CODE,* LPJMP_CODE;

static JMP_CODE _lpCode;

// 在DllMain的DLL_PROCESS_ATTACH中调用InitApiSpy函数

// 在该函数中实现第6,7,8步

第六步:目标进程就运行了LoadLibrary(MyDll),实现DLL的注入。

int WINAPI DllMain(HINSTANCE hInst, DWORD dwReason, LPVOID lpReserved) {

switch(dwReason)

{

case DLL_PROCESS_ATTACH:

return InitApiSpy();

……

// InitApiSpy函数的实现

BOOL WINAPI InitApiSpy()

{

HANDLE hMap;

LPSPY_MEM_SHARE lpMem;

DWORD dwSize;

BOOL rc;

BYTE* lpByte;

// 取得FileMapping的句柄

hMap = OpenFileMapping(FILE_MAP_ALL_ACCESS, 0, “MyDllMapView”);

if(hMap)

{

lpMem = (LPSPY_MEM_SHARE)MapViewOfFile(hMap,

FILE_MAP_ALL_ACCESS,

0, 0, 0);

if(lpMem)

{

第七步:目标进程运行完LoadLibrary(MyDll)后,将原来的代码写回目标进程的入口。

// 恢复目标进程的入口代码

// 得到mov eax, value代码的地址

_lpCode.OldAddr = (DWORD)((BYTE*)lpMem->lpEntryPoint + offsetof (INJECT_CODE, jmp_MOVEAX));

_lpCode.lpEntryPoint = (DWORD)lpMem->lpEntryPoint;

// 保存LoadLibrary()后面的代码

memcpy(&_lpCode.OldCode, (BYTE*)lpMem->oldcode + offsetof (INJECT_CODE, jmp_MOVEAX), 2*sizeof(DWORD));

// 恢复目标进程的入口代码

rc = WriteProcessMemory(GetCurrentProcess(), lpMem-

>lpEntryPoint, lpMem->oldcode, sizeof(INJECT_CODE), &dwSize);

lpByte = (BYTE*)lpMem->lpEntryPoint + offsetof(INJECT_CODE,

jmp_MOVEAX);

UnmapViewOfFile(lpMem);

}

CloseHandle(hMap);

}

// 实现自己Dll的其他功能,如导入表的替换

// ……

// 将LoadLibrary后面的代码写为转入处理程序中

// 指令为:mov eax, objAddress

// jmp eax

{

BYTE* lpMovEax;

DWORD* lpMovEaxValu;

WORD* lpJmp;

DWORD fNew, fOld;

fNew = PAGE_READWRITE;

lpMovEax = lpByte;

VirtualProtect(lpMovEax, 2*sizeof(DWORD), fNew, &fOld);

*lpMovEax = 0xB8;

lpMovEaxValu = (DWORD*)(lpMovEax + 1);

*lpMovEaxValu = (DWORD)&DoJmpEntryPoint;

lpJmp = (WORD*)(lpMovEax + 5);

*lpJmp = 0xE0FF; // (FF E0)

VirtualProtect(lpMovEax, 2*sizeof(DWORD), fOld, &fNew);

}

return TRUE;

}

// 转入处理程序

DWORD* lpMovEax;

DWORD fNew, fOld;

void __declspec(naked) DoJmpEntryPoint ()

{

// 恢复LoadLibrary后面的代码

_gfNew = PAGE_READWRITE;

_glpMovEax = (DWORD*)_lpCode.OldAddr;

VirtualProtect(_glpMovEax, 2*sizeof(DWORD), _gfNew, &_gfOld);

*_glpMovEax = _lpCode.OldCode[0];

*(_glpMovEax + 1) = _lpCode.OldCode[1];

VirtualProtect(_glpMovEax, 2*sizeof(DWORD), _gfOld, &_gfNew); 第八步:目标进程Jmp至原来的入口,继续运行程序。

// 跳至目标代码的入口

_asm popad

_asm jmp _lpCode.lpEntryPoint

}

这样就实现了原来的目标,将DLL的注入放在目标进程的入口运行,实现了目标进程运行之前运行

我们的注入Dll的功能。

第三种方法:

利用注册表注入

在Windows NT/2000/XP/2003中,有一个注册表键值

HKEY_LOCAL_MACHINE\Software\Microsoft\WindowsHKEY_LOCAL_MACHINE\Softwar e\Microsoft\Wi

ndows NT\CurrentVersion\Windows\AppInit_DLLs。当某个进程加载User32.dll时,这里面列出

的所有的DLL都将User32.dll利用LoadLibrary函数加载到该进程空间中。我们可以把自己的代码

放在一个DLL中,并加入该键值,这样就可以注入到所有使用User32.dll的进程中了。

当DLL以LoadLibrary的方式加载时,DllMain会被以DLL_PROCESS_ATTACH为原因调用,实际上

我们也只需要关心DLL_PROCESS_ATTACH

BOOL APIENTRY DllMain( HMODULE hModule,

DWORD ul_reason_for_call,

LPVOID lpReserved )

{

if (ul_reason_for_call == DLL_PROCESS_ATTACH)

{

HANDLE f = CreateFile(L"D:\\InjectSuccess.txt", FILE_ADD_FILE, FILE_SHARE_WRITE, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);

CloseHandle(f);

}

return TRUE;

}

第四种方法:

利用Windows Hooks注入

Windows系统给我们提供了一些挂钩函数,使得被挂钩的进程可以在自己处理接收到的消息之

前,先执行我们的消息处理函数,而这个消息处理函数一般会放在DLL中,来让目标进程加载,这

实际上已经达到了注入代码的效果。

一般情况下,我们把挂钩函数和消息处理函数都放在dll中:

HHOOK g_hHook = NULL;

HINSTANCE hInst;

BOOL APIENTRY DllMain( HMODULE hModule,

DWORD ul_reason_for_call,

LPVOID lpReserved

)

{

hInst = (HINSTANCE)hModule;

return TRUE;

}

LRESULT myKeyBrdFuncAd (int code, WPARAM wParam, LPARAM lParam)

{

// To be nice, your rootkit should call the next-lower

// hook, but you never know what this hook may be.

//::MessageBoxA(NULL, "Hello Injection", "Injection", MB_OK);

return CallNextHookEx(g_hHook, code, wParam, lParam);

}

#ifdef __cplusplus // If used by C++ code,

extern "C" { // we need to export the C interface

#endif

__declspec(dllexport) bool SetHook(DWORD dwThreadId)

{

g_hHook = SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)myKeyBrdFuncAd, hInst, dwThreadId);

if (g_hHook == NULL)

{

return false;

}

return true;

}

#ifdef __cplusplus

}

#endif

注入进程要加载这个DLL,然后执行里面的SetHook函数,传入的参数为被注入线程的ID

typedef bool (*MYPROC) (DWORD dwThreadId);

......

HANDLE hLib = LoadLibraryA

("D:\\source\\rootkits\\injecting\\InjectDll\\Debug\\InjectDll.dll");

if (hLib == NULL)

{

printf("LoadLibrary Error!\n");

}

MYPROC myProc = (MYPROC)GetProcAddress((HMODULE)hLib,"SetHook");

if (myProc != NULL)

{

if ((*myProc)((DWORD)4860) == false)

{

printf("loose: %d", GetLastError());

}

}

else

{

printf("GetProcAddress error: %d", GetLastError());

}

第五种方法:

利用特洛伊DLL进行注入

这种方法的原理就是由自己写一个与原有进程调用的DLL具有相同接口函数的DLL,再用我们

的DLL替换原有的DLL。在替换的过程中,由我们自己编写感兴趣的函数替换原有函数,而对其它

不感兴趣的函数,则以函数转发的形式调用原有DLL中的函数。这里面有个前提,就是你在编写

计算机防病毒知识题

病毒复习: 一、选择题(本题共30分) 1、恶意代码是( )。 (A)被损坏的程序 (B)硬件故障 (C)一段特制的程序或代码片段 (D)芯片霉变 2、恶意代码的危害主要造成( ) (A)磁盘损坏 (B)计算机用户的伤害 (C)CPU的损坏 (D)程序和数据的破坏 3、新买回来的未格式化的软盘( ) (A)可能会有恶意代码 (B)与带恶意代码的软盘放在一起会被感染 (C) 一定没有恶意代码 (D) 一定有恶意代码 4、僵尸网络的最大危害是,黑客可以利用该网络发起()。 (A)入侵攻击 (B)DDOS攻击 (C)网络监听 (D)心理攻击 5、个人防火墙与边际防火墙的最根本区别是()。 (A) 个人防火墙可以控制端口 (B) 个人防火墙可以控制协议 (C) 个人防火墙可以控制应用程序访问策略 (D) 个人防火墙是软件产品,而边际防火墙是硬件产品 6、能够感染EXE,COM文件的病毒属于( )。 (A) 网络型病毒 (B) 蠕虫型病毒 (C) 文件型病毒 (D) 系统引导型病毒 7、下列恶意代码那个传统计算机病毒不是蠕虫( )。 (A) 冲击波 (B) 振荡波 (C) CIH (D) 尼姆达 8、Socket服务器端正确的操作顺序为( )。 (A) bind, accept, listen (B) bind, listen, accept (C) listen, accept (D) listen, read, accept 9、著名特洛伊木马“网络神偷”采用的是( )隐藏技术。 (A) 反弹式木马技术(B) 远程线程插入技术 (C) ICMP协议技术 (D) 远程代码插入技术 10、下列( )不是常用程序的默认端口。 (A) 8 0 (B) 8 0 8 0 (C) 2 3 (D) 2 1 11、第一个真正意义的宏病毒起源于( )应用程序。 (A) Word (B) Lotus 1-2-3 (C) Excel (D) PowerPoint 12、第一个跨Windows和Linux平台的恶意代码是( )。 (A) Lion (B) W32.Winux (C) Bliss (D)Staog 13、 Linux系统下的欺骗库函数病毒使用了Linux系统下的环境变量,该环境变量是( )。

Win7获得权限替换System32文件夹里dll文件的方法

Win7获得权限替换System32文件夹里dll文件的方法: 1、打开记事本,输入下列文本: Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\*\shell\runas] @="获取权限" "NoWorkingDirectory"="" [HKEY_CLASSES_ROOT\*\shell\runas\command] @="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F" "IsolatedCommand"="cmd.exe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F" [HKEY_CLASSES_ROOT\Directory\shell\runas] @="获取权限" "NoWorkingDirectory"="" [HKEY_CLASSES_ROOT\Directory\shell\runas\command] @="cmd.exe /c takeown /f \"%1\" /r /d y && icacls \"%1\" /grant administrators:F /t" "IsolatedCommand"="cmd.exe /c takeown /f \"%1\" /r /d y && icacls \"%1\" /grant administrators:F /t" 2、然后保存为导入.reg文件; 3、然后双击导入.reg; 此时会弹出警告提示,允许程序通过即可; 4、然后选择System32文件夹,鼠标右键选择获取权限。

远程线程注入时遇到的问题

远程线程注入时遇到的问题 这是我在研究程序自我删除(关于程序自我删除相关的技术我会在之后的文章中详细介绍)技术中碰到的问题, 暂时没有找到原因及解决办法. 暂且记录下来方便日后查阅、分析. CreateRemoteThread经常在木马病毒中使用, 最常见的做法就是把LoadLibrary当作线程函数在目标进程中动态加载自己的Dll, 这种方法比通过HOOK加载Dll的优点在于不需要目标进程依赖于User32.dll. 但是在实际使用过程中确会遇到不少问题. 除了使用LoadLibrary作为线程函数我们可以使用自定义的线程函数, 当然前提是这个线程函数的二进制代码已经正确无误地插入到目标进程. 具体方法这里不便展开. AdjustTokenPrivileges: 首先碰到的问题是关于进程权限问题, 确切的来说也不是问题, 只是在开发过程中遇到的比较奇怪的现象, 仅仅记录下来方便日后研究. 在此之前一直没有搞清楚提高进程权限是什么意思, 难道是提高系统级? 当然不可能, 微软不傻. 经过一些测试我有了一些发现. 代码如下: [c-sharp]view plaincopy

1.BOOL EnableDebugPrivilege() 2.{ 3. HANDLE hToken; 4.if(OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToke n) != TRUE) 5. { 6.return FALSE; 7. } 8. 9. LUID Luid; 10.if(LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &Luid) != TRUE) 11. { 12.return FALSE; 13. } 14. 15. TOKEN_PRIVILEGES tp; 16. tp.PrivilegeCount = 1; 17. tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 18. tp.Privileges[0].Luid = Luid; 19. 20.if(AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), N ULL, NULL) != TRUE) 21. { 22.return FALSE; 23. } 24. 25.return TRUE; 26.} 测试结果如下: 1. 使用该函数->枚举进程. 结果显示枚举到进程67个, 但是任务管理器显示当前进程73个. 未解. 2. 不使用该函数->OpenProcess打开系统进程失败. 这里有两个例外:

Windows文件读写监控系统

Windows文件读写监控系统 摘要:21世纪,人类进入了一个全新的时代,一个以计算机技术为代表的信息时代。人们的生活节奏随着信息技术的快捷方便而变快。在这次信息革命中谁拥有便捷的信息,谁就掌握了时代的命脉,占据技术的颠峰。在PC领域,称霸桌面的Windows系统的垄断和不公开源代码,对我们研究更是带来很大困难。本程序的全称为Windows下的文件监视程序,是一个工具软件。通过本程序的分析和设计,为创建更大的软件工程提供了一定的帮助。在逆向工程中,可以利用本程序,分析进程的文件读写情况,对工程的开发提供了一定的帮助。本程序采用VC开发环境,利用DLL挂接,拦截API等技术实现了对目标进程的文件读写监视 关键词:文件监视程序工具软件DLL挂接拦截API 1.引言 1.1课题背景 以计算机为代表的信息技术在近几年在全世界得到了飞速的发展,在企事业单位计算机已经成为主要的工作平台,在个人的日常生活中,计算机已经非常普及,就像普通家电那样。计算机技术的运用可以帮助人们减轻负担,提高工作效率。然而我们国家计算机研究起步相对较晚,特别在PC领域,微软的windows 平台垄断了我们国家的绝大部分,再加上它的源代码的不公开,以及众多版本,给我国的平台研究更是带来了很大的困难。 现在我们国家已经有一些公司和集体在研究操作系统。本程序是一个工具软件,它可以做为很多软件项目的工具,可以在项目开发前期进行简单的构造。在设计本程序的时候,运用了很多热门技术,比如DLL 挂接和远线程注射等,在很多杀毒软件和防火墙软件中都有它们的身影。 1.2系统开发的目的和意义 本程序作为一个工具软件,之所以设计它,主要一方面出于学习研究一些热门技术,以及利用这些技术能到达一个什么效果。它用到的技术,比如DLL挂接,API拦截,这些技术在很多杀毒软件等中运用的很多。比如卡巴斯基,它在进程读写时进行拦截,获得读写文件的数据,再利用其杀毒引擎进行查杀病毒。上面提到的拦截实际上是对文件读写API(比如ReadFile,WriteFile等)。很多游戏外挂利用远线程注射,将木马DLL插入游戏进程空间内,一旦插入成功,它就能破坏进程的正常运行,甚至有的对游戏进程的数据区进行搜索内帐号密码等信息,达到窃取帐号等目的。类似这些技术用处很大,几乎所有的市面上知名的软件都有用到。 另一方面是其实用性。本小程序能拦截目标进程对文件的操作,并向用户报告,并且可以设置对目标进程对文件只读,对一些重要数据可以起到一定的仿删除作用。比如一些病毒就专门破坏移动存储设备内的文件,通过对对其设置只读就可以防止这类事情的发生。

电脑C盘中不能删的文件

Documents and Settings是什么文件? 答案: 是系统用户设置文件夹,包括各个用户的文档、收藏夹、上网浏览信息、配置文件等。补:这里面的东西不要随便删除,这保存着所有用户的文档和账户设置,如果删除就会重新启动不能登陆的情况,尤其是里面的default user、all users、administrator和以你当前登陆用户名的文件夹。 Favorites是什么文件? 答案: 是收藏夹,存放你喜欢的网址。可以在其中放网址快捷方式和文件夹快捷方式,可以新建类别(文件夹)。 Program Files是什么文件? 答案: 应用软件文件夹装软件的默认路径一般是这里!当然里面也有些系统自身的一些应用程序Common Files是什么文件? 答案: Common Files. 这个文件夹中包含了应用程序用来共享的文件,很重要,不能乱删除Common Files这个文件是操作系统包扩系统程序和应用程序Common Files是应用程序运行库文件数据库覆盖了大约1000多个最流行的应用程序的插件,补丁等等文件夹common files里很多都是系统文件,不能随意删除,除非确定知道是干什么用的,没用的可以删掉。不过就算删掉了有用的东西,也没大的关系,顶多是某些软件用不了,不会造成系统崩溃。 ComPlus Applications是什么文件? 答案: ComPlus Applications:微软COM+ 组件使用的文件夹,删除后可能引起COM+ 组件不能运行 DIFX是什么文件? 答案: 不可以删除,已有的XML数据索引方法从实现思想上可分为两类:结构归纳法和节点定位法.这两种方法都存在一定的问题,结构归纳法的缺点是索引规模较大而且难以有效支持较复杂的查询,而节点定位法的主要缺点是容易形成过多的连接操作.针对这些问题,提出了一种新的动态的XML索引体系DifX,它扩展了已有的动态索引方法,采用一种动态的Bisimilarity的概念,可以根据实际查询需求以及最优化的要求动态决定索引中保存的结构信息,以实现对各种形式的查询最有效的支持.实验结果证明DifX是一种有效而且高效的XML索引方法,其可以获得比已有的XML索引方法更高的查询执行效率. Internet Explorer是什么文件? 答案: 不用说了,肯定不能删除,IE,浏览网页的! =================================================================== ================ ======== Kaspersky Lab是什么文件?

dll文件打开方式

一、DLL文件常识DLL是Dynamic Link Library的缩写,意为动态链接库。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件就会被调用。一个应用程序可有多个DLL文件,一个DLL文件也可能被几个应用程序所共用,这样的DLL文件被称为共享DLL文件。DLL文件一般被存放在C:WindowsSystem目录下 二、修改DLL文件的具体应用在系统的组策略和注册表中,我们可以修改一些键值来优化我们的系统,并加强操作系统的安全性。可是,对于限制下载、禁止删除文件等功能,我们无法通过上述的操作来完成,这只有通过修改系统DLL文件来实现。目前,我们通过修改系统的DLL文件,可以实现禁止删除文件、禁止IE下载、禁止IE另存为、禁止文件打开方式等功能。 三、系统中部分DLL文件的功能1、Browselc.dll IE所需要调用的库文件DLL结构雏形就是它了2、Shdoclc.dll 系统窗口及设置等,如删除文件、重命名3、Shell32.dll 系统窗口及设置等,如删除文件、重命名4、Cryptui.dll IE控件下载及提示对话框程序 四、修改DLL文件的方法1、下载DLL文件修改工具EXESCOPE6.0 - 6.3或6.4工具2、获取Browselc.dll、Shdoclc.dll、Shell32.dll和Cryptui.dll这几个链接文件。在找这几个文件时,最好将其他机器的硬盘,挂接在本机中,然后用本机的操作系统启动并复制这几个文件。3、在修改DLL文件的时候,打开该键值,在右面的对话框中将所要修改的键值禁用即可,不要删除,以备日后恢复(如图) 五、DLL文件修改秘籍1、禁止下载的修改方法: 打开Shdoclc.dll修改资源--对话框---4416,将4416键值禁用即可。2、禁止网页添加到收藏夹,打开Shdoclc.dll修改资源--对话框---21400,将该键值禁用即可。3、禁止恶意网页加载控件,修改Cryptui.dll文件,要同时修改5个地方才能完全禁止资源--对话框---130 资源--对话框---230 资源--对话框---4101 资源--对话框---4104 资源--对话框---4107 将以各对话框中的相应键值,修改成为禁用就可以了。4、禁止系统删除文件修改Shell32.dll,这个文件需要修改5个地方才可以禁止系统删除文件。资源--对话框---1011 资源--对话框---1012 资源--对话框---1013 资源--对话框---1021 资源--对话框---1022 将以上五个地址的键值禁用就可以了! 5、禁止文件被改名,修改shell32.dll,有2个地方需要修改资源--对话框---1018 资源--对话框---1019 将以上两处的相应键值,修改为禁用就可以了! 6、禁止运行菜单,修改shell32.dll,将资源--对话框---1018键值设置为禁用。7、禁止系统文件被挪动修改shell32.dll,需要修改4个地方资源--对话框---1014 资源--对话框---1015 资源--对话框---1016 资源--对话框---1017 8、禁止目标另存为,修改Shdoclc.dll文件,需要修改3个地方资源--菜单--258---257 资源--菜单--258---252 资源--菜单--24641--2268 在这个修改中,我们要把各对应的键值删除。打开该键值后,右键菜单中有删除。在资源--菜单--24641-2268中,有多项该键值,请逐一删除。9、禁止自定义文件夹选项修改Shell32.dll文件,需要修改以下4个地方资源--菜单--215---28719 资源--菜单--216---28719 资源--菜单--217---28719 资源--菜单--216---28719 找到以上四处键值,直接需要删除后即可,而不是禁用。10、禁止IE文件夹选项,修改Browselc.dll文件,需要修改3个键值资源--菜单--263 (这里有多个请删除)---41251(删除) 资源--菜单--266(也有多个请删除)---41329 (删除) 资源--菜单--268---41251 (删除) 在上面的3个键值中,个别键值有多处,请逐一删除。11、禁止98文件共享控件,修改Msshrui.dll,需要修改2个地方资源---对话框---- 1 --- AutoRadioButton 资源---对话框---- 30 --- AutoRadioButton 将以上两处的键值禁

高级内存代码注入技术

高级内存代码注入技术 1、概述 1.1 PE注入 我们知道进程注入的方法分类主要有以下几种: DLL注入利用注册表注入利用Windows Hooks注入利用远程线程注入利用特洛伊DLL注入不带DLL的注入直接将代码写入目标进程,并启动远程线程 本文中的技术不同于以往的DLL注入和shellcode注入。通过此方法可将一个进程的完整镜像完全注入到另外一个进程的内存空间中,从而在一个进程空间中包含了两套不同的代码。与DLL注入相比,PE注入的主要优势是不需要很多文件,只需要MAIN.EXE注入到其他进程并唤起自身代码即可。 1.2 影响 利用该方法可以达到一下多个效果: 创建Socket及网络访问访问文件系统创建线程访问系统库访问普通运行时库远控 键盘记录 2、技术原理 2.1 进程代码注入 将代码写入进程的方法较简单,Windows提供了进程内存读取和写入的系统API。首先需要获取某个进程的PID号,然后打开该进程,可以利用Kernel32链接库中的OpenProcess函数实现。

注:远程打开进程是受限的,从Vista起,就存在了类似UAC之类的防护措施。其中主要的进程内存保护机制是Mandatory Integrity Control(MIC)。MIC是基于“完整性级别”的对象访问控制保护方法。完整性级别包括如下四个级别: 低级别:被限制访问大部分系统资源(如IE);中级别:开启UAC时非特权用户和管理员组用户启动的进程;高级别:以管理员权限启动的进程系统级别:SYSTEM用户启动的进程,如系统服务。 根据以上完整性级别要求,我们的进程注入将只允许注入低级别或同等级别的进程。 本文将利用explorer.exe来举例,远程打开进程后利用VirtualAllocEx函数申请一段可保存本进程镜像的内存段,为了计算需要的内存大小我们可以通过读取PE头信息来获取。 ? 1 2 3 4 5 6 7 8 9 10 11 /*获取进程模块镜像*/ module = GetModuleHandle(NULL); /*获取PE头信息*/ PIMAGE_NT_HEADERS headers = (PIMAGE_NT_HEADERS)((LPBYTE)module +((PIMAGE_DOS_HEA /*获取代码长度*/ DWORD moduleSize = headers->OptionalHeader.SizeOfImage; 2.2 获取二进制地址 代码注入中遇到的一个常见问题是模块的基地址会不断变化的问题。通常情况下,当进程启动时,MAIN函数的基地址是0X00400000。当我们将代码注入到其他进程中时,新的基地址将产生在虚拟地址中不可预测的位置。

dll文件查看方法

步骤1 检测壳 壳的概念: 所谓“壳”就是专门压缩的工具。 这里的压缩并不是我们平时使用的RAR、ZIP这些工具的压缩,壳的压缩指的是针对exe、com、和dll等程序文件进行压缩,在程序中加入一段如同保护层的代码,使原程序文件代码失去本来面目,从而保护程序不被非法修改和反编译,这段如同保护层的代码,与自然界动植物的壳在功能上有很多相似的地方,所以我们就形象地称之为程序的壳。 壳的作用: 1.保护程序不被非法修改和反编译。 2.对程序专门进行压缩,以减小文件大小,方便传播和储存。 壳和压缩软件的压缩的区别是 压缩软件只能够压缩程序 而经过壳压缩后的exe、com和dll等程序文件可以跟正常的程序一样运行 下面来介绍一个检测壳的软件 PEID v0.92 这个软件可以检测出 450种壳 新版中增加病毒扫描功能,是目前各类查壳工具中,性能最强的。 另外还可识别出EXE文件是用什么语言编写的VC++、Delphi、VB或Delphi等。支持文件夹批量扫描 我们用PEID对easymail.exe进行扫描 找到壳的类型了 UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo 说明是UPX的壳 下面进行 步骤2 脱壳 对一个加了壳的程序,去除其中无关的干扰信息和保护限制,把他的壳脱去,解除伪装,还原软件本来的面目。这个过程就叫做脱壳。 脱壳成功的标志 脱壳后的文件正常运行,功能没有损耗。 还有一般脱壳后的文件长度都会大于原文件的长度。 即使同一个文件,采用不同的脱壳软件进行脱壳,由于脱壳软件的机理不通,脱出来的文件大小也不尽相同。 关于脱壳有手动脱壳和自动脱壳 自动脱壳就是用专门的脱壳机脱很简单按几下就 OK了 手动脱壳相对自动脱壳需要的技术含量微高这里不多说了

C盘里那些文件可以删除哪些不能删

C盘里那些文件可以删除,哪些不能删 1.磁盘清理里面的INTERNET临时文件总是特别大,刚浏览几个网页就达到几十兆了,即使我每天清理,C盘空间仍然在减少.现在仅剩下20多M了. 2.已经查毒查木马间谍了,仍然一无所获,.不知道C盘里究竟哪个文件在不断增大,是WINDOWS里的文件还是其他的?有没有什么软件可以帮助我? 3.我安装软件从来不装在C盘里,最近也没有安装什么软件,唯一的变化是从网上用BT下载过几个较大的文件(1G左右),下载到其他盘了.会不会对C盘造成影响? 先谢谢各位了,如能帮我解决问题,感激不尽! 试用期一级 最佳答案

可以这样释放一些C盘空间: 1.打开"我的电脑"-"工具"-"文件夹选项"-"查看"-在"显示所有文件和文件夹"选项前打勾-再按"确定" 2.删除以下文件夹中的内容: C:\Documents and Settings\用户名\Cookies\下的所有文件(保留index 文件) C:\Documents and Settings\用户名\Local Settings\Temp\下的所有文件(用户临时文件) C:\Documents and Settings\用户名\LocalSettings\TemporaryInternet Files\下的所有文件(页面文件) C:\Documents and Settings\用户名\Local Settings\History\下的所有文件(历史纪录) C:\Documents and Settings\用户名\Recent\下的所有文件(最近浏览文件的快捷方式)

SQL Server 返回最后插入记录的自动编号ID

SQL Server 返回最后插入记录的自动编号ID 最近在开发项目的过程中遇到这么一个问题,就是在插入一条记录的后立即获取其在数据库中自增的ID,以便处理相关联的数据,怎么做?在sql server 2000中可以这样做,有几种方式。详细请看下面的讲解与对比。 一、要获取此ID,最简单的方法就是:(以下举一简单实用的例子) --创建数据库和表 create database MyDataBase use MyDataBase create table mytable ( id int identity(1,1), name varchar(20) ) --执行这个SQL,就能查出来刚插入记录对应的自增列的值 insert into mytable values('李四') select @@identity 二、三种方式的比较 SQL Server 2000中,有三个比较类似的功能:他们分别是:SCOPE_IDENTITY、IDENT_CURRENT 和@@IDENTITY,它们都返回插入到IDENTITY 列中的值。IDENT_CURRENT 返回为任何会话和任何作用域中的特定表最后生成的标识值。IDENT_CURRENT 不受作用域和会话的限制,而受限于指定的表。IDENT_CURRENT 返回为任何会话和作用域中的特定表所生成的值。 @@IDENTITY 返回为当前会话的所有作用域中的任何表最后生成的标识值。 SCOPE_IDENTITY 返回为当前会话和当前作用域中的任何表最后生成的标识值SCOPE_IDENTITY 和@@IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值。但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值;@@IDENTITY 不受限于特定的作用域。 例如,有两个表T1 和T2,在T1 上定义了一个INSERT 触发器。当将某行插入T1 时,触发器被激发,并在T2 中插入一行。此例说明了两个作用域:一个是在T1 上的插入,另一个是作为触发器的结果在T2 上的插入。 假设T1 和T2 都有IDENTITY 列,@@IDENTITY 和SCOPE_IDENTITY 将在T1 上的INSERT 语句的最后返回不同的值。 @@IDENTITY 返回插入到当前会话中任何作用域内的最后一个IDENTITY 列值,该值是插入T2 中的值。

如何注册DLL文件

将您下载的"*. DLL" 文件复制到"C:\Windows\system32\" 系统目录下然后按"Win键+R" 或单击"开始"->"运行" 输入"regsvr32 *.dll" 命令注册到系统文件。适用于Windows95/98/xp/2000/vista/win7. 如何注册Windows\system32\下的所有.dll和.ocx文件? 在开始->运行(win+r)下输入命令: cmd /c for %i in (%windir%\system32\*.dll) do regsvr32.exe /s %i cmd /c for %i in (%windir%\system32\*.ocx) do regsvr32.exe /s %i Regsvr 32命令详解(DLL、OCX、CPL文件的注册和反注册工具) Regsvr 32命令是Windows中控件文件(如扩展名为DLL、OCX、CPL的文件)的注册和反注册工具。 命令格式: Regsvr32 [/s] [/n] [/i[:cmdline]] dllname /u 卸载安装的控件,卸载服务器注册; /s 注册成功后不显示操作成功信息框; /i 调用DllInstall函数并把可选参数[cmdline]传给它,当使用/u时用来卸载DLL;/n 不调用DllRegisterServer,该参数必须和/i一起使用。 实例当你运行一个软件,WINDOWS出现出错窗口,提示为*.DLL文件或者*.OCX 文件找不到,可是搜索一下,这个文件就在C:\WINDOWS\SYSTEM目录中.为什么呢?这是因为这个文件没有在WINDOWS中注册.也就是说WINDOWS还不认识它.假设你要注册的是abc.dll.选择"开始--运行"然后输入“regsvr32 abc.dll”,如果弹出提示信息“DllRegisterServerin Wupdinfo.dll succeeded”,说明组件注册成功;失败一般会出现“LoadLibrary("svchost.dll")失败-找不到指定的模块”,如果要卸载此组件,在“开始→运行”中键入“Regsvr32 /u Wupdinfo.dll ”即可。 实例1:IE无法打开新窗口regsvr32 actxprxy.dll regsvr32 shdocvw.dll 重启后如果还不能解决regsvr32 mshtml.dll regsvr32 urlmon.dll regsvr32 msjava.dll regsvr32 browseui.dll regsvr32 oleaut32.dll regsvr32 shell32.dll 实例2:IE无法保存HTML格式文件regsvr32 inetcomm.dll 实例3:MSN无法登陆regsvr32 softpub.dll 实例4:windows默认的文件关联混乱regsvr32 /i shdocvw.dll regsvr32 /i shell.dll regsvr32 /i shdoc401.dll 实例5:Window server 2003中无法播放MP3 regsvr32 i3codeca.acm regsvr32 i3codecx.ax 实例6:Windows添加/删除程序无法启动regsvr32 mshtml.dll regsvr32 /i shdocvw.dll regsvr32 /i shell.dll 实例7:Windows搜索功能故障regsvr32 urlmon.dll 实例8:禁止系统对媒体文件进行预览regsvr32 /u shmedia.dll

为什么移动硬盘在自己的电脑上不能删除文件了

为什么移动硬盘在自己的电脑上不能删除文件 了 集团文件发布号:(9816-UATWW-MWUB-WUNN-INNUL-DQQTY-

问题出来的原因:有一天插上了移动硬盘,然后通过磁盘管理器想看看移动硬盘是不是已经连接好了。但是突然有事,就直接拔硬盘走人。因为硬盘里面有工作的东西,所以要拔出来带走。然后等下次在这台电脑插上硬盘悲剧发生了,不能复制文件,也不能移除文件。但是在其他电脑没有任何问题。 1 移动硬盘文件不能删除的原因: win7系统的磁盘写保护功能,导致了这个问题。这个问题在xp系统是不会出现的,只有win7或者win7以上的系统才会出现。虽然说有时候直接拔移动硬盘会造成不能删除文件很麻烦,但是这也让我们养成硬盘要安全移除的好习惯。 2 解决方法: 在开始运行里面输入cmd记得要以管理员身份运行,然后在命令窗口输入c:diskpart(列出所有盘,方便我们找到我们移动硬盘的盘符),然后输入:diskpart;list disk (选择要操作的盘)。 diskpart;select disk F(F代表我的移动硬盘),diskpart;att disk clear readonl(去掉win7系统的磁盘保护),diskpart;exit 结束退出。 3 经过第二步,现在试一下你的移动硬盘,肯定能复制文件,移动文件了。如果还不行就重启下把。 以上是关于为什么移动硬盘在自己的电脑上不能删除文件了。很多时候出现这种硬盘不能复制的问题,如果是工作的需要都会导致我们重装系统之类的。希望你能分享下这篇文章,让更多人能够快速找到解决方法。注:更多精彩教程请关注三联电脑教程栏目,三联电脑办公群欢迎你的加入

文件夹无法访问、无法删除解决方案

文件夹无法访问、拒绝访问、无法删除的解决方法 如果要解决这个问题,首先必须关闭“简单文件共享”,然后获取文件夹的所有权。 第一步. 关闭“简单文件共享”: 《一》. 单击“开始”,然后单击“我的电脑”。 《二》. 在“工具”菜单上,单击“文件夹选项”,然后单击“查看”选项卡。《三》. 在“高级设置”下,单击以清除“使用简单文件共享 (推荐)”复选框,然后单击“确定”。 第二步. 右键单击您希望获得其所有权的文件夹,然后单击“属性”。 第三步. 单击“安全”选项卡,然后单击“安全”消息框(如果有出现)中的“确定”。 第四步. 单击“高级”,然后单击“所有者”选项卡。 第五步. 在“名称”列表中,单击您的用户名,如果您是作为管理员登录的,请单击“Administrator”,或者单击“Administrators”组。如果您希望获得该文件夹内容的所有权,请单击以选中“替换子容器及对象的所有者”复选框。 第六步. 单击“确定”。 您可能会收到以下错误信息,其中 Folder 是您想获得其所有权的文件夹的名称: You do not have permission to read the contents of directory Folder.Do you want to replace the directory permissions with permission s granting you Full Control?All permissions will be replaced if you press Yes 第七步. 单击“是”即可。 第八步. 单击“确定”,然后对该文件夹及其内容重新应用您希望的权限及安全设置。 怎样删除解决访问的文件夹? 在XP中的“文件夹选项”的“查看”选项卡下去掉“使用简单文件共享(推荐)”复选框。"拒绝访问"文件夹的“属性”->“安全”->“高级”-〉“所有者”-〉“目前该项目的所有者”如果类似是"S- 1-5-21-1528117516-2020809315-3846545974-1000"的代码,“将所有者改为”当前管理员账户,勾选“替换子容器及对象的所有者”,“确定”。打开“高级安全设置”的“权限”选项卡下,勾选“从父项继承....,..明确定义的项目”复选框和“用在此显示的可以应用到子对象的项目....”复选框,点击“确定”。完成后就可以直接删除"拒绝访问"的文件夹了,此方法对WINXP和VISTA都有用。

计算机三级信息安全技术第四套

TCSEC标准是计算机系统安全评估的第一个正式标准,具有划时代的意义。该准则于1970年由美国国防科学委员会提出,并于1985年12月由美国国防部公布。TCSEC最初只是军用标准,后来延至民用领域。TCSEC将计算机系统的安全划分为4个等级、7个级别。 TACACS使用固定的密码进行认证,而TACACS+允许用户使用动态密码,这样可以提供更强大的保护。 Diffie-Hellman:一种确保共享KEY安全穿越不安全网络的方法,这个密钥交换协议/算法只能用于密钥的交换,而不能进行消息的加密和解密。ElGamal算法,是一种较为常见的加密算法,它是基于1984年提出的公钥密码体制和椭圆曲线加密体系。ECC是"Error Checking and Correcting"的简写,中文名称是"错误检查和纠正"。ECC是一种能够实现"错误检查和纠正"的技术。 如果密钥丢失或其它原因在密钥未过期之前,需要将它从正常运行使用的集合中除去,称为密钥的()。A) 销毁 B) 撤销C) 过期D) 更新 密钥的替换与更新:当密钥已泄露、被破坏或将要过期时,就要产生新的密钥来替换或更新旧的密钥。 密钥撤销:如果密钥丢失或因其他原因在密钥未过期之前,需要将它从正常运行使用的集合中除去。 密钥销毁:不用的就密钥就必须销毁。 下列关于消息认证的说法中,错误的是()。 A) 对称密码既可提供保密性又可提供认证 B) 公钥密码既可提供认证又可提供签名 C) 消息认证码是一种认证技术,它利用密钥来生成一个固定长度的数据块,并将该数据块附加在消息之后 D) 消息认证码既可提供认证又可提供保密性 消息认证码是一种认证技术,它利用密钥来生成一个固定长度的数据块,并将该数据块附加在消息之后。消息认证码只提供认证。 消息加密分为对称加密和非对称加密。传统密码既可以提供认证又可提供保密性。利用公钥进行加密可提供认证和签名。 MAC中消息是以明文形式发送所以不提供保密性,但是可以在使用过MAC算法之后对报文加密或在使用MAC之前对消息加密来获取保密性,由于收发双方共享密钥,因此MAC不能提供数字签名功能。 防范计算机系统和资源被未授权访问,采取的第一道防线是()。 A) 访问控制B) 授权C) 审计D) 加密 对网络用户的用户名和口令进行验证是防止非法访问的第一道防线。用户注册时首先输入用户名和口令,服务器将验证所输入的用户名是否合法。如果验证合法,才继续验证用户输入的口令,否则,用户将被拒之网络之外。下列选项中,进行简单的用户名/密码认证,且用户只需要一个接受或拒绝即可进行访问(如在互联网服务提供商ISP 中)的是()。 A) RADIUS B) TACACS C) Diameter D) RBAC RADIUS是一种C/S结构的协议,它的客户端最初就是NAS 服务器,任何运行RADIUS客户端软件的计算机都可以成为RADIUS的客户端。RADIUS协议认证机制灵活,可以采用PAP 、CHAP 或者Unix登录认证等多种方式。由于RADIUS协议简单明确,可扩充,因此得到了广泛应用,包括普通电话上网、ADSL 上网、小区宽带上网、IP电话、VPDN (Virtual Private Dialup Networks,基于拨号用户 的虚拟专用拨号网业务)、移动电话预付费等业务。故选择A选项。 进程是资源分配的基本单位。所有与该进程有关的资源,都被记录在进程控制块PCB中。以表示该进程拥有这些资源或正在使用它们。与进程相对应,线程与资源分配无关,它属于某一个进程,并与进程内的其他线程一起共享进程的资源。通常在一个进程中可以包含若干个线程,它们可以利用进程所拥有的资源。在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位。 下列关于保护环的说法中,错误的是(A)。 A) 3环中的主体不能直接访问1环中的客体,1环中的主体同样不能直接访问3环中的客体 B) 保护环对工作在环内的进程能够访问什么、能够执行什么命令提出了严格的界线和定义 C) 保护环在主体和客体之间提供了一个中间层,当一个主体试图访问一个客体时,可以用它来进行访问控制 D) 在内环中执行的进程往往处于内核模式,在外环中工作的进程则处于用户模式 保护环对工作在环内的进程能够访问什么、能够执行什么命令提出了严格的界线和定义。保护环在主体和客体

数据安全(DLP)的实现

随着越来越多的“艳照门”、美国的“照片门”事件的发生,我开始关注起加密软件来。虽然我不是这些事件里的主角,但电脑上面还是有很多私人的重要资料不想被别人看到。小编上网找了很多资料,也试用了许多不同的加密软件,开始对现今流行的几种加密软件有一定的了解。 目前在关于加密软件这一块存在不少问题,有很多人不知道也不了解加密软件。针对这些问题的解决方案,小编概括为以下几种情况:,希望可以对你有所帮助。 一、企业重要资料流散在各电脑内 风险分析:这种情况造成资料泄密机会多,管理不方便。 泄密途径:员工带走自己电脑和其他员工共享文件里面的东西。 解决方案:采用普通文件加密模型即可 二、企业核心资料存在服务器 风险分析:这种情况造成资料泄密的机会少,但由于资料的集中,泄密危害更大。 泄密途径:有机会接触服务器、或有资格调用整个服务器文件的人。 解决方案:可以采用智能加密模型,员工正常调用核心资料,一旦非法传出企业,文件无法打开。优势在于既保护核心资料,又不增加人力成本。 三、部门复杂的企业 风险分析:在部门结构复杂的企业里面,因为部门间文件交流的复杂性,增加了造成泄密的机会。 泄密途径:部门中间需要传阅的重要文件无法控制其流向,增加了流失机会。 解决方案:利用文档报表修改加密的加密模型配合基于PKI体系的权限控制,可以设置部门间的只读、打印等权限控制,解决文件在部门间流失的威胁。 针对以上问题,现在大部分公司的控制举例如下: 分别在财务部、技术部安装客户端,彼此的文件互不相通。对于上级主管,比如老板,则可以同时打开双方的文件。销售部加密Office文件,技术部则仅图纸加密设计文件。但经常需要将财务部的Office文件发送给技术部查看。技术部设计的产品需要经常和车间及销售部的人员交流,但不希望三个部门之间互通,同时在图纸加密交于其他部门的时候,能够精通到某一个人,并且限制他不能修改打印文件。 四、需要与管理流程结合的企业 安全方面的管理软件,为了工作的便利性可以与企业的管理系统做相应的结合。结合方案具体请与相关技术人员沟通。 根据笔者多年的文件加密实施经验,针对目前最优秀的文件加密必备的技术,总结出以下结论:

dll文件怎么打开和eXeScope的使用方法及其修改

eXeScope的使用方法及其修改 一、eXeScope的几种使用方法 修改系统DLL文件实现禁用 首先引导下系统主要的些dll 基本上只要修改它们就可以实现很高的安全性首先请没改过DLL的朋友请下载个 EXESCOPE6.3 - 6.4工具 1.Browselc.dll IE所需要调用的库文件DLL 结构雏形就是它了 2.Shdoclc.dll 系统窗口及设置对话框等等........ 比如删除文件重命名. 3.Shell32.dll 和上面是同类的 4.Explorer.exe 开始菜单调用的程序 ......系统就上加载他进系统 5.Cryptui.dll IE控件下载提示对话筐程序 现在我们就讲下任何修改这些程序来达到禁止的目的 一 1. 禁止下载打开 Shdoclc.dll 修改资源--对话框---4416 2. 禁止网页添加到收藏夹 Shdoclc.dll 修改资源--对话框---21400 EXESCOPE工具右边有个“禁用”的选项用这个功能把要点确定的地方禁止掉 就可以不用把确定键给删除如果以后要恢复也方便 二 1. 禁止恶意网页加载控件 Cryptui.dll 修改要同时修改5个地方才能完全禁止 资源--对话框---130 资源--对话框---230 资源--对话框---4101 资源--对话框---4104 资源--对话框---4107 三

1.禁止系统删除 Shell3 2.dll 修改5个地方 资源--对话框---1011 资源--对话框---1012 资源--对话框---1013 资源--对话框---1021 资源--对话框---1022 2. 禁止文件被改名修改 2个地方 资源--对话框---1018 资源--对话框---1019 3. 禁止运行菜单 资源--对话框---1018 4. 禁止系统文件被挪动修改3个地方 资源--对话框---1014 资源--对话框---1015 资源--对话框---1016 资源--对话框---1017 四禁止目标另存为 修改 Shdoclc.dll 文件 以下3个地方 1 资源--菜单--258---257 (删除) 2 资源--菜单--258---252 (删除) 3 资源--菜单--24641--2268 (删除这里有多项相同的删除就可以了) 五禁止自定义文件夹选项 修改 Shell32.dll 文件 以下4个地方 1 资源--菜单--215---28719 (删除) 2 资源--菜单--216---28719 (删除) 4 资源--菜单--217---28719 (删除) 5 资源--菜单--216---28719 (删除) 六禁止IE文件夹选项 修改 Browselc.dll 文件 1 资源--菜单--263 (这里有多个请删除)---41251(删除) 2 资源--菜单--266( 也有多个请删除)---41329 (删除) 3 资源--菜单--268---41251 (删除) 七. 禁止98 文件共享控件

相关文档