【问题标题】:How can I find a statically linked function in a DLL with IDA Pro?如何使用 IDA Pro 在 DLL 中找到静态链接函数?
【发布时间】:2014-09-04 00:32:03
【问题描述】:

我目前正在尝试挂钩 Chromium 的 SSL 写入功能,但我很难找到应该挂钩的位置。

目前,我通过使用 RtlCreateUserThread 并分配 DLL 路径并使目标进程加载它来注入我的 DLL。然后,DLL 将通过 GetProcAddress 加载目标函数,然后加载通常是你知道的覆盖 5 字节的 jmp 指令。 我已经成功地用 Firefox 做到了。但是我对 Chrome 有疑问,因为他似乎根据 Chromium 的源代码使用 NSS/OpenSSL(我在 repo 中看到了 SSLSocket 的两个 impl,但看不到哪个与二进制文件一起使用)。

提前致谢。

【问题讨论】:

    标签: c++ chromium dll-injection


    【解决方案1】:

    很抱歉成为坏消息的承担者,但确实没有简单的方法可以做到这一点。
    我发现最简单的方法是使用 Chromium Symbol 服务器,它位于:

    http://chromium-browser-symsrv.commondatastorage.googleapis.com
    

    需要注意的是,64 位 Windows 上的 Chrome 发行版似乎缺少这些符号。至少我没有运气得到它们。

    在一般情况下,您可以按照以下说明获取预加载到本地缓存中的良好符号集合。

    为了在 IDA pro 中使用符号服务器功能,您必须做一些事情。

    首先,您必须安装 Windows 调试工具。 (Windows 8.1 DDK 是一个很好的选择,可从 Microsoft 免费获得。)它包含允许与符号服务器进行简单通信的 DLL。

    其次,您需要添加一个全局系统环境变量,如下所示: _NT_SYMBOL_PATH=srv*c:\pdb_cache*msdl.microsoft.com/download/symbols;srv*c:\pdb_cache*http://chromium-browser-symsrv.commondatastorage.googleapis.com

    它的作用是设置符号路径和关联的本地缓存以存储符号。

    第三,您可以使用以下命令行来使用WDK 8.1附带的工具并拉取符号:

    "c:\Program Files (x86)\Windows Kits\8.1\Debuggers\x86\symchk" /r "C:\Program Files (x86)\Google" /s symsrv*C:\pdb_cache\*http://chromium-browser-symsrv.commondatastorage.googleapis.com/
    

    上面应该强制符号加载到本地符号缓存中,您可以选择它们(IDA 可能会自动这样做,也可能不会)。如果没有,您可以在 WinDbg/symchk 下载后手动选择符号文件。

    至少理论上是这样,根据:http://www.chromium.org/developers/how-tos/debugging

    我没有运气在 Chromium 的发布版本上正确下载符号。但是,如果您转到http://chromium-browser-symsrv.commondatastorage.googleapis.com/ 链接并检查返回的 XML 的内容,您会注意到设置了“截断”标志。您可以使用过滤器表达式(它是一个 Amazon S3 存储桶)。仔细研究一下,甚至还有 另一个 符号服务器:http://chromium-browser-symbols.commondatastorage.googleapis.com/ 不过从外观上看,它已经很老了。

    我会给你一个脚本来从我的已知符号服务器列表中提取所有符号。对系统上可能需要调试的任何内容进行预加载很有用。 :-)。我还注意到在 Window 7 x64 上没有为 SysWOW64 子系统下载符号。如果其他人有任何关于其他公共符号服务器的信息,那将是受欢迎的:-)。

    "c:\Program Files (x86)\Windows Kits\8.1\Debuggers\x86\symchk" /r "C:\Program Files (x86)" /s symsrv*c:\symbols*hxtp://msdl.microsoft.com/download/symbols
    "c:\Program Files (x86)\Windows Kits\8.1\Debuggers\x86\symchk" /r "C:\Program Files (x86)" /s symsrv*c:\symbols*hxtp://symbols.mozilla.org/firefox
    "c:\Program Files (x86)\Windows Kits\8.1\Debuggers\x86\symchk" /r "C:\Program Files (x86)" /s symsrv*c:\symbols*hxtp://chromium-browser-symsrv.commondatastorage.googleapis.com
    "c:\Program Files (x86)\Windows Kits\8.1\Debuggers\x86\symchk" /r "C:\Program Files (x86)" /s symsrv*c:\symbols*hxtp://ctxsym.citrix.com/symbols
    "c:\Program Files (x86)\Windows Kits\8.1\Debuggers\x86\symchk" /r "C:\Program Files (x86)" /s symsrv*c:\symbols*hxtp://developer.apple.com/internet/safari/windows_symbols
    
    
    "c:\Program Files (x86)\Windows Kits\8.1\Debuggers\x64\symchk" /r "C:\Program Files" /s symsrv*c:\symbols*hxtp://msdl.microsoft.com/download/symbols
    "c:\Program Files (x86)\Windows Kits\8.1\Debuggers\x64\symchk" /r "C:\Program Files" /s symsrv*c:\symbols*hxtp://symbols.mozilla.org/firefox
    "c:\Program Files (x86)\Windows Kits\8.1\Debuggers\x64\symchk" /r "C:\Program Files" /s symsrv*c:\symbols*hxtp://chromium-browser-symsrv.commondatastorage.googleapis.com
    "c:\Program Files (x86)\Windows Kits\8.1\Debuggers\x64\symchk" /r "C:\Program Files" /s symsrv*c:\symbols*hxtp://ctxsym.citrix.com/symbols
    "c:\Program Files (x86)\Windows Kits\8.1\Debuggers\x64\symchk" /r "C:\Program Files" /s symsrv*c:\symbols*hxtp://developer.apple.com/internet/safari/windows_symbols
    
    
    "c:\Program Files (x86)\Windows Kits\8.1\Debuggers\x86\symchk" /r "C:\Windows" /s symsrv*c:\symbols*hxtp://msdl.microsoft.com/download/symbols
    "c:\Program Files (x86)\Windows Kits\8.1\Debuggers\x86\symchk" /r "C:\Windows" /s symsrv*c:\symbols*hxtp://symbols.mozilla.org/firefox
    "c:\Program Files (x86)\Windows Kits\8.1\Debuggers\x86\symchk" /r "C:\Windows" /s symsrv*c:\symbols*hxtp://chromium-browser-symsrv.commondatastorage.googleapis.com
    "c:\Program Files (x86)\Windows Kits\8.1\Debuggers\x86\symchk" /r "C:\Windows" /s symsrv*c:\symbols*hxtp://ctxsym.citrix.com/symbols
    "c:\Program Files (x86)\Windows Kits\8.1\Debuggers\x86\symchk" /r "C:\Windows" /s symsrv*c:\symbols*hxtp://developer.apple.com/internet/safari/windows_symbols
    
    
    "c:\Program Files (x86)\Windows Kits\8.1\Debuggers\x64\symchk" /r "C:\Windows" /s symsrv*c:\symbols*hxtp://msdl.microsoft.com/download/symbols
    "c:\Program Files (x86)\Windows Kits\8.1\Debuggers\x64\symchk" /r "C:\Windows" /s symsrv*c:\symbols*hxtp://symbols.mozilla.org/firefox
    "c:\Program Files (x86)\Windows Kits\8.1\Debuggers\x64\symchk" /r "C:\Windows" /s symsrv*c:\symbols*hxtp://chromium-browser-symsrv.commondatastorage.googleapis.com
    "c:\Program Files (x86)\Windows Kits\8.1\Debuggers\x64\symchk" /r "C:\Windows" /s symsrv*c:\symbols*hxtp://ctxsym.citrix.com/symbols
    "c:\Program Files (x86)\Windows Kits\8.1\Debuggers\x64\symchk" /r "C:\Windows" /s symsrv*c:\symbols*hxtp://developer.apple.com/internet/safari/windows_symbols
    

    StackOverflow 不允许我使用 http 链接,因此只需将文本编辑器中的 hxtp 替换为 http 即可。

    如果您愿意,也可以使用此字符串在您的环境中设置路径。希望这会有所帮助,伙计!

    设置 _NT_SYMBOL_PATH=symsrv*c:\symbols*hxtp://msdl.microsoft.com/download/symbols;symsrv*c:\symbols*hxtp://symbols.mozilla.org/firefox;symsrv*c:\symbols*hxtp ://chromium-browser-symsrv.commondatastorage.googleapis.com;symsrv*c:\symbols*hxtp://ctxsym.citrix.com/symbols;symsrv*c:\symbols*hxtp://developer.apple.com /internet/safari/windows_symbols

    【讨论】:

    • 我想这样做,但你的回答很有趣,非常感谢。
    猜你喜欢
    • 2022-01-02
    • 2015-06-04
    • 2010-09-30
    • 2018-01-05
    • 2015-08-24
    • 2011-05-21
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多