首页
社区
课程
招聘
[求助]关于DLL插入指定进程??
发表于: 2007-7-27 17:38 11812

[求助]关于DLL插入指定进程??

2007-7-27 17:38
11812
【求助】关于DLL插入指定进程??

  HWND hwnd=::FindWindow(NULL,"计算器");
  if(!hwnd)
  {
    AfxMessageBox("打开计算器吧,打开你就知道效果了");
    return;
  }
  
  DWORD lpprocessid=NULL;
  ::GetWindowThreadProcessId(hwnd,&lpprocessid);

  HANDLE handle1=::OpenProcess(PROCESS_ALL_ACCESS ,false,lpprocessid);

CString ms_DllName;
char* mc_RemoteStr;

ms_DllName="DllHook.Dll";

mc_RemoteStr=(char*)VirtualAllocEx(handle1,NULL,ms_DllName.GetLength()+1,MEM_COMMIT,PAGE_READWRITE);

WriteProcessMemory(handle1,mc_RemoteStr,ms_DllName.GetBuffer(0),ms_DllName.GetLength()+1,NULL);

/////插入DLL;
HANDLE hThread;
PTHREAD_START_ROUTINE pfn_LoadLib;

pfn_LoadLib=(PTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(TEXT("Kernel32")),"LoadLibraryA");

hThread=CreateRemoteThread(handle1,NULL,0,pfn_LoadLib,mc_RemoteStr,0,NULL);

我在DLL中InitInstance中写的个AfxMessageBox("jklkjljkl");

但结果当然是失败了

我用以下代码是成功的

STARTUPINFO si;

    ZeroMemory( &si, sizeof(si) );
    si.cb = sizeof(si);

    PROCESS_INFORMATION pi;

    ZeroMemory( &pi, sizeof(pi) );

    if( !CreateProcess( "C:\\WINDOWS\\system32\\calc.exe",NULL,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi) ) 
    {
    AfxMessageBox("打不到计算器");
    return;
    }

CString ms_DllName;
char* mc_RemoteStr;

ms_DllName="DllHook.Dll";

mc_RemoteStr=(char*)VirtualAllocEx(pi.hProcess,NULL,ms_DllName.GetLength()+1,MEM_COMMIT,PAGE_READWRITE);

WriteProcessMemory(pi.hProcess,mc_RemoteStr,ms_DllName.GetBuffer(0),ms_DllName.GetLength()+1,NULL);

/////插入DLL;
HANDLE hThread;
PTHREAD_START_ROUTINE pfn_LoadLib;

pfn_LoadLib=(PTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(TEXT("Kernel32")),"LoadLibraryA");

hThread=CreateRemoteThread(pi.hProcess,NULL,0,pfn_LoadLib,mc_RemoteStr,0,NULL);

/////关闭远程线程;
WaitForSingleObject(hThread,INFINITE);

VirtualFreeEx(pi.hProcess,mc_RemoteStr,0,MEM_RELEASE);

/////如果进程结束,则关闭进程头和线程头;
    WaitForSingleObject( pi.hProcess, INFINITE );

    CloseHandle( pi.hProcess );
    CloseHandle( pi.hThread );

但我希望插入的是运行中的进程,讲各位论坛的朋友指正~~~或者有这样的源代码的,请发一个出来参考,谢谢!!我的邮箱:pzhccy@yahoo.com.cn再次谢谢

[课程]Linux pwn 探索篇!

收藏
免费 7
支持
分享
最新回复 (23)
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
2


罗云彬一书中的"进程控制"那一章有介绍
2007-7-27 19:29
0
雪    币: 401
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
能否发个VC写的例子,最好能改我发出来的,谢谢!!
2007-7-28 10:18
0
雪    币: 1505
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
4
搂住你写的对啊 调试一下看看吧
2007-7-28 16:38
0
雪    币: 1505
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
5
你插入那个dll 名字最好是全部路径
2007-7-28 16:39
0
雪    币: 401
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我编译能通过,但运行后我查看"计算器"进程里没我插入的DLL进程,但我发出来的第二部分是可以查到的,而且也的确弹出了对话框
2007-7-28 17:12
0
雪    币: 1505
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
7
你先把dll名字的路径写全试试
ms_DllName="DllHook.Dll"; 把路径补上
我在自己电脑上试的没问题,完全按照楼主的方法 不过用的汇编写的
2007-7-28 17:18
0
雪    币: 401
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我已经调试过,GetLastError()也没错误,真是没办法了,大家帮帮忙~~谢谢~~~
上传的附件:
2007-7-28 20:58
0
雪    币: 1505
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
9
我说的方法老兄没试吧
你把那个dll复制到和计算器程序在同一目录下.
就是system32目录下 就ok 了,我这里测试成功.
注入自己的dll一般都要先获取dll路径,再注入的.
上传的附件:
2007-7-28 22:31
0
雪    币: 401
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
输入DLL路径行了,谢谢bithaha
2007-7-28 23:55
0
雪    币: 401
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
我想在DLL一运行马上弹出一个窗口,
App头文件中声明了CDialog dlg1;

