首页
社区
课程
招聘
[旧帖] [求助]关于 DLL 调用 CreateThread就崩溃 0.00雪花
发表于: 2012-9-22 06:56 2200

[旧帖] [求助]关于 DLL 调用 CreateThread就崩溃 0.00雪花

2012-9-22 06:56
2200
#include <windows.h>

DWORD WINAPI ThreadProc(
  LPVOID lpParameter   // thread data
)
{

                MessageBox(NULL,"PK","",0);

        return 0;

}

BOOL WINAPI DllMain(HINSTANCE p1, DWORD p2, LPVOID p3)
{
       
        switch (p2)
        {
        case DLL_PROCESS_ATTACH:

               
                HANDLE hjkhk;
                DWORD charID;

                hjkhk=CreateThread(NULL,0, ThreadProc,NULL,0,&charID);//执行这个函数宿主程序就崩溃 线程子程序什么代码也没有也会崩溃
//把CreateThread注释了  加个MessageBox(NULL,"PK","",0);就不会出错
//

        //        CloseHandle(hjkhk);

        default:
                ;

        }

        return 0;[QUOTE][/QUOTE]

}

////////////////////////////////////////////////////////////////////////////////////////
创建远程线程 加载DLL

               
if (strcmp(p.szExeFile,"MessgeBox.exe")==0)
                {
       
                       
                        //printf("Id====%d==\n",p.th32ProcessID);

                        HANDLE h=OpenProcess(PROCESS_ALL_ACCESS,FALSE,p.th32ProcessID);

                        DWORD fp=(DWORD)VirtualAllocEx(h,NULL,len,MEM_COMMIT, PAGE_READWRITE);

                       
                        //printf("add====%d==\n",fp);

                        WriteProcessMemory(h,(LPVOID)fp,(PVOID)nm,len,NULL);

                       
                        CreateRemoteThread(h,NULL,0,(LPTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle("kernel32"),"LoadLibraryA"),(LPVOID)fp,0,NULL);
                         

                       
                }

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 20557
活跃值: (3780)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
看我的minesweeper II example (6 FLOOR)

http://bbs.pediy.com/showthread.php?t=151454&highlight=minesweeper

INT APIENTRY DllMain(HMODULE hDLL, DWORD Reason, LPVOID Reserved)
{
    switch(Reason)
    {
    case DLL_PROCESS_ATTACH:
        DisableThreadLibraryCalls(hDLL);
        g_hModule = hDLL;
        CreateThread(NULL, NULL, &GetKeyThread, NULL, NULL, NULL);
    break;
    case DLL_PROCESS_DETACH:
  case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
        break;
    }
    return TRUE;
}


DWORD WINAPI GetKeyThread(LPVOID)
{
    while(1)
    {
    // Set F3 as our hotkey to play game
    // Set F4 as our hotkey to end hook
        if(GetAsyncKeyState(VK_F3) & 1) 
        {
            Process_Game();
        }
        else if(GetAsyncKeyState(VK_F4) & 1)
    {
           break;
    }
    Sleep(100);
    }
    FreeLibraryAndExitThread(g_hModule, 0);
    return 0;
}

2012-9-22 07:42
0
雪    币: 5877
活跃值: (3227)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
很感谢你 正确的代码 原因是 DllMain函数返回0就会出错 返回1就没问题了。
2012-9-22 10:55
0
雪    币: 20557
活跃值: (3780)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
恩,我也学习了。
谢谢。
2012-9-22 19:07
0
雪    币: 26
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
因为dllmain不止调用一次的
2012-9-25 19:54
0
游客
登录 | 注册 方可回帖
返回
//