编写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;