如何在OD中为Delphi程序添加按钮点击事件

如何在OD中为Delphi程序添加按钮点击事件,第1张

用 OD 捕获按钮事件,可以尝试以下办法:

1、通过编写好的脚本来获取按钮事件:

先将以下脚本保存至 txt 文件中:

var Addr

mov Addr,401000

loop:

find Addr,#740E8BD38B83FF93#

cmp $RESULT,0

je Exit

add $RESULT,0A

bp $RESULT

add $RESULT,1

mov Addr,$RESULT

jmp loop

Exit:

ret

用OD载入 Delphi 程序,右键 运行脚本-->打开,选择上面保存的文件,运行,如果d出了script finished 窗口就表示找到按钮事件断点位置。

2、用资源编辑工具+十六进制编辑工具来查找:

首先用ResScope或者其他工具打开目标程序,在RCData中能够找到窗体的资源信息,例如

  object Form1: TForm1

    object Button1: TButton

      Caption = 'Button1'

      OnClick = Button1Click

    end

  end

  此时假设我们要找“Button1”按钮事件,记住OnClick的名字(在这里就是Button1Click)

  然后再用WinHex打开程序,查找事件名“Button1Click”,如下图所示: 事件名的前一个字节就是事件名的长度,再前面就是事件地址了:

找到地址后,用 OD载入程序,直接Ctrl+G前往该地址。

来源;>

前期准备:

首先,我们需要一个调试器,这里我比较喜欢OLLYDBG ---我认为他是这个世界上最好的调试器 :P)

第二,我们需要一个拿来注入我们代码的应用程序,我选择的是windows的记事本(notepadexe),把notepadexe拷贝到一个新的目录下,

并把它重命名为CodeInjectTest。

开始

我们的目标是往NotepadEXE 注入一些我们想要的代码,在例子中我们将在NotepadEXE启动的时候注入一个简单的对话框。

启动记事本,如下是原本的记事本的样子。

用OD打开原始的notepad,如果没什么差错的话,你应该会看到下面的窗口。

因为我们需要往exe中注入自己的代码,因此需要遭到应用程序的空白处,这个空白处我们把它叫做CodeCaves。滚动od中的cpu窗口,

知道我们找到CodeCaves。如下:

地址从01008747开始。

在标红的区域中,就是notepad的CodeCave。在这里我们可以写一些自己想要的代码,而且他不会影响程序的正常运行。如果我们想要调用 Messagebox,

你需要知道一下关于Messagebox的介绍:

int MessageBox(

HWND hWnd, // handle of owner window

LPCTSTR lpText, // address of text in message box

LPCTSTR lpCaption, // address of title of message box

UINT uType // style of message box

);

这些就是你必须知道的一些关于MessageBox的东西,现在我们可以在CodeCaves 下做一些自己的事情了。首先,我们要创建MessageBox里显示的

提示信息的字符串,这里我们选择几行CodeCaves,如下:

点击 Binary=>Edit or (CTRL+E)你将看到如下的窗口,在窗口中输入你自己想填写的:

点击ok,你将会看到那些红色代码就是你修改的:

现在用CTRL+A 在分析一下代码。

Ok,如果你希望MessageBox ,有不同的标题属性,你可以重复上述的 *** 作,创建另外一个字符串,如"INJECTED NOTEPAD"。

现在是时候编写 asm代码的时候了 ;)

我们需要编写触发MessageBox 的asm代码。这是一些快速的例子如下:

PUSH 0 ; BUTTONS = <OK ONLY>

PUSH 1008751 ; CAPTION = Our adress of the "INJECTED NOTEPAD"

PUSH 1008751 ; MESSAGE = Same like above

PUSH 0 ; ICON = <NO ICON>

CALL MessageBoxA ; Run MessageBoxA with the Params above

这些代码在od上看起来应该是这个样子的:

看到上面的箭头了没,接下来是重要的一步!如果你现在保存它并运行它,你将看不到任何的效果,为什么呢?

因为这段代码并没有被调用。

我们必须记住" PUSH 0" 的偏移位置,因为我们需要从程序的开始位置跳转过来,然后在跳回去 ;)

再记住了这个地址以后,跳转到程序的开头位置如下:

现在来到了程序开始执行的位置。还记得我们一开始我们想往程序里加入什么吗? ;) 从开始选择几段的代码,拷贝到剪贴板中。

把这些代码保存在文件中去,可能等下我们会使用到它。回到刚才程序的开头位置 (在中是 PUSH 70)

双击它,在d出来的地方下 编写如下的代码"JMP <adress of your first push>"

按下Assemble 按钮,将看到如下红色的代码。

注意下红色盒子里的地址,这是我们等下需要跳回来的地方。

对比一下新的代码和刚才拷贝到剪贴板的代码,你会发现原来的一些代码被覆盖带了,为了保持程序可执行我们必须补上这些被重写的代码。

在这个例子中,被覆盖掉的代码如下:

PUSH 70

PUSH NOTEPAD01001898

在 CALL MessageBoxA的后面,补上这段代码,然后跳回到原处。

一切都已经就绪了。

如下,保存一下新的记事本:

选择"All modifications",在d出来的对话框中选择"Copy All" ,给程序去一个名字,保存它,如果你成功的话,你讲看到如下的窗体。

点击ok,记事本将正常启动了。

总结:

1明白要注入的代码该怎么编写

2记得恢复原来被代替掉的代码。

以上就是关于如何在OD中为Delphi程序添加按钮点击事件全部的内容,包括:如何在OD中为Delphi程序添加按钮点击事件、【楚】E-DeBug配合OD撸易语言、如何注入代码到exe中使用OD进行 *** 作等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10172713.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存