热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

查看用户态进程加载的dll

以查看用户态进程加载的dll为例介绍

在kd中查看某一确定用户态进程加载的dll,这不是什么刚需,甚至可以说是一个伪需求。我只是用这个做引子,介绍一些windbg命令。
1)
最简单的办法,切换到目标进程,然后:
.reload /user
lmuf
2)
shellcode常用办法,遍历三条链表。

!list -t nt!_LIST_ENTRY.Flink -x "r $t0=@@(#CONTAINING_RECORD(@$extret,nt!_LDR_DATA_TABLE_ENTRY,InLoadOrderLinks));r @$t0,@$extret;dt -io nt!_LDR_DATA_TABLE_ENTRY DllBase FullDllName @$t0" @@(@$peb->Ldr->InLoadOrderModuleList.Flink)
notepad.exe
ntdll.dll
KERNEL32.DLL
KERNELBASE.dll
ADVAPI32.dll
msvcrt.dll
...


按"初始化顺序"前向遍历链表时,第一个结点对应ntdll.dll。按"加载顺序"、"内存顺序"前向遍历,第一个结点对应EXE,第二个结点才对应ntdll.dll。"初始化顺序"要少一个结点。
"!list"不支持后向遍历,或者说它无法用Blink遍历。
3)
其实也是遍历链表,只不过我演示一下用dx遍历。
dx -g Debugger.Utility.Collections.FromListEntry(@$peb->Ldr->InLoadOrderModuleList,"nt!_LDR_DATA_TABLE_ENTRY","InLoadOrderLinks").Select(o=>new{DllBase=o._LDR_DATA_TABLE_ENTRY::DllBase,FullDllName=o._LDR_DATA_TABLE_ENTRY::FullDllName}),0x1000


4)
dx有内置的模块列表支持,不需要遍历链表:
dx -g @$curprocess.Modules.Where(o=>o.BaseAddress<0xf000000000000000).Select(o=>new{BaseAddress=o.BaseAddress,Name=o.Name}),0x1000


看这个输出,应该是按照加载基址升序排列。
5)
windbg有个!dll扩展命令
按加载顺序遍历:
!dll -l
按内存顺序遍历:
!dll -m
按初始化顺序遍历:
!dll -i
输出形如:



不管哪种顺序遍历,打头的地址指向nt!_LDR_DATA_TABLE_ENTRY结构。

6)
windbg有个!peb扩展命令



kd> .shell -ci "!peb @$peb" findstr /i /c:".dll"
kd> .shell -ci "!peb @$peb" find /i ".dll"


顺便说一句,Tarik Soulami介绍kd调试的某些技术原理,提到尽管目标地址未被扇入,并不影响对之设0xCC断点。扇入目标内存时,处理缺页异常的代码会真正写入0xCC。看了一下缺页异常,以x64/Win10为例补充了两条代码路径,包括内核态调试时断点命中后g起来写回0xCC的代码路径。虽然这个道理一直知道,但确实没有如此近距离地观察过这条代码路径。更新scz.617.cn/windows/201711151139.txt,在PC上直接拖到文末看更新部分。


周期性吐槽,微信订阅号只能当RSS用,截图是因为无法排版。感兴趣者请在PC上用浏览器查看原文。



推荐阅读
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • 装饰者模式(Decorator):一种灵活的对象结构设计模式
    装饰者模式(Decorator)是一种灵活的对象结构设计模式,旨在为单个对象动态地添加功能,而无需修改原有类的结构。通过封装对象并提供额外的行为,装饰者模式比传统的继承方式更加灵活和可扩展。例如,可以在运行时为特定对象添加边框或滚动条等特性,而不会影响其他对象。这种模式特别适用于需要在不同情况下动态组合功能的场景。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • 如何优化MySQL数据库性能以提升查询效率和系统稳定性 ... [详细]
  • 该问题可能由守护进程配置不当引起,例如未识别的JVM选项或内存分配不足。建议检查并调整JVM参数,确保为对象堆预留足够的内存空间(至少1572864KB)。此外,还可以优化应用程序的内存使用,减少不必要的内存消耗。 ... [详细]
  • 如何在Linux系统中实现Windows风格的桌面环境:将Ubuntu 18.04定制为Windows主题界面
    如果您是从Windows转到Linux系统的用户,可能会觉得默认的Ubuntu主题和桌面环境缺乏吸引力和可定制性。尤其是对于习惯了Windows风格的任务栏和主题的用户,Ubuntu 18.04的橙色主题可能显得过于简洁。为了提升用户体验,可以通过安装特定的桌面环境和主题来实现类似Windows的界面效果。本文将详细介绍如何在Ubuntu 18.04中配置和定制桌面环境,使其具备Windows风格的外观和功能。 ... [详细]
  • C# .NET 4.1 版本大型信息化系统集成平台中的主从表事务处理标准示例
    在C# .NET 4.1版本的大型信息化系统集成平台中,本文详细介绍了主从表事务处理的标准示例。通过确保所有操作要么全部成功,要么全部失败,实现主表和关联子表的同步插入。主表插入时会返回当前生成的主键,该主键随后用于子表插入时的关联。以下是一个示例代码片段,展示了如何在一个数据库事务中同时添加角色和相关用户。 ... [详细]
  • 本文详细介绍了如何在 Django 项目中使用 Admin 管理后台,包括创建超级用户、启动项目、管理数据模型和修改用户密码等步骤。 ... [详细]
  • 本文探讨了如何利用Java代码获取当前本地操作系统中正在运行的进程列表及其详细信息。通过引入必要的包和类,开发者可以轻松地实现这一功能,为系统监控和管理提供有力支持。示例代码展示了具体实现方法,适用于需要了解系统进程状态的开发人员。 ... [详细]
  • 深入解析数据库中的存储过程与触发器技术
    本文深入探讨了数据库中的存储过程与触发器技术。存储过程是一组预编译的SQL语句,经过优化后存储在数据库服务器中,以提高执行效率。在大型数据库系统中,通过调用存储过程的名字,用户可以快速执行复杂的操作,从而提升系统的性能和响应速度。此外,触发器作为一种特殊的存储过程,能够在特定事件发生时自动执行,进一步增强了数据库的自动化管理和数据完整性。 ... [详细]
author-avatar
thiji_0
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有