人造人 发表于 2019-4-20 15:26
我去,你那里居然真的能看到,那我之前的,你有试过么,能注入成功么,,,难道是我系统的问题,我win10,64位系统,看不到dll的注入!! 人造人 发表于 2019-4-20 15:26
哦,我看了,notepad++里面确实有,不过还有个疑问, WH_CBT,不是号称全局注册么,为啥只有notepad++里面有这个dll,其他的我看了下,除了mfc本身的程序外,其他的地方都没有这个dll嘞 灬DanE「`私はキ 发表于 2019-4-20 19:48
哦,我看了,notepad++里面确实有,不过还有个疑问, WH_CBT,不是号称全局注册么,为啥只有notepad++里 ...
你的代码无法成功注入应该是CBTProc中没有代码,我添加了下面的代码就能成功注入了
LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam)
{
CHAR szBuf;
CHAR szCode;
static int c = 0;
size_t cch;
HRESULT hResult;
if(nCode < 0)// do not process message
return CallNextHookEx(m_hook, nCode, wParam,
lParam);
switch(nCode)
{
case HCBT_ACTIVATE:
hResult = StringCchCopy(szCode, 128 / sizeof(TCHAR), "HCBT_ACTIVATE");
if(FAILED(hResult))
{
// TODO: write error handler
}
break;
case HCBT_CLICKSKIPPED:
hResult = StringCchCopy(szCode, 128 / sizeof(TCHAR), "HCBT_CLICKSKIPPED");
if(FAILED(hResult))
{
// TODO: write error handler
}
break;
case HCBT_CREATEWND:
hResult = StringCchCopy(szCode, 128 / sizeof(TCHAR), "HCBT_CREATEWND");
if(FAILED(hResult))
{
// TODO: write error handler
}
break;
case HCBT_DESTROYWND:
hResult = StringCchCopy(szCode, 128 / sizeof(TCHAR), "HCBT_DESTROYWND");
if(FAILED(hResult))
{
// TODO: write error handler
}
break;
case HCBT_KEYSKIPPED:
hResult = StringCchCopy(szCode, 128 / sizeof(TCHAR), "HCBT_KEYSKIPPED");
if(FAILED(hResult))
{
// TODO: write error handler
}
break;
case HCBT_MINMAX:
hResult = StringCchCopy(szCode, 128 / sizeof(TCHAR), "HCBT_MINMAX");
if(FAILED(hResult))
{
// TODO: write error handler
}
break;
case HCBT_MOVESIZE:
hResult = StringCchCopy(szCode, 128 / sizeof(TCHAR), "HCBT_MOVESIZE");
if(FAILED(hResult))
{
// TODO: write error handler
}
break;
case HCBT_QS:
hResult = StringCchCopy(szCode, 128 / sizeof(TCHAR), "HCBT_QS");
if(FAILED(hResult))
{
// TODO: write error handler
}
break;
case HCBT_SETFOCUS:
hResult = StringCchCopy(szCode, 128 / sizeof(TCHAR), "HCBT_SETFOCUS");
if(FAILED(hResult))
{
// TODO: write error handler
}
break;
case HCBT_SYSCOMMAND:
hResult = StringCchCopy(szCode, 128 / sizeof(TCHAR), "HCBT_SYSCOMMAND");
if(FAILED(hResult))
{
// TODO: write error handler
}
break;
default:
hResult = StringCchCopy(szCode, 128 / sizeof(TCHAR), "Unknown");
if(FAILED(hResult))
{
// TODO: write error handler
}
break;
}
hResult = StringCchPrintf(szBuf, 128 / sizeof(TCHAR), "CBT -nCode: %s, tsk: %ld, %d times ",
szCode, wParam, c++);
if(FAILED(hResult))
{
// TODO: write error handler
}
hResult = StringCchLength(szBuf, 128 / sizeof(TCHAR), &cch);
if(FAILED(hResult))
{
// TODO: write error handler
}
std::string s(szBuf, szBuf + cch);
SendMessage(FindWindowEx(FindWindow("Notepad", NULL), NULL, "Edit", NULL), WM_SETTEXT, 0, (LPARAM)s.c_str());
return CallNextHookEx(m_hook, nCode, wParam, lParam);
}
灬DanE「`私はキ 发表于 2019-4-20 19:48
哦,我看了,notepad++里面确实有,不过还有个疑问, WH_CBT,不是号称全局注册么,为啥只有notepad++里 ...
notepad++有,理论上其他也应该有,这个应该有某种保护机制,我研究研究
我试了,的确有一些程序无法注入,但是大部分可以注入(应该是大部分吧,vs2017可以,吞食鱼可以,notepad++可以),貌似是普通应用程序就可以,像操作系统的explorer就不行,操作系统自带的看图软件也不行,至于这类软件为什么不行,那就是你之后需要研究的内容了
还有
举个例子,你打开了notepad++,打开了MFC_Hook,按下了Hook按钮,这时操作系统并不会把Game.dll注入到notepad++进程,只有你返回notepad++进行操作(例如点了一下鼠标,或者按了一下键盘),这时操作系统才把Game.dll加载到notepad++进程
什么是动态链接库,什么是动态链接?
这就是动态链接,只有用到了,才链接 人造人 发表于 2019-4-20 20:24
我试了,的确有一些程序无法注入,但是大部分可以注入(应该是大部分吧,vs2017可以,吞食鱼可以,notepad+ ...
我突然间发现,当我把之前我的代码,编译成x64 平台的时候,记事本是能注入的,但是notepad++就没办法了,不知道是不是因为和x86 和x64有关 灬DanE「`私はキ 发表于 2019-4-20 21:40
我突然间发现,当我把之前我的代码,编译成x64 平台的时候,记事本是能注入的,但是notepad++就没办法了 ...
应该是吧
灬DanE「`私はキ 发表于 2019-4-20 21:40
我突然间发现,当我把之前我的代码,编译成x64 平台的时候,记事本是能注入的,但是notepad++就没办法了 ...
嗯,我试了一下,编译成x64以后,系统的explorer也可以注入了
但是notepad++就不行了
人造人 发表于 2019-4-20 21:52
嗯,我试了一下,编译成x64以后,系统的explorer也可以注入了
但是notepad++就不行了
嗯,他应该和有用程序的版本有关吧,可能notepad++是X86 的,explorer是x64的,所以 64位的注入dll,只能注入64位的程序,32位的dll只能注入32位的程序 灬DanE「`私はキ 发表于 2019-4-20 21:56
嗯,他应该和有用程序的版本有关吧,可能notepad++是X86 的,explorer是x64的,所以 64位的注入dll,只能 ...
嗯
页:
1
[2]