通过修补创建窗口函数调用来更改窗口名称

逆向工程 艾达 调试 二元分析 x86
2021-07-08 22:35:22

我使用 x64dbg 和 IDA Pro 进程是 32 位。我不确定我这样做是否正确,因为我遇到了崩溃,我不确定这是因为我做错了什么,还是应用程序的启动过程由于某种原因失败了,因为它可以' t 找到窗口。

基本上我想做的是在启动时更改某些应用程序的窗口标题。我试图通过在user32 函数 上设置断点CreateWindowExA然后尝试更改lpWindowName参数来实现这一点

这是命中 bp 时的执行情况:

代码

在您看到字符串“可能标题”的地方最初包含 Windows 标题,所以我认为这是我需要更改的位置。在该地址更改时是我收到错误的时候。

对不起,任何无知,我是新手,正在练习。谢谢。

编辑:我在这方面做了更多工作,并制作了一个虚拟程序来帮助我弄清楚发生了什么。所以CreateWindowExA这个应用程序中函数对argslpClassNamelpWindowNameargs使用了相同的指针因此,修补程序以仅推送一个字符串而不是该指针,成功实现了我的目标。

3个回答

提示:为 x64dbg 安装 xAnalyzer,这可能会帮助您进行逆向工作。

现在,您在user32.dll函数中CreateWindowExA我不会在那里更改该参数,而是在用户代码之外(熟悉stdcall约定,它是 WinApi 使用的)。您正在拍摄的参数是call CreateWindowExA用户代码上方的三推要么改变指针,要么改变它下面的内容,不要忘记空终止。

钩住它,然后将参数设置lpWindowName"your name here"(没有承诺这会起作用)或断点打开mov edx, dword ptr ss:[EBP+C],然后从 FPU(寄存器框)获取 EBP,进入像 ReClass 这样的程序并将EBP+0xC(窗口名称)设置为您想要的任何名称( 90% 确定这会起作用)。参考资料:https : //stackoverflow.com/questions/873658/how-can-i-hook-windows-functions-in-cc https://www.youtube.com/watch?v=K_jj6yF5ac0

谢谢你们的回应。我设法实现了我在 OP 编辑​​中详述的目标:

CreateWindowExA此应用程序中函数对argslpClassNamelpWindowNameargs使用相同的指针因此,修补程序以仅推送一个字符串而不是该指针以lpWindowName成功实现我的目标。我相信改变lpClassName导致了我在 OP 中描述的崩溃。