OD学习之内嵌补丁

时间:2024-03-16 07:42:10

重点:1、如何将一段代码和一个变量分别注入一个程序。2、硬件断点。

 

0x00

首先还是先运行程序明白程序运行过程,然后重载,通过堆栈寻找NEG窗口调用函数。

 

重载后运行函数到正常,然后暂停程序。

OD学习之内嵌补丁

ALT+k查看堆栈,找到NEG窗口调用函数。

OD学习之内嵌补丁

发现上图所指的函数是一个Dialog对话窗口调用,那块可能NEG窗口就是通过它调用的。下断点,然后调试。发现此处是程序主体,开始结束三个主体窗口的调用处,不能简单直接nop,继续跟进。

OD学习之内嵌补丁

 

 

OD学习之内嵌补丁

 

OD学习之内嵌补丁

 

 

 

 

 

0x01:

**方法,查看到程序上方刚好有一个je跳转可以跳过call函数,先手动绕过第一次和第三次的NEG跳转,然后让第二次跳转实习。那么**就可以手动添加一段类似if的语句,通过计数器,当计数器等于二时不跳转,不等于2时跳转。

OD学习之内嵌补丁

 

首先在程序的数据段找到一个用于填充的无用数据,然后下硬件写入断点,先检查程序运行时是否会修改这个数据,如果不会把他作为我们的变量存储地址。

OD学习之内嵌补丁

OD学习之内嵌补丁

测试发现不会,那么我们记下这个地址。

 

 

0x02

打内嵌补丁。在代码段找一段用于填充的无用代码段,利用插件修改本代码段的代码为我们的**代码:

0x437d6e:

inc byte ptr [445e80]

cmp byte ptr [445e80],2

jnz 4203ba

lea ecx,dword ptr ss:[esp+0x4c]

jmp 42037f

 

最后汇编,保存两处修改。

OD学习之内嵌补丁

OD学习之内嵌补丁