简单实现程序DLL劫持

0x00 前言

程序启动会调用固定的.dll文件,通过特定的手法将木马代码和进程注入到可被劫持的DLL文件中,当程序正常启动,我们代码也会秘密执行。

0x01 利用过程

用到的工具

1、Aheadlib
2、Visual Studio

用美图看看Pdf来测试,朋友们可以拿这个练手,毕竟只有一个.dll文件,小傻瓜都知道是调用的这个dll来启动程序的

找到易劫持的dll文件,打开Aheadlib,引入
注意这里设置的原始dll文件名,记住了最后正常dll名字要修改成这个

点击生成会在程序目录下生成一个.cpp文件

 

0x02 修改劫持代码,注入进程后门

打开VisualStudio,添加一个动态链接库,专门用于生成dll的,将生成的代码全选粘贴进去,注意

#include "pch.h"

不要删,这是定义DLL程序的入口点很重要

在主函数里加入后门代码(注入木马进程) 调用计算器来测试

生成,ok没有报错

 把dll赋值到程序目录改名为pdfcore.dll 原文件改为pdfcoreOrg.dll

打开程序,弹出计算器

 OK完成!

其他思路如图:

DLLHack

  • 0
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
DLL劫持算是一个很古老的技术了,早在XP时代就有臭名昭著的lpk .dll劫持,病毒通过伪装系统 lpk .dll达到注入目标进程,为什么会被劫持呢?因为在程序执行的时候会在当前目录搜索 lpk .dll文件,如果文件存在就会被加载到进程地址空间。 DLL劫持原理:   DLL劫持技术当一个可执行文件运行时,Windows加载器将可执行模块映射到进程的地址空间中,加载器分析可执行模块的输入表,并设法找出任何需要的DLL,并将它们映射到进程的地址空间中。  由于输入表中只包含DLL名而没有它的路径名,因此加载程序必须在磁盘上搜索DLL文件。首先会尝试从当前程序所在的目录加载DLL,如果没找到,则在Windows系统目录中查找,最后是在环境变量中列出的各个目录下查找。利用这个特点,先伪造一个系统同名的DLL,提供同样的输出表,每个输出函数转向真正的系统DLL程序调用系统DLL时会先调用当前目录下伪造的DLL,完成相关功能后,再跳到系统DLL同名函数里执行。这个过程用个形象的词来描述就是系统DLL劫持(hijack)了。  伪造的dll制作好后,放到程序当前目录下,这样当原程序调用原函数时就调用了伪造的dll的同名函数,进入劫持DLL的代码,处理完毕后,再调用原DLL此函数。  这种补丁技术,对加壳保护的软件很有效,选择挂接的函数最好是在壳中没有被调用的,当挂接函数被执行时,相关的代码已被解压,可以直接补丁了。在有些情况下,必须用计数器统计挂接的函数的调用次数来接近OEP。此方法巧妙地绕过了壳的复杂检测,很适合加壳程序的补丁制作。  一些木马或病毒也会利用DLL劫持技术搞破坏,因此当在应用程序目录下发现系统一些DLL文件存在时,如lpk.dll ,应引起注意。 思路: 我们拿winmm.dll劫持做演示,通常的劫持技术是导出和winmm.dll同样的函数并提供相同的参数,当程序运行后加载winmm.dll会事先在当前目录查找,此时如果你编写的伪装winmm.dll在当前目录就会被加载到进程空间,如果程序还调用了里面的函数就会调用你编写的函数你必须保证可以正常运行你得调回原winmm.dll中的函数。 这样来回调用大大降低了效率,而且易语言 导出的函数的特殊性大大降低了效率甚至部分程序还不能正常的回调。 那有没有办法解决这个问题呢? 于是我想到了能不能调用函数的时候直接跳转到原函数呢 这样大大降低了劫持影响的效率  比如 程序a.exe调用 a.dll 里面的 test函数 劫持程序a.exe调用a.dll里面的test的时候 会先调用我们劫持dll里面的test然后跳转到a.dll里面的test 这样就相当于调用一个函数变成了调用两个函数 我们完全可以这样 调用我们的test的时候 直接跳转到原函数 而且我们的导出函数不需要提供任何参数跟返回值 这简直太棒了!! DLL公开的子程序就是只用作导出函数请不要加任何代码没有意义。 例程: 直接上winmm.dll劫持源码 使用黑月编译 测试劫持:易语言核心支持库(krnln.fne) 微信 QQ Steam QQ飞车 CF 英雄联盟 一切正常。测试只是为了得到劫持效果仅供参考,请勿用于非法用途。 DLL劫持生成工具 由于时间关系先到这里,后续再更。。。 如果想自己回调某个函数拦截修改功能,请把pszProcName数组变量对应的成员名称给删除 然后自己修改对应的导出函数 提供原函数同样的参数跟返回值

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

巡安似海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值