热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

csrss.exe进程用CretateRemoteThread无法注入DLL

如题,已经提升至DEBUG权限了.winlogon.exe可以注入.这个进程又没窗口,SetWindowsHookEx没法试.有人试过吗?
如题,已经提升至DEBUG权限了.
winlogon.exe可以注入.
这个进程又没窗口,SetWindowsHookEx没法试.
有人试过吗?

26 个解决方案

#1


有的系统进程有保护,不是想注入就能注入的

#2


系统进程可能自身有保护.同时是否有杀毒软件拦截

#3


加了Messagebox()

发现是WriteProcessMemory失败了.

WriteProcessMemory返回5,拒绝访问,
问题是OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessId);
能返回句柄.
VirtualAllocEx()也没提示出错.
怎么回事

#4


这个进程有窗口,程序没响应时的结束任务或等待的窗口就是它的。
把你的代码弄上来

#5


不懂,看看!!!

#6



#include 
#include  
#include 
#include 
#include 

#pragma comment(lib, "shlwapi.lib")

TCHAR ModuleFile[MAX_PATH];
FILE* fp;
TCHAR szText[128] = {0};
TCHAR szClass[64] = {0};
WNDPROC OldWindowProc;
HWND hWinLogon;
HMODULE hDll;

BOOL CALLBACK lpEnumWindowsProc(HWND hwnd, LPARAM lParam)
{
if (IsWindow(hwnd))
{
::GetWindowText(hwnd, szText, _countof(szText));
::GetClassName(hwnd, szClass, _countof(szClass));
_ftprintf_s(fp, TEXT("%s\t\t%s\n"), szText, szClass);
if (!_tcscmp(szText, TEXT("SAS window")))
{
hWinLogon = hwnd;
//OldWindowProc = (WNDPROC)::SetWindowLongPtr(hwnd, GWL_WNDPROC, (LONG)NewWindowProc);
//SendMessage(hwnd, WM_HOTKEY, 123456, NULL);
return 0;
}
}
return TRUE;
}

void ThreadFunc(void *Arg)
{
_tfopen_s(&fp, TEXT("d:\\window.txt"), TEXT("wt,ccs=unicode"));
HDESK hWinLogon = OpenDesktop(TEXT("Winlogon"), 0, FALSE, GENERIC_ALL);
::EnumDesktopWindows(hWinLogon, lpEnumWindowsProc, NULL);
CloseDesktop(hWinLogon);
fclose(fp);
}

BOOL WINAPI DllMain(HINSTANCE hDllHandle, DWORD nReason, LPVOID Reserved)
{
switch ( nReason )
{
case DLL_PROCESS_ATTACH:
hDll = hDllHandle;
GetModuleFileName(NULL, ModuleFile, _countof(ModuleFile));
EnablePrivileges();

if (StrStrI(ModuleFile, TEXT("winlogon.exe")))
{
_beginthread(ThreadFunc, 0, 0);
}
else if (StrStrI(ModuleFile, TEXT("Rundll32.exe")))
{
DWORD dwProcessId = 496;
HANDLE hProcess = 0;  

if (dwProcessId)
{
hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, dwProcessId);
}
if (!hProcess)
{
MessageBox(NULL, TEXT("进程句柄无效"), TEXT("进程句柄无效"), MB_ICONWARNING);
return 0;
}

LPVOID Param = VirtualAllocEx(hProcess, 0, 256, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
if (!Param)
{
MessageBox(NULL, TEXT("申请内存失败"), TEXT("申请内存失败"), MB_ICONWARNING);
return 0;
}

GetModuleFileName(hDllHandle, ModuleFile, _countof(ModuleFile));

if (!WriteProcessMemory(hProcess, Param, (LPVOID)ModuleFile, 256, NULL))
{
TCHAR sztmp[1024];
_stprintf_s(sztmp, _countof(sztmp), TEXT("写入内存失败, 错误代码:%d, dll=%s"), GetLastError(), ModuleFile);

MessageBox(NULL, sztmp, TEXT("写入内存失败"), MB_ICONWARNING);
return 0;
}
HANDLE hThread = CreateRemoteThread(hProcess, 
NULL, 
NULL, 
(LPTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(TEXT("kernel32.dll")), "LoadLibraryW"),
Param, 
NULL, 
NULL);

if (hThread)
{
WaitForSingleObject(hThread, INFINITE);
}
else
{
TCHAR sztmp[1024];
_stprintf_s(sztmp, _countof(sztmp), TEXT("创建远程线程失败, 错误代码:%d, dll=%s"), GetLastError(), ModuleFile);
MessageBox(NULL, sztmp, TEXT("创建远程线程失败"), MB_ICONWARNING);
return 0;
}
VirtualFreeEx(hProcess, Param , 0, MEM_RELEASE);
CloseHandle(hThread);
CloseHandle(hProcess);
}
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
case DLL_PROCESS_DETACH:
//::SetWindowLongPtr(hWinLogon, GWL_WNDPROC, (LONG)OldWindowProc);
break;
default:
break;
}

return 1;
}

