内嵌补丁(inline patch):

内嵌补丁指在程序文件中把补丁代码写入文件里面达到破解的目的

如果修改某行语句会影响后面的语句,例如某语句占用 3 个字节,修改完变为 5 个字节,会覆盖后面的语句,这时就需要用到内嵌补丁

程序:

运行程序

NAG 窗口显示只有 30 天的试用期,点击 Continue 就会来到主界面

关闭程序

接下来修改系统时间,把时间修改为 30 天之后

打开程序

NAG 窗口显示没有试用的天数剩余了

Contine 已经不能按了

再把时间改回来

再启动程序,程序的 NAG 窗口还是显示没有天数剩余了

用 PEiD 看一下

这是用 VC 6.0 写的程序

逆向:

用 OD 打开程序

运行一下程序

点击 Enter Reg. Code 输入注册码,然后点击“Ok”

此时的 OD 没有任何变化,还是在程序的起始处

在 OD 界面按“Ctrl+N”

键盘直接敲 killtimer,搜索 killtimer

KillTimer 函数用于销毁指定计时器

右键 -> 在每个参考上设置断点

一共设置了 48 个断点

重新在输入注册码处按 Ok

程序停在了此处

上面有两条信息,一个是“The registration code seems to...”是注册失败的,“Thank you for your support...”是注册成功的

往上看看有没有什么跳转语句

这个跳转语句直接跳过了注册失败的地方

jnz 跳转指令上有个 cmp 指令,如果 jnz 要进行跳转的话,eax 就不能等于 3

跳过来之后这里又有一个 jnz 跳转,如果跳的话,就会跳过成功的地方

如果不让它跳的话,eax 的值要为 4

这个 cmp 指令是来自别的跳转

右键 -> 转到 jnz 来自 004DC04C,进行跳转

这个跳转指令上面还有一个 cmp 指令,如果 eax 不等于 2,就进行跳转

这个 cmp 指令是来自 004DBE01 的跳转

来到 004DBE01 的位置

这个 jnz 跳转指令上面又有一个 cmp 指令

这个 cmp 指令是来自 004DBDA9 的跳转

来到 004DBDA9 处

往上就是该代码块的开头了

下两个断点

一个在该代码块的开头处,一个在 cmp 指令处

重新跑一下程序,让它在开头处停下

按 F8 往下走

eax 在这里被赋值,ebp+8 是程序的第一个参数,值为 1

如果在这里进行修改的话,改成 mov eax, 4,会覆盖后面的指令

因为 mov eax, 4 占 5 个字节,原来的语句只占 3 个字节,会把后面的语句覆盖掉,造成堆栈不平衡

复制下面两行指令

选中 -> 右键 -> 二进制 -> 二进制复制

在该程序里找一块没用的空间(一般在末尾处)来写内嵌补丁

从 005E47D0 处开始写

添加指令 mov eax, 4

然后粘贴刚才复制的那两条指令

右键 -> 二进制 -> 二进制粘贴

粘贴的时候要选中两行

完成之后修改先前那个 mov 指令

修改为 jmp 005e47d0,即刚才那个补丁的地址

该行指令还是占 5 个字节,把后面的两行指令给覆盖了

但是那两行指令在后面有,没什么影响了

接下来在补丁处添加个 jmp 跳转指令,使其能跳转回去

保存程序,运行

程序会一直弹出该窗口

回到 OD,走一下程序

执行到补丁处 eax 的值就变为 4 了

接着一路往下走

走到这里会弹出那个成功的对话框

按 F9 运行会发现,程序进入了一个死循环

程序会回到开头处,然后一直循环

回到成功前的那条跳转指令

此时的 jnz 是不跳转的,然后弹出成功的对话框,之后进入一个死循环

将 ZF 置 0,让其跳转

在 B 之后,就结束了这个 switch 语句

B 中调用了一个过程

该过程会跳出对话框

把 mov eax, 4 改为 mov eax, 0B,B 前面要加上个 0

保存程序,运行

程序可以直接运行,也没有了 NAG 窗口

另一解法:

OD 重新载入程序,跑一下程序

出现 NAG 窗口后按一下暂停

然后按 Alt+K,显示调用堆栈

任何函数和过程的调用都要动用到堆栈

最后三个可能是生成 NAG 窗口的调用,因为 NAG 窗口是后面才调用的

先从最后一个开始,双击来到它所在的位置

在此处下一个断点,重新跑一下程序

出现 NAG 窗口

按 F8 往下走一步

点击 Exit

往下走了一步

这个 call 和 NAG 窗口有很大的关系,可能就是 NAG 窗口

找到该代码块的开头处,下一个断点

接下来重新跑一下程序

停在该断点处

按 F8 往下走

这是第一个跳转,跳转未实现,接着往下走

来到第二个跳转指令,跳转已实现,直接跳

接着走到第三个跳转指令

看看该跳转指令跳到哪

跳到了 retn 语句之前,也就是直接跳过了 NAG 窗口的那个 call

执行完 retn 之后,按 F9 运行

程序又回到了刚才那个代码块的开头

F8 往下走

第一个跳转指令变为已实现,看看它跳去哪

跳到这个位置,跟着它跳跳看

接下来又是一个跳转指令

看看它跳到哪

跟着它进行跳转,继续往下走

之后是一个未实现的跳转

继续往下走,就来到了那个与 NAG 窗口有关的 call 了

浏览了大概之后,就对程序进行修改

先看第一个跳转指令

