c语言反汇编教程,ollydbg使用――反汇编入门

反汇编需要汇编语言的基础,感觉可以同时学,

ollydbg快捷键:

F2――下断点,也就是指定断点的地址;

F3――加载一个可执行程序,进行调试分析;

F4――程序执行到光标处;

F5――缩小还原当前窗口;

F7――单步步入;

F8――单步步过;(Ctrl+F8可以自动步过并设置断点)

F9――直接运行程序,遇到断点处,程序暂停;

Ctrl+F2――重新运行程序到起始处,一般用于重新调试程序;

Ctrl+F9――执行到函数返回处,用于跳出函数实现;

Alt+F9――执行到用户代码处,用于快速跳出系统函数;

Ctrl+G――输入十六进制地址,快速定位到该地址处;

下面将要通过反汇编,改变程序的输出,举个例子:

先贴这次用的exe程序的C语言源码(非常简单的初学代码):

#include

#include

int main()

{

}

很显然,当我们输入a不为0时,就会输出YES,输入a=0时,就会输出NO,如下图:

1529828613747713.png

用ollydbg打开这个exe程序,

1529828616911814.png

Ctrl+F8走到我们要调试的地方,并设置断点,手动设置的话,需要一步步按F8,走到需要调试的地方按F2设置断点:

1529828619772450.png

红色说明已经设置了断点,然后我们再按Ctrl+F2重新载入一下,F9走到刚才设置的断点处:

1529828622514871.png

按F7单步步入,进入

1529828625492292.png

这里我们已经看到了程序输出的YES和NO,就不再试了,有几个跳转语句,可以一直按F8了解这个程序的运行过程和原理,发现需要先输入一个值,程序会运行到进行判断的地方

1529828628968105.png

说一下跳转的汇编命令,JMP是无条件的跳转,JZ是有条件的跳转,这里可以看到JZ跳到的地方,如果把JZ改成JMP,那么无论输入什么,这个运行到这里都会跳转到输出NO的位置,

1529828631624696.png

如果想要让程序无论输入什么值,都输出yes,就把这里的跳转NOP掉,程序就会顺着走到输出YES的地方

要是想要修改程序的输出内容比如YES改为hah,就要Ctrl+G跟踪地址如下图

1529828634696183.png

1529828637835084.png

右键→编辑→二进制编辑,将YES改为hah

1529828640469808.png

然后,就会发现,当输入2时,本应该输出YES的,却输出了hah

1529828643608979.png

其余的跳转等语句就不演示了,由于反汇编好麻烦,看来以后的内容需要更加简洁地表达了,想要学习反汇编,有汇编基础是很有必要的,以后还是尽量多记录几篇汇编语言的学习过程吧。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值