注入的DLL未写入文件

时间:2016-03-24 08:36:16

标签: winapi dll hook

我正在使用WinAPI编写C代码,它安装了一个全局钩子(WH_GETMESSAGE),它将DLL注入到系统中的所有兼容进程中。注入的DLL监视传递给消息队列的某些消息并创建文本文件。 DLL中的回调函数应使用特定目录中随机生成的名称创建文本文件。这些方法在 main 上测试时有效,但在DLL中失败(即没有创建文本文件)。注意:以下工作正常。

  • DLL已成功注入所有(32位)进程,使用进行检查 ProcessExplorer。
  • 正在调用回调函数,使用检查 MessageBeep(-1)

代码中是否有我遗漏的内容?有没有办法调试我在例如Firefox中的进程中注入的DLL代码。

这是我在DLL中的代码:

LRESULT CALLBACK GetMsgProc(int code,WPARAM wParam,LPARAM lParam){
    if (code < 0) {
        return CallNextHookEx(NULL, code, wParam, lParam);
    }
        if ((code == HC_ACTION) && (wParam == PM_REMOVE)){
//for any message create and write to text file 
            writeToLogFile(); 
            }
            return CallNextHookEx(NULL, code, wParam, lParam);
    }

这是创建文本文件的代码:

BOOL writeToLogFile() {
    char fileName[10];
    char fName[] = "C:\\Users\\MyDir\\";
    char buffer[75]; //place concatenated string here
    generateRandomStr(fileName); //methos to generate file name
    snprintf(buffer, sizeof(buffer), "%s%s.txt", fName, fileName);
    HANDLE fHandle =
        CreateFile(buffer,
            FILE_GENERIC_READ | FILE_GENERIC_WRITE,
            FILE_SHARE_READ | FILE_SHARE_WRITE,
            NULL, CREATE_ALWAYS,
            FILE_ATTRIBUTE_NORMAL,
            NULL);

//file handle code check ommited for brevity
        DWORD bytesWritten;
        WriteFile(fHandle, buffer, strlen(buffer), &bytesWritten, NULL);
        CloseHandle(fHandle);
        return TRUE;
    }

   /*Generate file name string (a-z characters)*/
    VOID generateRandomStr(char holder[]) {
        size_t i = 0;
        srand(time(NULL)); //system clock seconds for seed 
        while (i < 9) {
            int x = (97 + rand() % 97);
            if (x > 96 && x < 122) {
                holder[i] = ((char)x);
                //puts((char)x);
                i++;
            }
        }
        holder[i++] = '\0'; //terminate the string

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

感谢大家的意见和建议。最后设法使其工作,问题是功能CreateFile失败(生成文件名中的一些非法字符)。使用OutputDebugString后,我能够查看输出并调试负责生成文件名的generateRandomStr函数,并且它有效。