当前位置: 首页 > news >正文

大网站的二级域名抖音宣传推广

大网站的二级域名,抖音宣传推广,自建html怎么融入wordpress,宁波网站建设营销推广DLL注入 一#xff1a;概念 1.dll注入是指向运行中的其它进程强制插入特定的dll文件。从技术细节来说#xff0c;DLL注入命令其他进程自行调用LoadLibrary() API#xff0c;加载用户指定的dll文件。 2.当dll被加载到进程中以后#xff0c;就拥有了访问进程内存的权限。(…DLL注入 一概念 1.dll注入是指向运行中的其它进程强制插入特定的dll文件。从技术细节来说DLL注入命令其他进程自行调用LoadLibrary() API加载用户指定的dll文件。 2.当dll被加载到进程中以后就拥有了访问进程内存的权限。(用户可以通过这个来修复程序bug或增加功能等)。 3.dll被加载到进程后会自动运行DllMain函数。 4. 使用LoadLibrary() API加载某个DLL时该DLL中的DllMain函数就会被自动执行。DLL注入的工作原理就是从外部促使目标进程调用LoadLibrary() API所以会强制掉用执行DLL的DllMain()函数。 二DLL注入的方法 (一)创建远程线程(CreateRemoteThread) [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aCYVUuJo-1617907504390)(DLL%E6%B3%A8%E5%85%A5%2051fe0c4d1b1449efa8c066c5cfeabc44/Untitled.png)] 1. hackme.dll源码使用到的函数解析 在看源码时对照此处进行理解 (1)#pragma comment( comment-type [, commentstring] ) 将描述记录安排到目标文件或可执行文件中去。comment-type是下面说明的五个预定义标识符中的一个用来指定描述记录的类型。可选的commentstring是一个字符串文字值用于为一些描述类型提供附加的信息。因为commentstring是一个字符串文字值所以它遵从字符串文字值的所有规则例如换码字符、嵌入的引号和联接。 当comment-type是lib的时候 **将一个库搜索记录放置到目标文件中去。**该描述类型必须有包含你要连接程序搜索的库名和可能的路径的commentstring参数。因为在目标文件中该库名先于默认的库搜索记录所以连接程序将如同你在命令行输入这些库一样来搜索它们。你可以在一个源文件中放置多个库搜索记录每个记录将按照它们出现在源文件中的顺序出现在目标文件中。 换句话说就是将静态库导入到你的项目中去。 (2)ThreadProc 定义ThreadProc是一个应用程序定义的函数的名称的占位符。作为一个线程的起始地址。在调用CreateThread函数时指定该地址。 原型DWORD WINAPI ThreadProc(LPVOID lpParameter); 参数lpParameter 接收线程传递给函数使用的CreateThread函数lpParameter参数数据。 返回值函数应该返回一个值表示线程函数返回退出码一般使用0作为返回值。 线程创建成功,返回非零值,否则为0。一个进程可以通过调用GetExitCodeThread函数获取由CreateThread创建的线程的ThreadProc函数的返回值 (3)GetModuleFileName 获取当前进程已加载模块的文件的完整路径该模块必须由当前进程加载。 如果想要获取另一个已加载模块的文件路径可以使用GetModuleFileNameEx函数。 hModule Long 一个模块的句柄。可以是一个DLL模块或者是一个应用程序的实例句柄。如果该参数为NULL该函数返回该应用程序全路径。 GetModuleFileName(HMODULE hModule,LPTSTR lpFilename,DWORD nSize);lpFileName String: 指定一个字串缓冲区要在其中容纳文件的用NULL字符中止的路径名hModule模块就是从这个文件装载进来的 nSize Long 装载到缓冲区lpFileName的最大字符数 返回值如果返回为成功将在lpFileName的缓冲区当中返回相应模块的路径如果所设的nSize过小那么返回仅按所设置缓冲区大小返回相应字符串内容。如果函数失败返回值将为0利用GetLastError可获得异常代码。 (4) _tcsrchr 查找字符串中某个字符最后一次出现的位置 两个参数 第一个参数字符串 第二个参数查找的字符 返回值指向最后一次在字符串中出现的该字符的指针如果要查找的字符再串中没有出现则返回NULL。 (5)_tcscpy_s 字符拷贝函数使用的如果是UNICODE编码则采用wcscpy_s()函数如果是多字节编码则采用strcpy_s()函数。 功能字符串拷贝 后缀_s表示使用安全的字符串拷贝函数防止缓冲区不够大而引起错误。 (6)URLDownloadToFile URLDownloadToFile指从指定URL地址读取内容并将读取到的内容保存到特定的文件里的实现方法。 函数原型 HRESULT URLDownloadToFile( LPUNKNOWN pCaller,LPCTSTR szURL,LPCTSTR szFileName,DWORD dwReserved,LPBINDSTATUSCALLBACK lpfnCB );参数 pCallerPointer to the controlling IUnknown interface of the calling Microsoft ActiveX component (if the caller is an ActiveX component). //控件的接口,如果不是控件则为0. szURL Pointer to a string value containing the URL to be downloaded. Cannot be set to NULL //要下载的url地址,不能为空. szFileName Pointer to a string value containing the name of the file to create for bits that come from the download. //下载后保存的文件名. dwReserved Reserved. Must be set to 0. //保留字段,必需为0 lpfnCB Pointer to the caller’s IBindStatusCallback interface. URLDownloadToFile calls this interface’s IBindStatusCallback::OnProgress method on a connection activity, including the arrival of data. IBindStatusCallback::OnDataAvailable is never called. //下载进度状态回调 返回值: Returns one of the following values. S_OK : The download started successfully. E_OUTOFMEMORY: The buffer length is invalid, or there is insufficient memory to complete the operation. INET_E_DOWNLOAD_FAILURE:The specified resource or callback interface was invalid. (7)DLLMain: 函数原型 BOOL WINAPI DllMain( HINSTANCE hinstDLL, // 指向自身的句柄 DWORD fdwReason, // 调用原因 LPVOID lpvReserved // 隐式加载和显式加载 );静态链接时或动态链接时调用LoadLibrary和FreeLibrary都会调用DllMain函数。DllMain的第二个参数fdwReason指明了系统调用Dll的原因它可能是: DLL_PROCESS_ATTACH、 DLL_PROCESS_DETACH、 DLL_THREAD_ATTACH、 DLL_THREAD_DETACH。 进程映射 DLL_PROCESS_ATTACH 大家都知道一个程序要调用Dll里的函数首先要先把DLL文件映射到进程的地址空间。要把一个DLL文件映射到进程的地址空间有两种方法静态链接和动态链接的LoadLibrary或者LoadLibraryEx。 当一个DLL文件被映射到进程的地址空间时系统调用该DLL的DllMain函数传递的fdwReason参数为DLL_PROCESS_ATTACH这种调用只会发生在第一次映射时。如果同一个进程后来为已经映射进来的DLL再次调用LoadLibrary或者LoadLibraryEx操作系统只会增加DLL的使用次数它不会再用DLL_PROCESS_ATTACH调用DLL的DllMain函数。不同进程用LoadLibrary同一个DLL时每个进程的第一次映射都会用DLL_PROCESS_ATTACH调用DLL的DllMain函数。 可参考DllMainTest的DLL_PROCESS_ATTACH_Test函数。 进程卸载 DLL_PROCESS_DETACH 当DLL被从进程的地址空间解除映射时系统调用了它的DllMain传递的fdwReason值是DLL_PROCESS_DETACH。当DLL处理该值时它应该执行进程相关的清理工作。 那么什么时候DLL被从进程的地址空间解除映射呢两种情况 ◆FreeLibrary解除DLL映射有几个LoadLibrary就要有几个FreeLibrary ◆进程结束而解除DLL映射在进程结束前还没有解除DLL的映射进程结束后会解除DLL映射。如果进程的终结是因为调用了TerminateProcess系统就不会用DLL_PROCESS_DETACH来调用DLL的DllMain函数。这就意味着DLL在进程结束前没有机会执行任何清理工作。 注意当用DLL_PROCESS_ATTACH调用DLL的DllMain函数时如果返回FALSE说明没有初始化成功系统仍会用DLL_PROCESS_DETACH调用DLL的DllMain函数。因此必须确保清理那些没有成功初始化的东西。 可参考DllMainTest的DLL_PROCESS_DETACH_Test函数。 线程映射 DLL_THREAD_ATTACH 当进程创建一线程时系统查看当前映射到进程地址空间中的所有DLL文件映像并用值DLL_THREAD_ATTACH调用DLL的DllMain函数。 新创建的线程负责执行这次的DLL的DllMain函数只有当所有的DLL都处理完这一通知后系统才允许进程开始执行它的线程函数。 注意跟DLL_PROCESS_ATTACH的区别我们在前面说过第n(n2)次以后地把DLL映像文件映射到进程的地址空间时是不再用DLL_PROCESS_ATTACH调用DllMain的。而DLL_THREAD_ATTACH不同进程中的每次建立线程都会用值DLL_THREAD_ATTACH调用DllMain函数哪怕是线程中建立线程也一样。 线程卸载 DLL_THREAD_DETACH 如果线程调用了ExitThread来结束线程线程函数返回时系统也会自动调用ExitThread系统查看当前映射到进程空间中的所有DLL文件映像并用DLL_THREAD_DETACH来调用DllMain函数通知所有的DLL去执行线程级的清理工作。 注意如果线程的结束是因为系统中的一个线程调用了TerminateThread系统就不会用值DLL_THREAD_DETACH来调用所有DLL的DllMain函数。 (8)OutputDebugString Win32 开发人员可能对 OutputDebugString()API 函数比较熟悉它可以使你的程序和调试器进行交谈。它要比创建日志文件容易而且所有“真正的”调试器都能使用它。应用程序和调试器交谈的机制相当简单而本文将揭示整件事情是如何工作的。 windows.h 文件声明了 OutputDebugString() 函数的两个版本 - 一个用于 ASCII一个用于 Unicode - 不像绝大多数 Win32 API 一样原始版本是 ASCII。而大多数的 Win32 API 的原始版本是 Unicode。使用一个 NULL 结尾的字符串缓冲区简单调用 OutputDebugString() 将导致信息出现在调试器中如果有调试器的话。 (9)CreateThread CreateThread是一种微软在Windows API中提供了建立新的线程的函数该函数在主线程的基础上创建一个新线程。线程终止运行后线程对象仍然在系统中必须通过CloseHandle函数来关闭该线程对象。 函数原型 HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes,//SD SIZE_T dwStackSize,//initialstacksize LPTHREAD_START_ROUTINE lpStartAddress,//threadfunction LPVOID lpParameter,//threadargument DWORD dwCreationFlags,//creationoption LPDWORD lpThreadId//threadidentifier )参数 lpThreadAttributes指向SECURITY_ATTRIBUTES型态的结构的指针。在Windows 98中忽略该参数。在Windows NT中NULL使用默认安全性不可以被子线程继承否则需要定义一个结构体将它的bInheritHandle成员初始化为TRUE dwStackSize设置初始栈的大小以字节为单位如果为0那么默认将使用与调用该函数的线程相同的栈空间大小。任何情况下Windows根据需要动态延长堆栈的大小。 lpStartAddress指向线程函数的指针形式函数名函数名称没有限制, 线程有两种声明方式 1DWORD WINAPI 函数名 (LPVOID lpParam); //标准格式 DWORD WINAPI 函数名 (LPVOID lpParam) {return 0; } CreateThread(NULL, 0, 函数名, 0, 0, 0);2void 函数名(); 使用void 函数名()此种线程声明方式时lpStartAddress需要加入LPTHREAD_START_ROUTINE转换如 void 函数名() {return; } CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)函数名, 0, 0, 0);lpParameter向线程函数传递的参数是一个指向结构的指针不需传递参数时为NULL。 dwCreationFlags 线程标志,可取值如下 1CREATE_SUSPENDED(0x00000004)创建一个挂起的线程 20表示创建后立即激活。 3STACK_SIZE_PARAM_IS_A_RESERVATION(0x00010000)dwStackSize参数指定初始的保留堆栈 的大小否则,dwStackSize指定提交的大小。该标记值在Windows 2000/NT and Windows Me/98/95上不支持。 lpThreadId:保存新线程的id。 返回值函数成功返回线程句柄函数失败返回false。若不想返回线程ID,设置值为NULL。 2. hackme.dll源码分析 #include windows.h #include tchar.h //导入宽字节头文件#pragma comment(lib, urlmon.lib) //将静态库链接到项目中#define DEF_URL (Lhttp://www.syjblog.com/) //define我们要保存的网页 #define DEF_FILE_NAME (Lsavedwebsite.html) //define我们保存的网页的文件名HMODULE g_hMod NULL;DWORD WINAPI ThreadProc(LPVOID lParam) //LPVOID是一个没有类型的指针,可以将LPVOID类型的变量赋值给任意类型的指针 {TCHAR szPath[_MAX_PATH] { 0, }; //定义一个数组来储存路径if (!GetModuleFileName(g_hMod, szPath, MAX_PATH)){return FALSE;}TCHAR *p _tcsrchr(szPath, \\); //在szPath储存的路径中从右到左寻找字符\\并返回字符串指针if (!p){return FALSE;}_tcscpy_s(p 1, _MAX_PATH, DEF_FILE_NAME); //生成文件保存的路径, 将savedwebsite.html保存在szPath路径最后的\字符之后URLDownloadToFile(NULL, DEF_URL, szPath, 0, NULL); //下载文件保存到szPath所描述的文件中return 0; }BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {//hinstDLL: 指向自身的句柄HANDLE hTread NULL; //定义一个通用句柄g_hMod (HMODULE)hinstDLL; //将dll自身的句柄赋给g_hModswitch(fdwReason){case DLL_PROCESS_ATTACH:OutputDebugString(Lmyhack.dll Injection!!!); //调用OutputDebugString函数和调试器交流并在调试器中输出字符串hTread CreateThread(NULL, 0, ThreadProc, NULL, 0, NULL);CloseHandle(hTread);break;}return TRUE; }3. InjectDll.exe用到的函数以及指针解析 (1)LPTHREAD_START_ROUTINE LPTHREAD_START_ROUTINE是一种函数该函数指向一个函数通知宿主某个线程已开始执行。 定义typedef DWORD (__stdcall *LPTHREAD_START_ROUTINE) (LPVOID lpThreadParameter); 参数lpThreadParameter一个指向已经开始执行的代码的指针 备注LPTHREAD_START_ROUTINE 指向的函数是回调函数(就是将函数指针当作参数传递并在函数中使用该指针回调函数)并且必须由承载应用程序的编写器实现 2OpenProcess OpenProcess 函数用来打开一个已存在的进程对象并返回进程的句柄。 函数原型 HANDLE OpenProcess( DWORD dwDesiredAccess, //渴望得到的访问权限标志 BOOL bInheritHandle, // 是否继承句柄 DWORD dwProcessId// 进程标示符 ); 参数 **dwDesiredAccess [1]  **获取的权限可分为以下几种 PROCESS_ALL_ACCESS获取所有权限 PROCESS_CREATE_PROCESS创建进程 PROCESS_CREATE_THREAD创建线程 PROCESS_DUP_HANDLE使用DuplicateHandle()函数复制一个新句柄 PROCESS_QUERY_INFORMATION获取进程的令牌、退出码和优先级等信息 PROCESS_QUERY_LIMITED_INFORMATION获取进程特定的某个信息 PROCESS_SET_INFORMATION设置进程的某种信息 PROCESS_SET_QUOTA使用SetProcessWorkingSetSize函数设置内存限制 PROCESS_SUSPEND_RESUME暂停或者恢复一个进程 PROCESS_TERMINATE使用Terminate函数终止进程 PROCESS_VM_OPERATION在进程的地址空间执行操作 PROCESS_VM_READ使用ReadProcessMemory函数在进程中读取内存 PROCESS_VM_WRITE使用WriteProcessMemory函数在进程中写入内存 SYNCHRONIZE使用wait函数等待进程终止 **bInheritHandle**TRUE或者FALSE **dwProcessId**pid 返回值 如成功返回值为指定进程的句柄。 如失败返回值为空可调用GetLastError获得错误代码。 3VirtualAllocEx VirtualAllocEx 函数的作用是在指定进程的虚拟空间保留或提交内存区域除非指定MEM_RESET参数否则将该内存区域置0。 函数原形 LPVOID VirtualAllocEx( HANDLE hProcess, LPVOID lpAddress, SIZE_T dwSize, DWORD flAllocationType, DWORD flProtect ); hProcess 申请内存所在的进程句柄。 lpAddress 保留页面的内存地址一般用NULL自动分配 。 dwSize 欲分配的内存大小字节单位注意实际分配的内存大小是页内存大小的整数倍 flAllocationType 可取下列值 MEM_COMMIT为特定的页面区域分配内存中或磁盘的页面文件中的物理存储 MEM_PHYSICAL 分配物理内存仅用于地址窗口扩展内存 MEM_RESERVE保留进程的虚拟地址空间而不分配任何物理存储。保留页面可通过继续调用VirtualAlloc而被占用 MEM_RESET 指明在内存中由参数lpAddress和dwSize指定的数据无效 MEM_TOP_DOWN在尽可能高的地址上分配内存Windows 98忽略此标志 MEM_WRITE_WATCH必须与MEM_RESERVE一起指定使系统跟踪那些被写入分配区域的页面仅针对Windows 98 flProtect 可取下列值 PAGE_READONLY 该区域为只读。如果应用程序试图访问区域中的页的时候将会被拒绝访 PAGE_READWRITE 区域可被应用程序读写 PAGE_EXECUTE 区域包含可被系统执行的代码。试图读写该区域的操作将被拒绝。 PAGE_EXECUTE_READ 区域包含可执行代码应用程序可以读该区域。 PAGE_EXECUTE_READWRITE 区域包含可执行代码应用程序可以读写该区域。 PAGE_GUARD 区域第一次被访问时进入一个STATUS_GUARD_PAGE异常这个标志要和其他保护标志合并使用表明区域被第一次访问的权限 PAGE_NOACCESS 任何访问该区域的操作将被拒绝 PAGE_NOCACHE RAM中的页映射到该区域时将不会被微处理器缓存cached) 注:PAGE_GUARD和PAGE_NOCHACHE标志可以和其他标志合并使用以进一步指定页的特征。PAGE_GUARD标志指定了一个防护页guard page即当一个页被提交时会因第一次被访问而产生一个one-shot异常接着取得指定的访问权限。PAGE_NOCACHE防止当它映射到虚拟页的时候被微处理器缓存。这个标志方便设备驱动使用直接内存访问方式DMA来共享内存块。 返回值 执行成功就返回分配内存的首地址不成功就是NULL。 (4)WriteProcessMemory 此函数能写入某一进程的内存区域直接写入会出Access Violation错误故需此函数入口区必须可以访问否则操作将失败。 函数声明 BOOL WriteProcessMemory( HANDLE hProcess, LPVOID lpBaseAddress, LPVOID lpBuffer, DWORD nSize, LPDWORD lpNumberOfBytesWritten );参数 [1]. hProcess 由OpenProcess返回的进程句柄。 如参数传数据为 INVALID_HANDLE_VALUE 【即-1】目标进程为自身进程 [2]. lpBaseAddress 要写的内存首地址 在写入之前此函数将先检查目标地址是否可用并能容纳待写入的数据。 [3]. lpBuffer 指向要写的数据的指针。 [4]. nSize 要写入的字节数。 返回值 非零值代表成功。 可用GetLastError获取更多的错误详细信息。 (5)CreateRemoteThread 创建一个在其它进程地址空间中运行的线程(也称:创建远程线程)。 函数原型 HANDLE WINAPI CreateRemoteThread( __in HANDLE hProcess, __in LPSECURITY_ATTRIBUTES lpThreadAttributes, __in SIZE_T dwStackSize, __in LPTHREAD_START_ROUTINE lpStartAddress, __in LPVOID lpParameter, __in DWORD dwCreationFlags, __out LPDWORD lpThreadId );参数说明 [1] hProcess 线程所属进程的进程句柄. 该句柄必须具有 PROCESS_CREATE_THREAD, PROCESS_QUERY_INFORMATION, PROCESS_VM_OPERATION, PROCESS_VM_WRITE,和PROCESS_VM_READ 访问权限. [2] lpThreadAttributes 一个指向 SECURITY_ATTRIBUTES 结构的指针, 该结构指定了线程的安全属性. [3] dwStackSize 线程栈初始大小,以字节为单位,如果该值设为0,那么使用系统默认大小. [4] lpStartAddress 在远程进程的地址空间中,该线程的线程函数的起始地址. [5] lpParameter 传给线程函数的参数. [6] dwCreationFlags 线程的创建标志. Table [7] lpThreadId 指向所创建线程ID的指针,如果创建失败,该参数为NULL. 函数返回值 如果调用成功,返回新线程句柄. 如果失败,返回NULL. (6)WaitForSingleObject WaitForSingleObject函数用来检测hHandle事件的信号状态在某一线程中调用该函数时线程暂时挂起如果在挂起的dwMilliseconds毫秒内线程所等待的对象变为有信号状态则该函数立即返回如果时间已经到达dwMilliseconds毫秒但hHandle所指向的对象还没有变成有信号状态函数照样返回。 原型 DWORD WINAPI WaitForSingleObject( __in HANDLE hHandle, __in DWORD dwMilliseconds );参数 hHandle[in]对象句柄。可以指定一系列的对象如Event、Job、Memory resource notification、Mutex、Process、Semaphore、Thread、Waitable timer等。 dwMilliseconds[in]定时时间间隔单位为milliseconds毫秒.如果指定一个非零值函数处于等待状态直到hHandle标记的对象被触发或者时间到了。如果dwMilliseconds为0对象没有被触发信号函数不会进入一个等待状态它总是立即返回。如果dwMilliseconds为INFINITE对象被触发信号后函数才会返回。 返回值 执行成功返回值指示出引发函数返回的事件。它可能为以下值 可能值 参数dwMilliseconds有两个具有特殊意义的值0和INFINITE。若为0则该函数立即返回若为INFINITE则线程一直被挂起直到hHandle所指向的对象变为有信号状态时为止。 *WAIT_ABANDONED 0x00000080*当hHandle为mutex时如果拥有mutex的线程在结束时没有释放核心对象会引发此返回值。 WAIT_OBJECT_0 0x00000000 指定的对象出有有信号状态 WAIT_TIMEOUT 0x00000102等待超时 WAIT_FAILED 0xFFFFFFFF 出现错误可通过GetLastError得到错误代码 4. InjectDll.exe源码分析 #include windows.h #include tchar.hBOOL InjectDll(DWORD dwPID, LPCTSTR szDllPath) //L是长指针,P代表指针的意思,C代表const常量的意思,T代表通用类型的意思 {HANDLE hProcess NULL, hThread NULL;HMODULE hMod NULL;LPVOID pRemoteBuf NULL; //void型的长指针//确定路径需要占用的缓冲区大小, _tcslen测量字符串的长度,然后加上结尾的空字符,再乘sizeof(TCHAR)DWORD dwBufSize (DWORD)(_tcslen(szDllPath) 1) * sizeof(TCHAR);LPTHREAD_START_ROUTINE pThreadProc; //LPTHREAD_START_ROUTINE等价于typedef DWORD (__stdcall *LPTHREAD_START_ROUTINE) (LPVOID lpThreadParameter);//OpenProcess函数获取目标进程句柄PROCESS_ALL_ACCESS权限if ( !(hProcess OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwPID)) ){_tprintf(LOpenProcess(%d) failed!!! [%d]\n, dwPID, GetLastError()); //如果打开失败,使用GetLastError()来获取错误信息return FALSE;}//使用VirtualAllocEx函数在目标进程中分配内存大小为Dll路径的大小//VirtualAllocEx函数返回的是hProcess指向的目标进程的分配所得缓冲区的内存的首地址pRemoteBuf VirtualAllocEx(hProcess, NULL, dwBufSize, MEM_COMMIT, PAGE_READWRITE); //pRemoteBuf就是分配的内存的首地址//将myhack.dll路径 (c:\\myhack.dll)写入目标进程中分配到的内存WriteProcessMemory(hProcess, pRemoteBuf, (LPVOID)szDllPath, dwBufSize, NULL);//获取LoadLibraryA() API的地址// 这里主要利用来了kernel32.dll文件在每个进程中的加载地址都相同这一特点所以不管是获取加载到 // InjectDll.exe还是notepad.exe进程的kernel32.dll中的LoadLibraryW函数的地址都是一样的。这里的加载地// 址相同指的是在同一次系统运行中如果再次启动系统kernel32.dll的加载地址会变但是每个进程的// kernerl32.dll的加载地址还是一样的。hMod GetModuleHandle(Lkernel32.dll); //直接获取kernel32.dll的句柄pThreadProc (LPTHREAD_START_ROUTINE)GetProcAddress(hMod, LoadLibraryW);//为之前定义的函数指针赋成kernel32.dll中LoadLibraryW函数的地址//在目标进程notepad.exe中运行远程线程// pThreadProc notepad.exe进程内存中的LoadLibraryW()地址// pRemoteBuf notepad.exe进程内存中待加载注入dll的路径字符串的地址hThread CreateRemoteThread(hProcess, NULL, 0, pThreadProc, pRemoteBuf, 0, NULL); //hThread为新线程句柄WaitForSingleObject(hThread, INFINITE); //同样记得关闭句柄CloseHandle(hThread);CloseHandle(hProcess);return TRUE; }int _tmain(int argc, TCHAR *argv[]) {if( argc ! 3) //检测doc输入的参数个数是否是3个{_tprintf(LUSAGE : %s pid dll_path\n, argv[0]); //printf的通用类型return 1;}// change privilege if( !SetPrivilege(SE_DEBUG_NAME, TRUE) ) //提升权限,以便kill进程等操作return 1;// inject dllif( InjectDll((DWORD)_tstol(argv[1]), argv[2]) ) //argv[1]为进程的pid, argv[2]为dll的路径_tprintf(LInjectDll(\%s\) success!!!\n, argv[2]);else_tprintf(LInjectDll(\%s\) failed!!!\n, argv[2]);return 0; }
http://www.dnsts.com.cn/news/30834.html

