编写DLL:
LIBRARY EXEdiy
EXPORTS
LoadDLL @1
#include "stdafx.h"
#include <windows.h>
void _cdecl LoadDLL(const DWORD reversed,
HWND hwnd, // handle to window
UINT uMsg, // message identifier
WPARAM wParam, // first message parameter
LPARAM lParam // second message parameter
)
{
switch (uMsg)
{
case WM_CREATE:
MessageBoxA(hwnd,"DLL注入成功","成功",MB_OK);
//这里可以添加木马程序代码
break;
}
}
添加DLL函数到程序的输入表
0007FDE4 01004556 /CALL 到 RegisterClassExW 来自 notepad.01004550
0007FDE8 0007FDF0 \pWndClassEx = 0007FDF0
0007FDEC 77D19D69 user32.LoadCursorW
0007FDF0 00000030
0007FDF4 00000000
0007FDF8 01003429 返回到 notepad.01003429 来自 EXEdiy.LoadDLL 这里是注册的消息过程函数 修改为 DLL 中的函数就行了
0007FDFC 00000000
0007FE00 00000000
0007FE04 01000000 ASCII "MZ@"
修改notepad.01003429 为:
01003424 E8 E7DBFF0E call EXEdiy.LoadDLL //在DLL模块中寻找我们想要加入的函数地址
01003429 90 nop
0100342A 90 nop
0100342B 55 push ebp
再返回 修改 注册函数:
01004528 |. C745 F4 01000>mov [local.3],0x1 ; |
0100452F |. 8975 E4 mov [local.7],esi ; |
01004532 |. C745 F8 20900>mov [local.2],notepad.01009020 ; |UNICODE "Notepad"
01004539 |. C745 D8 24340>mov [local.10],notepad.01003424 ; |这里是消息函数 修改为我们的01003424
01004540 |. C745 F0 06000>mov [local.4],0x6 ; |
01004547 |. 897D D4 mov [local.11],edi ; |
0100454A |. 897D DC mov [local.9],edi ; |
0100454D |. 897D E0 mov [local.8],edi ; |
01004550 |. FF15 D0110001 call dword ptr ds:[<&USER32.RegisterClassExW>] ; \RegisterClassExW
最后成功HOOK了 这种方式是 修改程序代码 第一次见到
第二 可以添加程序的菜单:
//用 eXeScope 取修改 添加子菜单 记录下
//当消息为WM_COMMAND , ID = wParam也就是ID号
case WM_COMMAND:
if (wParam == 123)
{
MessageBoxA(hwnd,"成功添加我们的按钮","OK",MB_OK);
}
break;