如果将该跳转指令改为已实现的话,将跟后来的一次情况一样,执行 NAG 窗口

再看第二个跳转指令

将第二个跳转指令改为未实现会是什么情况

将 ZF 置 1

改完之后跑一下程序

直接进入了主界面

OD 实验(十四) - 内嵌补丁的更多相关文章

  1. 实验十四 第九组 张燕~杨蓉庆~杨玲 Swing图形界面组件

    实验十四  Swing图形界面组件 8-11-29 理论知识 Swing和MVC设计模式 (1)设计模式(Design pattern)是设计者一种流行的 思考设计问题的方法,是一套被反复使用,多数人 ...

  2. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验十四:储存模块

    实验十四比起动手笔者更加注重原理,因为实验十四要讨论的东西,不是其它而是低级建模II之一的模块类,即储存模块.接触顺序语言之际,“储存”不禁让人联想到变量或者数组,结果它们好比数据的暂存空间. . i ...

  3. OD 实验(十八) - 简单注册机的编写

    程序: 运行 这是一个注册机 随便输入点内容,点击 Check 弹出错误的对话框 逆向: 用 OD 载入程序 在文本框处下断点 按 Alt+B 查看断点 这个断点在动态链接库那里 跑一下程序,输入内容 ...

  4. 201671030128周琳 实验十四 团队项目评审&课程学习总结

    项目 内容 这个作业属于哪个课程 2016级计算机科学与工程学院软件工程(西北师范大学) 这个作业的要求在哪里 实验十四 团队项目评审&课程学习总结 作业学习目标 掌握软件项目评审会流程:反思 ...

  5. 201671010426 孙锦喆 实验十四 团队项目评审&课程学习总结

    徐明锦 徐明锦 2 95 2019-06-30T14:54:00Z 2019-06-30T14:54:00Z 9 608 3472 28 8 4072 14.00 Clean Clean false ...

  6. 实验十四 团队项目评审&课程学习总结(葛进花201671010413)

    实验十四 团队项目评审&课程学习总结 项目 内容 这个作业属于哪个课程 软件工程 这个作业的要求在哪里 实验十四 作业学习目标 1)掌握软件编码实现的工程要求 2) 反思总结课程学习内容 任务 ...

  7. 201671010418 刘佳 实验十四 团队项目评审&课程学习总结

    项目 内容 这个作业属于哪个课程 软件工程 这个作业的要求在哪里 实验十四 团队项目评审&课程学习总结 作业学习目标 (1)掌握软件项目评审会流程: (2)反思总结课程学习内容. Start: ...

  8. 201671030114 马秀丽 实验十四 团队项目评审&课程学习总结

    项目 内容 作业所属课程 所属课程 作业要求 作业要求 课程学习目标 (1)掌握软件项目评审会流程:(2)反思总结课程学习内容 任务一:团队项目审核已完成.项目验收过程意见表已上交. 任务二:课程学习 ...

  9. 201671030108后新莉+实验十四 团队项目评审&课程学习总结

    项目 内容 这个作业属于哪个课程 代老师博客主页 这个作业的要求在哪里 实验十四 团队项目评审&课程学习总结 作业学习目标 (1)掌握软件项目评审会流程:(2)温故知新自己的所得:(3)反思总 ...

随机推荐

  1. 用vue实现百度搜索功能

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. (转)如何转载CSDN的文章

    前言   对于喜欢逛CSDN的人来说,看别人的博客确实能够对自己有不小的提高,有时候看到特别好的博客想转载下载,但是不能一个字一个字的敲了,这时候我们就想快速转载别人的博客,把别人的博客移到自己的空间 ...

  3. js之广告弹出自动关闭

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  4. erl_0015 《硝烟中的erlang》 读书笔记002 “为过载做计划”

    为过载做计划 到目前为止,我在实际工作中所碰到最常见的错误,基本上都是节点内存耗尽.而且通常都和过长的消息队列有关37.解决这类问题的方法有很多,不过只有在深入.全面的理解系统后,才能做出正确的选择. ...

  5. HTML中name,value属性区分

    name和value区分(注重前后台的结合),个人笔记使用^_^ 前台 后台对于单选框来说,name是一样的,决定后台的键名,value的值决定了后台键值 复选框同理,但name应该是不同的

  6. BZOJ3083 遥远的国度 【树链剖分】

    BZOJ3083 遥远的国度 Description zcwwzdjn在追杀十分sb的zhx,而zhx逃入了一个遥远的国度.当zcwwzdjn准备进入遥远的国度继续追杀时,守护神RapiD阻拦了zcw ...

  7. 为什么委托的减法(- 或 -=)可能出现非预期的结果?(Delegate Subtraction Has Unpredictable Result)

    当我们为一个委托写 -= 的时候,ReSharper 会提示“Delegate Subtraction Has Unpredictable Result”,即“委托的减法可能出现非预期的结果”.然而在 ...

  8. 《DSP using MATLAB》示例Example 8.24

    代码: %% ------------------------------------------------------------------------ %% Output Info about ...

  9. aes加密/解密(转载)

    这篇文章是转载的康奈尔大学ece5760课程里边的一个final project,讲的比较通俗易懂,所以转载过来.附件里边是工程文件,需要注意一点,在用modelsim仿真过程中会出现错误,提示非法引 ...

  10. vb编写串口调试程序

    sub是子模块,可以调用但是没有返回值,function是有返回值的. public sub 可以在其它form里调用,而private sub 只能在当前form里调用. vb里的if else , ...