• TP 笔记~


    安装与配置 windbg 的 symbol (符号)

    本篇是新手自己写的一点心得.建议新手看看.同时希望前辈多多指教.

    写这篇的动机:在网上找了一上午的 windbg 配置符号教程.楞是没找到详细的,都讲的太模糊而且互相抄袭.不适合新手看.终于靠自己的努力弄懂了一点,呵呵写出来新手们分享.

    安装与配置 windbg 的 symbol (符号)

    第一步 是从 http://www.microsoft.com/ddk/debugging 下载最新版本的 WinDBG,因为符号服务器二进制文件是由 WinDBG 小组开发的。

    您将需要检查是否有 WinDBG 更新版本,因为该小组似乎具有相当紧凑的发布日程安排,并且每隔几个月就会发布更新版本。

    第二步 双击下载的文件安装 windbg .安装时注意记住安装到那里了.

    第三步 windbg 访问符号需要两个文件(SYMSRV.DLL 和 SYMSTORE.EXE)所以添加主 path 环境变量中它们的路径进去,即:你的 windbg 安装目录.

    操作方法:在桌面我的电脑点右键--属性--高级--环境变量,在系统变量列表框中找到 path 双击,在变量值最后面加一个分号再把你的安装目录写上.点确定. 
    这一步是告诉 windbg 那两个文件放在什么地方.

    第四步 新建一个环境变量_NT_SYMBOL_PATH 值为: SRV*c:\mysymbol* http://msdl.microsoft.com/download/symbols 

    操作方法:桌面我的电脑点右键--属性--高级--环境变量 ,点击新建,把上面的变量名和变量值填上.这一步的意思是说告诉 windbg ,我的符号文件存放在c:\mysymbol 中(当然其实里面什么也没有,甚至这个文件夹也不存在,不过没关系,系统找不到的话会给你创建一个,并在上面的网址中去帮你下载符号文件放在里面)

    第五步 运行 windbg 打开一个exe文件或者附加到一个进程里去, 你会看到 Symbol search path is: SRV*c:\mysymbol* http://msdl.microsoft.com/download/symbols

    打开c盘看到有一个新目录 mysymbol,里面有 windbg 新下载的文件.


    TP hook第一处 NtOpenProcess

    nt!NtOpenProcess+0x209:
    805cc65f 8d45e0 lea eax,[ebp-20h]
    805cc662 50 push eax
    805cc663 ff75cc push dword ptr [ebp-34h]
    805cc666 ff35b8495680 push dword ptr [nt!PsProcessType (805649b8)]
    805cc66c 56 push esi
    805cc66d 8d8548ffffff lea eax,[ebp-0B8h]
    805cc673 50 push eax
    805cc674 ff75c8 push dword ptr [ebp-38h]
    805cc677 ff75dc push dword ptr [ebp-24h]
    805cc67a e83906ffff call nt!ObOpenObjectByPointer (805bccb8)  <----------- HOOK ObOpenObjectByPointer  使用inline hook绕过

    TP HOOK 第二处

    nt!NtOpenThread+0x1ff:
    805cc8e1 8d45dc lea eax,[ebp-24h]
    805cc8e4 50 push eax
    805cc8e5 ff75d0 push dword ptr [ebp-30h]
    805cc8e8 ff35bc495680 push dword ptr [nt!PsThreadType (805649bc)]
    805cc8ee 56 push esi
    805cc8ef 8d854cffffff lea eax,[ebp-0B4h]
    805cc8f5 50 push eax
    805cc8f6 ff75cc push dword ptr [ebp-34h]
    805cc8f9 ff75e0 push dword ptr [ebp-20h]
    805cc8fc e8b703ffff call nt!ObOpenObjectByPointer (805bccb8)
    805cc901 8bf8 mov edi,eax
    805cc903 8d854cffffff lea eax,[ebp-0B4h]
    805cc909 50 push eax
    805cc90a e86f5a0200 call nt!SeDeleteAccessState (805f237e)
    805cc90f 8b4de0 mov ecx,dword ptr [ebp-20h]
    805cc912 e8abadf5ff call nt!ObfDereferenceObject (805276c2) <----------- inline hook 绕过
    805cc917 3bfe cmp edi,esi
    805cc919 0f8c6affffff jl nt!NtOpenThread+0x1a7 (805cc889)

    读写进程 NtReadVirtualMemory NtWriteVirtualMemory 都是inline hook 头7字节。

    HOOK后

    805b53d4 b8c21b659e mov eax,9E651BC2h
    805b53d9 ffe0 jmp eax

    附加进程 的内核API  KiAttachProcess

    备注:KiAttachProcess是个为未导出API 所以不能用MmGetSystemRoutineAddress 获取地址 (PS:ki是未导出 ke是导出的API)  KeAttachProcess 其实也是调用KiAttachProcess实现的。而且在第一个call 就是 调用KiAttachProcess。所以直接搜索 第一个E8 就可以了。

    得到了KiAttachProcess地址后。 

    操作方法: 在TP启动之前,保存KiAttachProcess头7字节 然后在TP启动后,直接用保存好的7字节恢复 KiAttachProcess。这样就可以了。

  • 相关阅读:
    Android上的水果忍者刀锋效果(JAVA实现)
    界址坐标转换器说明
    C# MVC4 执行特性之后不再执行Action
    广西公需科目自动学习
    mvc4 利用filters特性来 实现自己的权限验证 之二
    mvc4 利用filters特性来 实现自己的权限验证 之一
    利用hao123天气插件的地址选择提供的api进行跨域调用实现地址的省 地级市 县 联动选择。
    javascript 判断变量 是否为空null,undefined, 空数组,空对象(空Object),字符串是否为空或全由空白字符组成,数字是否为0,布尔是否为false。
    git使用
    ios微信公众号分享回调事件
  • 原文地址:https://www.cnblogs.com/yueyue184/p/2759548.html
Copyright © 2020-2023  润新知