首页
社区
课程
招聘
[讨论]关于如何让目标加载DLL外挂的问题
发表于: 2014-11-15 15:49 4076

[讨论]关于如何让目标加载DLL外挂的问题

2014-11-15 15:49
4076
1、SetWindowsHookEx

DLL 必须导出 WinHookProc 钩子程序

function WinHookProc(code: Integer; wparam: WPARAM; lparam: LPARAM): LRESULT; stdcall;
begin
   Result:= CallNextHookEx(hHook, code, wparam, lparam);
end;

编写启动程序创建目标程序进程,为目标程序安装钩子。

这种方法,入口主要集中在 WinHookProc,并且需要在DLL导出表中。并且需要依赖启动程序。

2、 CreateRemoteThread

DLL 可以是任意程序

编写启动程序为目标程序注入线程,目标程序自身去调用 LoadLibrary 来载入DLL外挂。

这种方法,DLL中可以没有特定入口,可以自由加载,比较灵活,但是依然要依赖外部程序创建和卸载远程线程。

3、伪装系统DLL或目标程序依赖的DLL,例如  lpk.dll usp10.dll

这种方法最大的优点是无需依赖外部程序,自生自灭,坏处是容易被杀毒软件查杀,或者因为系统版本的问题,导致无法加载成功,比如WINXP以后已经无法伪装系统DLL,如果目标程序又没有依赖的DLL,那么这种方法就失效了。

另外还有一种个人推荐的方法,CreateProcess 方法注入DLL,这种办法,可在目标程序入口点,Inject 代码,加载 DLL 完成后,恢复入口点继续执行程序。

1.  用CreateProcess(CREATE_SUSPENDED)启动目标进程。

2.  找到目标进程的入口,用ImageHlp中的函数可以实现。

3.  将目标进程入口的代码保存起来。

4.  在目标进程的入口写入LoadLibrary(MyDll)实现Dll的注入。

5.  用ResumeThread运行目标进程。

6.  目标进程就运行了LoadLibrary(MyDll),实现DLL的注入。

7.  目标进程运行完LoadLibrary(MyDll)后,将原来的代码写回目标进程的入口。

8.  目标进程Jmp至原来的入口,继续运行程序。

这种方法,与前3种比起来,优势明显

我认为最好的方法,如果其他朋友还有更好的实现方法,请不吝赐教~

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 218
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
.net的程序入口点也可以这样处理么?返回的是翻译后的结果还是IL入口点呢?

另外"但是依然要依赖外部程序创建和卸载远程线程",说的好像你最后那个办法不需要外部程序找入口,覆盖代码,等待执行,再写入
个人没看出这个方法比远程线程好太多,两者复杂度基本相当.如果不考虑Windows XP的话远程线程要更简单
2014-11-17 06:48
0
游客
登录 | 注册 方可回帖
返回
//