我正在尝试(作为逆向工程初学者)对 Win32 应用程序进行的一些本地 MS-RPC 调用进行逆向工程。
这是一个由供应商提供的笔记本电脑应用程序,可以控制一些硬件配置,我希望我自己的应用程序能够模仿它的一些行为。
(我并不想做任何像黑进别人的笔记本电脑这样的阴暗行为,只是由于公司代理设置,我无法在工作中下载应用程序,所以我想制作自己的应用程序来调整我的工作笔记本电脑。)
我不太了解 Windows 内部结构,但至少我确定该应用程序是基于 Win32 的,并且它正在对另一个应用程序进行一些 IPC 调用。
所以首先我使用 API monitor 来确定它正在调用哪个 API,它实际上是从 rpcrt4.dll 调用
NdrClientCall2()
进行实际通信(在与 RpcBindingFromStringBindingW()
建立 RPC 连接后。
问题是 API 监视器不支持解码传递给
NdrClientCall2()
的可变参数,我无法提取任何信息来重现 RPC 调用。
所以,在 x64dbg 中,我在调用点设置了一些断点,我能够看到传递给函数的可变参数的实际集合。
我曾经认为这是一个
printf()
风格的可变参数列表,它采用人类可读的格式字符串,所以我希望我能够从内存转储中提取确切的格式字符串,
但问题是它不是,NDR格式“字符串”似乎是一个不适合人类理解的相当复杂的东西。
至此,我放弃了试图破译应用程序和DLL之间的通信,并开始尝试另辟蹊径
我试过 RpcInvestigator 但它没有工作(正如我所怀疑的那样),因为 RPC 服务器没有公开任何公共元数据。
有没有什么办法可以捕捉到这样的RPC调用来进行复制/模拟? 顺便说一下,我没有 IDA Pro。
提前谢谢你。