中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 看雪学院专区 > 加壳与脱壳
调试 DLL 时加载到不同地址的小技巧
作者:佚名 时间:2006-12-13 19:43 出处:pediy.com 责编:月夜寒箫
              摘要:调试 DLL 时加载到不同地址的小技巧
调试 DLL 时加载到不同地址的小技巧

一块三毛钱
2006.08.23


给 DLL 脱壳时,有时需要把 DLL 加载到不同基地址。大概搜索了一下论坛好像没有看到简单的办法 :),下面是我的办法,算做一个小技巧吧!

使用 windbg 打开看雪的 DLL_Loader.exe,选择要加载的 dll 文件,

0:004> bp kernel32!LoadLibraryA
0:004> g

点“加载”按钮,中断在 kernel32!LoadLibraryA 处,可以通过堆栈参数看到正在加载我们的 dll 文件。



清除断点,然后,

0:000> bp ntdll!ZwMapViewOfSection
0:000> g
0:000> g

第二次中断时,查看堆栈,发现该 ntdll!ZwMapViewOfSection 来自 ntdll!LdrpMapDll+0x330,此时就要分配内存加载 dll,查看 ntdll!ZwMapViewOfSection 的第三个参数 PVOID *BaseAddress 发现所指 DWORD 为零,把这个 DWORD 改成你想要加载到的地址。可以先用 lm 命令查看已经加载了哪些 dll,哪些地址已经被占用。



清除断点,修改刚才看到的 DWORD

0:000> ed poi(@esp+0n12) 22000000

此时如果运行就可以把 dll 加载到指定地址 22000000 处,但我们经常是需要从 dll 的入口点开始跟踪壳的代码,下断点,

0:000> bu $iment(22000000)
0:000> g

断下来后就是 dll 的入口点。



关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有