EXTERN_C __declspec(dllexport) int Hook(void)
{
return 1;
}

我是直接运行rundll32 "D:\My Documents\Visual Studio 2008\Projects\UnregisterSystemHotKey\Release\UnregisterSystemHotKey.dll",Hook注入DLL,没有另外写个DLL注入工具.

#7


什么windows

#8


你现在是注入哪个进程不成功

#9


除了csrss.exe,其他进程都能成功

#10


XPsp3

#11


这个可用,link.exe参数中加一个/export:InjectCsrssW

#include
int __stdcall DllMain(HINSTANCE ImageBase,DWORD Reason,DWORD EventType)
{
if(Reason==DLL_PROCESS_ATTACH)
{
static char Text[256]="ProcessId:";
_itoa(GetCurrentProcessId(),Text+10,10);
OutputDebugStringA(Text);
}
return 1;
}
typedef ULONG(__stdcall*PRtlAdjustPrivilege)(ULONG Privilege,int Enable,int CurrentThread,int*Enabled);
typedef DWORD(__stdcall*PCsrGetProcessId)(void);
void __stdcall InjectCsrssW(HWND hwnd, HINSTANCE hinst, LPWSTR lpszCmdLine, int nCmdShow)
{
int b;PRtlAdjustPrivilege pRtlAdjustPrivilege;PCsrGetProcessId pCsrGetProcessId;HANDLE ProcessHandle;
HMODULE ntdll=GetModuleHandleW(L"ntdll.dll");
pRtlAdjustPrivilege=(PRtlAdjustPrivilege)GetProcAddress(ntdll,"RtlAdjustPrivilege");
pRtlAdjustPrivilege(20,1,0,&b);
pCsrGetProcessId=(PCsrGetProcessId)GetProcAddress(ntdll,"CsrGetProcessId");
ProcessHandle=OpenProcess(PROCESS_CREATE_THREAD|PROCESS_VM_OPERATION|PROCESS_VM_WRITE,0,pCsrGetProcessId());
if(ProcessHandle)
{
wchar_t FileName[260];void*Buffer;MEMORY_BASIC_INFORMATION mbi;
VirtualQueryEx((HANDLE)-1,InjectCsrssW,&mbi,sizeof mbi);
GetModuleFileNameW((HINSTANCE)mbi.AllocationBase,FileName,260);
Buffer=VirtualAllocEx(ProcessHandle,0,260,MEM_RESERVE|MEM_COMMIT,PAGE_EXECUTE_READWRITE);
if(Buffer)
{
if(WriteProcessMemory(ProcessHandle,Buffer,FileName,260,0))
{
HANDLE ThreadHandle;
ThreadHandle=CreateRemoteThread(ProcessHandle,0,0,(LPTHREAD_START_ROUTINE)LoadLibraryW,Buffer,0,0);
if(ThreadHandle)
{
WaitForSingleObject(ThreadHandle,INFINITE);
CloseHandle(ThreadHandle);
}
}
VirtualFreeEx(ProcessHandle,Buffer,0,MEM_RELEASE);
}
CloseHandle(ProcessHandle);
}
}

#12


运行方法
rundll32.exe a.dll,InjectCsrssW

#13


记得在连接器参数指定入口点为DllMain

#14


