如何在IDA Pro的DLL中找到静态链接的函数?

时间:2014-09-04 00:32:04

标签: c++ chromium dll-injection

我目前正在尝试挂钩Chromium的SSL写入功能,但是我在找到应该挂钩的地方时遇到了一些困难。

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

提前致谢。

1 个答案:

答案 0 :(得分:1)

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

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

需要注意的是,64位窗口上Chrome的发布版本似乎缺少符号。至少我没有运气得到它们。

在一般情况下,您可以按照以下某些说明获取预先加载到本地缓存中的一系列符号。

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

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

其次,您需要添加一个全局系统环境变量,如下所示:     _NT_SYMBOL_PATH = SRV * C:\ pdb_cache * msdl.microsoft.com /下载/符号; 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的内容,则会注意到已设置“Truncated”标志。您可以使用过滤器表达式(它是Amazon S3 Bucket)。四处搜索,甚至还有另一个符号服务器: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:\ *符号hxtp://msdl.microsoft.com/download/symbols; symsrv * C:\ *符号hxtp://symbols.mozilla.org/firefox; symsrv * C:\ *符号hxtp ://chromium-browser-symsrv.commondatastorage.googleapis.com; symsrv * C:\ *符号hxtp://ctxsym.citrix.com/symbols; symsrv * C:\ *符号hxtp://developer.apple.com /互联网/狩猎/ windows_symbols