Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Catalog · How the catalog works

Random project

DllHookInject

Dll注入/Hook/NtCreateThreadExProc/CreateRemoteThread

View on GitHub

Anyone may press Interesting, signed in or not. It helps others find this project.

Member rating

No ratings yet.

Sign in to rate this project.

README

Dll 注入示例

兼容xe10

说明

    1. 网上的较乱, 这里只是整理了一下
    1. 采用了2中注入方式
    2. NtCreateThreadExProc(Inject3.dpr)
    3. CreateRemoteThread(RemoteInjectDll.dpr)
    1. Inject3.dpr 仅在debug下有效, 权限问题, 暂时未解决
    1. InjectDllRemote.dpr 不会出现该权限问题
    1. hookMsgDll.dpr 为要注入的dll, 里面拦截了几个函数:
      pascal
        Hook[0] := TNtHookClass.Create('user32.dll', 'MessageBoxA', @NewMessageBoxA);
        Hook[1] := TNtHookClass.Create('user32.dll', 'MessageBeep', @NewMessageBeep);
        Hook[2] := TNtHookClass.Create('user32.dll', 'MessageBoxW', @NewMessageBoxW);
        Hook[3] := TNtHookClass.Create('kernel32.dll', 'OpenProcess', @NewOpenProcess);
        Hook[4] := TNtHookClass.Create('kernel32.dll', 'GetLocalTime', @NewGetLocalTime);
    2. delphi的Showmessage和MessageDlg 都是不会调用windows的MessageBoxW/MessageBoxA的, 这里困扰我很长时间
    3. 注意拦截的函数必须声明 stdcall
    1. TestExe.dpr 为测试工程, 里面验证了 5

打开顺序

    1. 写好拦截的函数, 编译dll(hookMsgDll.dpr)
    1. 写好验证的Exe, 用于被注入(TestExe.dpr)
    1. 选择注入方式:(Inject3.dpr/InjectDllRemote.dpr)二选一, 编译并把 hookMsgDll 注入到 TestExe 中 实现拦截
    1. 点击TestExe中的按钮进行验证

关于调试

  • 可以把dll和TestExe 放在一起为一个group, 同时打开, 然后在dll中Run->load process->process中输入TestExe的路径
  • 然后使用:(Inject3.dpr/InjectDllRemote.dpr)注入即可

getlocalTime.jpg origin.jpg Meesage.jpg