试了下也不行,你测试过吗?

#15


测试过,你怎么试的

#16


你把电子邮箱给我,我发给你

#17


zwfgdlc@21cn.com
谢谢了.

#18


该回复于2011-06-07 09:56:13被版主删除

#19



还是不成功.

#20


关闭杀毒软件

#21


我用你编译好的DLL可以注入成功,不过把你的代码用VC2008重新编译又注入失败了。

#22


我这里不光是代码,我还有编译器,连接器参数的设置,你仅可能不行

#23


我是用VC2008打开DSW文件,利用VC2008自带的转换功能转换成vcproj文件再编译的.
工程属性应该是不变的吧。

#24


把转换后的发过来

#25


发到你邮箱了。

#26


发了vc2008能用的,这个dll不要使用vc的运行库(动静态都不行,只能使用system32\msvcrt.dll的或system32\ntdll.dll中的c运行库函数),manifest也不能嵌入

推荐阅读
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • vue使用
    关键词: ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文讨论了使用差分约束系统求解House Man跳跃问题的思路与方法。给定一组不同高度,要求从最低点跳跃到最高点,每次跳跃的距离不超过D,并且不能改变给定的顺序。通过建立差分约束系统,将问题转化为图的建立和查询距离的问题。文章详细介绍了建立约束条件的方法,并使用SPFA算法判环并输出结果。同时还讨论了建边方向和跳跃顺序的关系。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • C++中的三角函数计算及其应用
    本文介绍了C++中的三角函数的计算方法和应用,包括计算余弦、正弦、正切值以及反三角函数求对应的弧度制角度的示例代码。代码中使用了C++的数学库和命名空间,通过赋值和输出语句实现了三角函数的计算和结果显示。通过学习本文,读者可以了解到C++中三角函数的基本用法和应用场景。 ... [详细]
  • 本文介绍了一个题目的解法,通过二分答案来解决问题,但困难在于如何进行检查。文章提供了一种逃逸方式,通过移动最慢的宿管来锁门时跑到更居中的位置,从而使所有合格的寝室都居中。文章还提到可以分开判断两边的情况,并使用前缀和的方式来求出在任意时刻能够到达宿管即将锁门的寝室的人数。最后,文章提到可以改成O(n)的直接枚举来解决问题。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • IhaveconfiguredanactionforaremotenotificationwhenitarrivestomyiOsapp.Iwanttwodiff ... [详细]
  • 本文介绍了UVALive6575题目Odd and Even Zeroes的解法,使用了数位dp和找规律的方法。阶乘的定义和性质被介绍,并给出了一些例子。其中,部分阶乘的尾零个数为奇数,部分为偶数。 ... [详细]
  • 本文介绍了在MFC下利用C++和MFC的特性动态创建窗口的方法,包括继承现有的MFC类并加以改造、插入工具栏和状态栏对象的声明等。同时还提到了窗口销毁的处理方法。本文详细介绍了实现方法并给出了相关注意事项。 ... [详细]
  • 本文介绍了pack布局管理器在Perl/Tk中的使用方法及注意事项。通过调用pack()方法,可以控制部件在显示窗口中的位置和大小。同时,本文还提到了在使用pack布局管理器时,应注意将部件分组以便在水平和垂直方向上进行堆放。此外,还介绍了使用Frame部件或Toplevel部件来组织部件在窗口内的方法。最后,本文强调了在使用pack布局管理器时,应避免在中间切换到grid布局管理器,以免造成混乱。 ... [详细]
  • 本文详细介绍了Android中的坐标系以及与View相关的方法。首先介绍了Android坐标系和视图坐标系的概念,并通过图示进行了解释。接着提到了View的大小可以超过手机屏幕,并且只有在手机屏幕内才能看到。最后,作者表示将在后续文章中继续探讨与View相关的内容。 ... [详细]
  • 本文介绍了一种解决PyQt界面在高分辨率下字体显示不完全的方法。通过设置High_DPI属性或应用自适应字体,可以解决在更高分辨率电脑上字体被控件遮挡的问题。同时,还提供了判断Qt版本和设置字体大小的代码示例。 ... [详细]
author-avatar
Less哒哒_288
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有