相关文章:

  • 织梦做的网站不能用手机访问网页制作的论文
  • iis发布php网站wdcp更改网站域名
  • 福州企业制作网站怎样通过阿里云建设网站
  • 硅胶鞋垫移动网站建设平台建网站
  • 南昌建站系统外包百度网站评价
  • 长沙网站建设接单网站页面设计培训班
  • 长春企业网站模板建站安徽网站设计平台
  • 企业推广网站有哪些网站建设需要哪些证
  • sem网站推广怎么做建设部网站中煤三建
  • 网络营销跟网站推广有啥区别淘宝网站建设的目标是什么意思
  • 如何做家教网站沈阳做微网站
  • 网页制作与网站建设课程设计怎样在网站上做免费的推广
  • 网站和网页的区别在于百度如何精准搜索
  • 重庆网站建设沛宣保亭整站优化
  • 用sql2000做网站什么是网络营销的特点
  • 360如何做网站优化湛江网站建设方案
  • 中高端网站设计排名陕西省建设网三类人员证书查询系统
  • ppt做的好的有哪些网站有哪些自己做的网站显示不出来
  • 社区网站模板重庆建网站企业有哪些
  • 山东网站开发公司建工教育培训机构
  • 做徽标的网站南昌市网站建设公司
  • 重庆网站建设公司咨询亿企帮石家庄市城乡建设局网站
  • 网站开发绪论营销网站售后调查系统
  • 优礼品网站模板哈尔滨seo推广优化
  • 彩票网站开发演示自建网站怎么做二级页跳转
  • 做网站网页的专业专题网站建设策划
  • 制作网站上海网站建设毕业设计
  • 免费建网站哪个好网页设计分为几个部分
  • 美食网站联系我们怎么做企业网站建设模板多少钱
  • 汉阳放心的建站企丿我想找阿里巴巴做网站推广