我写了一个对话框程序,我怎么做,才能够隐藏程序??在任务管理器中看不到!怎么做呢??我看了一些程序和文章,对于外部提供的数据(输入和输出的数据)的处理,都不时很清楚!我希望大家能提供一个详细的说明和代码!谢谢!希望大家不吝赐教!谢谢!希望大家能提供一些源代码!谢谢!
解决方案 »
- 这个为啥编译不了?了解boost的请进
- TextBox里面的字符串无法响应鼠标单击事情
- #define问题
- SDI工程中怎么把最大化按钮禁用?谢谢
- Tmschema.h问题
- 小弟缺MFC的源文件,那位大哥帮忙把CWnd::EnableScrollBarCtrl的实现代码贴出来,谢谢.
- <><><><><><><><><><><>vc++与oracal的问题!!!<><><><><><><><><><><><><>
- window系统目录下system和system32都有什么作用?
- 如何在vc程序中备份还原sqlserver数据库???????[在线等待].
- 结构体里有整形数据时,发送接受是否要考虑字节序问题?
- VC不编译就出错的问题!
- 如何把CListCtrl中选中的项目清零?
http://dev.csdn.net/develop/article/11/11989.shtm
http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=192778
error C2415: improper operand type这是为什么呢???
void *regproc; 有没有?
我用你给的那个网页写了程序,
执行这条语句时:
regproc = GetProcAddress(GetModuleHandle("kernel32.dll"), "RegisterServiceProcess");
regproc 返回总是NULL
找不到 RegisterServiceProcess
我是在XP下运行的,是不是XP下不用RegisterServiceProcess 这个函数
我把他放在 .cpp 文件后就好了!但是一运行, 就弹出向微软发送错误报告的对话框,这是为什么啊??
PROCESS_VM_OPERATION | file://允许远程VM操作
PROCESS_VM_WRITE,//允许远程VM写
FALSE, dwRemoteProcessId ) 由于我们后面需要写入远程进程的内存地址空间并建立远程线程,所以需要申请足够的权限(PROCESS_CREATE_THREAD、VM_OPERATION、VM_WRITE)。 然后,我们可以建立LoadLibraryW函数这个线程来启动我们的DLL木马,LoadLibraryW函数是在kernel32.dll中定义的,用来加载DLL文件,它只有一个参数,就是DLL文件的绝对路径名pszLibFileName,(也就是木马DLL的全路径文件名),但是由于木马DLL是在远程进程内调用的,所以我们首先还需要将这个文件名复制到远程地址空间:(否则远程线程是无法读到这个参数的) file://计算DLL路径名需要的内存空间
int cb = (1 + lstrlenW(pszLibFileName)) * sizeof(WCHAR);
file://使用VirtualAllocEx函数在远程进程的内存地址空间分配DLL文件名缓冲区
pszLibFileRemote = (PWSTR) VirtualAllocEx( hRemoteProcess, NULL, cb,
MEM_COMMIT, PAGE_READWRITE);
file://使用WriteProcessMemory函数将DLL的路径名复制到远程进程的内存空间
iReturnCode = WriteProcessMemory(hRemoteProcess,
pszLibFileRemote, (PVOID) pszLibFileName, cb, NULL);
file://计算LoadLibraryW的入口地址
PTHREAD_START_ROUTINE pfnStartAddr = (PTHREAD_START_ROUTINE)
GetProcAddress(GetModuleHandle(TEXT("Kernel32")), "LoadLibraryW");OK,万事俱备,我们通过建立远程线程时的地址pfnStartAddr(实际上就是LoadLibraryW的入口地址)和传递的参数pszLibFileRemote(实际上是我们复制过去的木马DLL的全路径文件名)在远程进程内启动我们的木马DLL: file://启动远程线程LoadLibraryW,通过远程线程调用用户的DLL文件
hRemoteThread = CreateRemoteThread( hRemoteProcess, NULL, 0,
pfnStartAddr, pszLibFileRemote, 0, NULL); 至此,远程嵌入顺利完成,为了试验我们的DLL是不是已经正常的在远程线程运行,我编写了以下的测试DLL: BOOL APIENTRY DllMain(HANDLE hModule, DWORD reason, LPVOID lpReserved)
{
char szProcessId[64] ;
switch ( reason )
{
case DLL_PROCESS_ATTACH:
{
file://获取当前进程ID
_itoa ( GetCurrentProcessId(), szProcessId, 10 );
MessageBox ( NULL, szProcessId, "RemoteDLL", MB_OK );
}
default:
return TRUE;
}
} 当我使用RmtDll.exe程序将这个TestDLL.dll嵌入Explorer.exe进程后(PID=1208),该测试DLL弹出了1208字样的确认框,同时使用PS工具也能看到 Process ID: 1208
C:\WINNT\Explorer.exe (0x00400000)
……
C:\TestDLL.dll (0x100000000)
…… 这证明TestDLL.dll已经在Explorer.exe进程内正确地运行了。 无论是使用特洛伊DLL还是使用远程线程,都是让木马的核心代码运行于别的进程的内存空间,这样不仅能很好地隐藏自己,也能更好的保护自己。
一般来说用DLL远程嵌入,然后在DllMain()中创建一个勾子或者是线程的话,那样
你的程序就可以执行了。