dlg1.Create(IDD_DIALOG1,AfxGetMainWnd());
dlg1.ShowWindow(SW_SHOWNORMAL);

出错了?我发现虽然DLL已经插入了计算器的进程,但AfxGetMainWnd()还是调用DLLmain,我如何才能找到计算器的窗口指针?

后来我又用了:

dlg1.Create(IDD_DIALOG1,CWnd::FromHandle(::FindWindow(NULL,"计算器")));
        dlg1.ShowWindow(SW_SHOWNORMAL);

但结果还是不成功,在此还是请各位朋友们再次出手帮助,谢谢~~
2007-7-29 02:07
0
雪    币: 401
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
自己顶下,再求解
2007-7-29 13:35
0
雪    币: 1505
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
13
没明白你什么意思
2007-7-29 15:55
0
雪    币: 401
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
我的意思是在DLL中如何创建一个非模态对话框???
2007-7-30 20:58
0
雪    币: 1505
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
15
我这里用findwindow就能成功...
如图.
上传的附件:
2007-7-31 02:08
0
雪    币: 401
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
我这里不行呀,不知为什么?那个DLL是你用汇编写的吧,我用MFC的不行呀,能否把源码发上来我看一下
2007-8-1 09:49
0
雪    币: 1505
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
17
在附件里面.
上传的附件:
2007-8-1 13:06
0
雪    币: 101
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
呵呵 前两天把注入DLL 的功能 写成了一个函数,只要提供要注入的DLL 和进程ID就可以了
地址是:

http://blog.csdn.net/chinafe/archive/2007/07/11/1685271.aspx

希望对你有点用
2007-8-1 15:06
0
雪    币: 401
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
多谢你们的帮忙,注入其实已经成功了,但DLL里面还是一头雾水,原因很简单,我用MFC是因为想用他的类,用WIN32有点怕,但是在DLL里MFC使用方法又不太懂,像bithaha一样,直接用win32的方法写,我也基本明白,原来是在DLL里面也创建一个新线程来操作,但是MFC来创建我却不会,所以,MFC既带来方便,但也同时会令人模不着头脑,真晕,再慢慢研究下,在这里多谢你们的帮忙,多谢了。
2007-8-1 16:17
0
雪    币: 101
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
呵呵 客气嘛 都是好朋友
2007-8-1 16:27
0
雪    币: 401
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
llEntry        proc        _hInstance,_dwReason,_dwReserved
                local        @dwThreadID

                .if        _dwReason == DLL_PROCESS_ATTACH
                        push        _hInstance
                        pop        hInstance
                        invoke        CreateThread,NULL,0,offset _WinMain,NULL,\
                                NULL,addr @dwThreadID
                        invoke        CloseHandle,eax
                .endif
                mov        eax,TRUE
                ret

DllEntry        Endp

                End        DllEntry

突然之间想到一个问题?为什么在DLL进程创建时要创建一个新的线程来建立对话框???
不能直接建立吗???
2007-8-1 16:39
0
雪    币: 1505
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
22
能直接建立,你可以试试.
但是直接建立也应该会出现程序"死机"情况.
楼主你都不动手操作就来问,好不厚道
2007-8-1 22:24
0
雪    币: 401
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
因为我把汇编扔下了,呵呵
2007-8-2 08:40
0
雪    币: 204
活跃值: (94)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
同问,
我遇到的情况和楼主差不多,
通过创建远程线程向目标进程注入一个dll,该dll是采用mfc的正规dll,
在dll的initinstance里面创建一个非模态对话框,dll已经注入,可是对话框一闪就没有了,对话框对象是在堆里面分配的,而且一直没有释放,跟踪到创建对话框那里的时候也可以看到对话框出来,继续运行又没有了,在Initinstance里面创建线程来创建对话框也一样,dll里面的代码和别人功能一样运行正常的dll几乎完全一样,不同的是他们的用的是setwindowshook来加载dll,在CreateRemoteThread之后也用WaitSingObject等待了,哪位朋友能帮忙解决一下,谢谢,搞了几天了还是不得其解,
2007-10-22 11:52
0
游客
登录 | 注册 方可回帖
返回
//