如何注入代码到exe中使用OD进行 *** 作

如何注入代码到exe中使用OD进行 *** 作,第1张

前期准备:

首先,我们需要一个调试器,这里我比较喜欢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记得恢复原来被代替掉的代码。

右键Resumeallthread。看看线程窗口,是不是有线程被挂起来,有就右键Resumeallthread,然后就可以继续单步调试了,在调试多线程程序的时候,遇到断点能断下来,但是一按F7/F8程序就运行起来了,这种情况多半是线程被挂起了。

OD是用来反汇编的,我们常用它来破解软件,挂能不能补服务器发现,在于挂本身的功能, 现在游戏的挂一般都自己隐藏自己的进程,再用挂自己的驱动sys把游戏挂起的openprocess还原,如果你不懂编程,基本上是没法子的,你可以找一些有名的隐藏进程的软件,把你的挂的进程隐藏起来,有可能起点作用

OD说的很能清楚,让你按SHIFT+F7或SHIFT+F8或SHIFT+F9跳过异常,

即忽略错误,继续往下执行。

调试程序时,出现这样的异常非常多,没什么,Let's go!

问题一:c语言中的调试有什么作用 说白了就是对你写的程序进行简单的测试

如果你用的是Visual C++60的软件,

在写好了程序后(没有语法上的错误),按F10,即可进入单步调试,每按一次F10可以看到程序会走到一下行代码 如果当前指向的代码有一个函数,按F11,可以进入这个函数体内,查看程序在函数体内的执行过程和数据的变化

其它这个软件的高度功能很强大的,一时也不可能说得清楚但主要能子解一些简单的高度方法就行了:F9 设置断点 F5 调试运行 这经常一直用的:在程序的某一个代码处按F9,会有一个圆点出现再按F5,启动程序,当程序执行到这个圆点时,会停下来,此时你可以按F5,继续运行下到一个断点,或者你也可以按F10进行单步调试

还有很多,你可以去百度搜一搜

问题二:java调试程序的目的和步骤是什么 目的:发现程序中的bug

步骤:先对相应的代码行打上断点,然后用debug模式启动这个程序,程序在执行到断点代码行时会停止,然后可以根据对应的 *** 作,执行下一行代码等等来发现程序在执行到哪一行代码时出错,为什么出错

问题三:c++为什么要调试调试的目的是什么? 当程序出现崩溃而编译器又无报错,开发人员在暂时无法分析出的情况下会选择调试程序,以更直观的方式看出程序出了什么错误。

问题四:c语言中什么叫做单步调试,步骤是什么??? 单步指一次执行一行代码,一般在编辑环境中按F8键就可以

问题五:软件(程序)调试的任务是什么 选择题?(C)吧

问题六:电脑总提示实时调试是什么意思,怎么解决? 实时调试也就是JIT (Just in time)。当运行时错误中断了服务器端脚本执行时,Microsoft 脚本调试程序自动启动,显示 asp 文件,将语句指针指向导致错误的行,并生成错误消息。使用这种类型的调试,也叫实时调试,计算机将暂停进一步执行程序。必须使用编辑程序改正错误并保存所作更改,然后才能继续运行脚本。 换句话说启动了一个正常用户不应该启动的选项:Microsoft 脚本调试程序工具。解决方法:打开IE浏览器然后选择工具- internet选项-高级在菜单里你可以看到2个禁用脚本调试 一个是指派给IE的,一个是指派给任何其他浏览器的。全部打上勾,然后选择应用-确认。大概就能解决了。通常这项服务在xp 2000系统里是自动关闭的。如果是2003或者安装了SQL好像是会自动启动了的。如果不行的话,请在开始-运行-输入msconfig然后选择服务。如果看到有个叫script blocking service的程序,把它的勾去掉,重启系统。关于迅雷的实时调试:Microsoft Script Editor是Microsoft office xp的一个组件。在office工具-宏-Microsoft 脚本编译器进行安装。都安好后,打开IE,在工具-internet选项-高级中,把禁用脚本调试(Int鸡rnet Explorer)和禁用脚本调试(其他)前面的钩钩去掉。然后重新启动IE,当有JS错误的时候一路点是就会进入调试页面。只要把上面这两个选项打上勾就不会出现这个调试窗口了。请如下 *** 作:在INTERNET选项里,点击 *** 作删除COOKIES,删除文件同时选择删除所有脱机内容,清除历史记录;将安全级别设置为默认级别,隐私设置为中级,高级设置为还原默认设置。网友最佳答复:这个问题很常见 我想你说的应该就是Microsoft Script Editor也就是微软脚本程序。这个跟你的IE有关,所以:打开IE,在工具-internet选项-高级中,把禁用脚本调试(Internet Explorer)和禁用脚本调试(其他)前面的钩钩去掉。然后重新启动IE,当有JS错误的时候一路点是就会进入调试页面只要把上面这两个选项打上勾就不会出现这个调试窗口了

问题七:C语言中编译 生成 调试 测试 运行各是什么意思有什么区别 编译依赖于编译器,英文是pile, vc中这一过程是将源代码转换成目标文件,如obj文件,rc文件等

生成应该指的是链接的过程,英文是build依赖于链接器 vc中在这一阶段将所有的目标文件和所有需要用到的组件组合成一个整体,例如需要生成的是windows系统下的PE可执行文件,链接器会依照特定格式将目标文件组合,最后生成PE格式的exe或dl伐文件

调试是所有或部分代码编写完成后,让程序在调试器中运行,用这种手段对程序进行分析,找出并修正潜在问题

运行就是让程序在系统中运行啦

问题八:软件测试和软件调试的区别是什么 软件测试是软件测试人员和程序员都参与的一项揣作,是贯穿整个生命周期的,

只需要发现软件的错误,而软件调试主要是程序员自己参与,对程序(设计、编

码)进行修改、排除错误,主要是在开发阶段。

问题九:有什么好的方法调试程序啊??高手们所说的log是什么意思啊?log调试是什么意思? 常见调试技巧:

1,使用编译器的断点调试功能;

2,在需要检查搐位置加打印语句,使其在控制台输出,来判定问题的发生位置;

3,使用assert宏,这个比较狠。

你所谓的log调试,就是我说的第2种。

问题十:在线调试编程是什么意思 指仿真板和电脑通信中,你直接更改程度再运行仿真就做到在线调试

WindowsMobile和WindowsCE是两回事,但是Mobile用的是CE内核,因此部分软件也可以不加修改便可在两个系统中通用,如果要开发WinCE应用程序,你需要安装WinCE50的SDK,如果目标系统是WinCE421的话,你可以去微软的网站上下载eVC40来进行开发,以下文字就不用再看了

WinCE50或更高版本SDK的来源有这么几种方式:

1通过PlatformBuilder50裁剪出自己所需要的WinCE50内核,然后再用PlatfromBuilder通过内核导出相应的SDK安装包,这个安装包就可以在电脑上使用了,这种方法主要是WinCE50的内核开发人员生成SDK开发包用的,一般而言WinCE应用软件的开发人员不需要使用PlatformBuilder。

2厂家提供,如果是基于其他厂家已有的WinCE设备进行开发,那么厂家会给你提供相应的SDK的

3上网下载别人已经生成好的SDK,如果只是为了学习WinCE的应用软件开发,并不涉及具体硬件,这个方法也可以

SDK安装好后,新建项目时就能选择WinCE项目了

以上就是关于如何注入代码到exe中使用OD进行 *** 作全部的内容,包括:如何注入代码到exe中使用OD进行 *** 作、反od调试解决办法、OD调试真的能跳过游戏的服务器用挂不被发现等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存