od反汇编linux,新手学习反汇编之OD寻找功能call

article/2025/10/1 23:30:22

背景知识

VC++编程知识

OD工具使用

汇编知识

功能实现

简单的互换点击功能;

将两个功能互换

效果图:

20171215134915.png

20171215134941.png

创建test程序

使用VS2017创建一个新的MFC工程命名为test,去掉默认按钮,新加两个button,分别命名test,test2。

创建添加两个新方法:

```C++

void CtestDlg::dispaly()

{

MessageBox(L"test");

}

void CtestDlg::dispaly1()

{

MessageBox(L"test2");

}

void CtestDlg::OnBnClickedButton1()

{

dispaly();

}

void CtestDlg::OnBnClickedButton2()

{

dispaly1();

}

编译生成`exe`可执行文件;

## 使用OD动态调试

使用`od`打开`test.exe`;

这里需要使用`bp MessageBoxW`下断点,这里因为使用宽字符(MessageBox是在库里声明了一个宏 当你使用宽字符的时候,也就是unicode的时候,自动帮你转换使用 MessageBoxW 而当你使用窄字符的时候,会自动帮你转换到 MEssageBoxA)。

然后运行`F9`。`alt+b`查看断点:

```text

7727FD3F | user32 | 始终 | mov edi,edi

Alt+c返回CPU汇编代码窗口;切换到test.exe程序点击test2按钮;

这个时候会自行到断点地方,注意看堆栈窗口里面的数据,如以下信息;

20171215142044-follow.png

0017EBE4   01648053  /CALL 到 MessageBoxW 来自 test.0164804D

0017EBE8   000F07D6  |hOwner = 000F07D6 ('test',class='#32770')

0017EBEC   01C6600C  |Text = "test"

0017EBF0   0067EEE0  |Title = "test"

0017EBF4   00000000  \Style = MB_OK|MB_APPLMODAL

0017EBF8   0017EDD8

0017EBFC   CCCCCCCC

0017EC00   0017FA3C

0017EC04  /0017ECF0

0017EC08  |015D3ED4  返回到 test.015D3ED4 来自 test.015A1169

0017EC0C  |01C6600C  UNICODE "test"

0017EC10  |0067EEE0  UNICODE "test"

会发现调用来源,鼠标移动到0017EBE4   01648053  /CALL 到 MessageBoxW 来自 test.0164804D右键点击反汇编窗口中跟随,然后在该call入口按F2下断点,按alt+b切换断点界面,去掉bp MessageBoxW,按F9运行。然后,然后再次点击test2 button看是否能断下。

反复测试button,发现两个button都会断下,那么证明,两处都调用了这里,这个时候,先去掉当前断点,重新下bp MessageBoxW断点,在执行一次button会发现,堆栈窗口里面还有一个调用地址;

20171215143749-follow2.png

先跟随过去,下断点,重复上面的动作测试一下,结果发现,这里才是正确的断点。

20171215143831-bp-1.png

015D3E40  /> \55            push ebp                                 ; 这里是 test2 call

015D3E41  |.  8BEC          mov ebp,esp

015D3E43  |.  81EC CC000000 sub esp,0xCC

015D3E49  |.  53            push ebx

015D3E4A  |.  56            push esi

015D3E4B  |.  57            push edi

015D3E4C  |.  51            push ecx

015D3E4D  |.  8DBD 34FFFFFF lea edi,[local.51]

015D3E53  |.  B9 33000000   mov ecx,0x33

015D3E58  |.  B8 CCCCCCCC   mov eax,0xCCCCCCCC

015D3E5D  |.  F3:AB         rep stos dword ptr es:[edi]

015D3E5F  |.  59            pop ecx                                  ;  test.015D20AB

015D3E60  |.  894D F8       mov [local.2],ecx

015D3E63  |.  6A 00         push 0x0

015D3E65  |.  6A 00         push 0x0

015D3E67  |.  68 1860C601   push test.01C66018                       ;  UNICODE "test2"

015D3E6C  |.  8B4D F8       mov ecx,[local.2]

015D3E6F  |.  E8 F5D2FCFF   call test.015A1169                       ;  call test2

015D3E74  |.  5F            pop edi                                  ;  test.015D20AB

015D3E75  |.  5E            pop esi                                  ;  test.015D20AB

015D3E76  |.  5B            pop ebx                                  ;  test.015D20AB

015D3E77  |.  81C4 CC000000 add esp,0xCC

015D3E7D  |.  3BEC          cmp ebp,esp

015D3E7F  |.  E8 F97EFBFF   call test.0158BD7D

015D3E84  |.  8BE5          mov esp,ebp

015D3E86  |.  5D            pop ebp                                  ;  test.015D20AB

015D3E87  \.  C3            retn

注意:这里主要是不去分析整个流程,因为这样分析很容易掉进坑爬不出来,先用测试的方法论,撸一遍可能就省去了很多时间。

到这里先保存这个call,采用同样方法找到test button的call。

015D3EA0  /> \55            push ebp                                 ;  这里是test call

015D3EA1  |.  8BEC          mov ebp,esp

015D3EA3  |.  81EC CC000000 sub esp,0xCC

015D3EA9  |.  53            push ebx

015D3EAA  |.  56            push esi

015D3EAB  |.  57            push edi

015D3EAC  |.  51            push ecx

015D3EAD  |.  8DBD 34FFFFFF lea edi,[local.51]

015D3EB3  |.  B9 33000000   mov ecx,0x33

015D3EB8  |.  B8 CCCCCCCC   mov eax,0xCCCCCCCC

015D3EBD  |.  F3:AB         rep stos dword ptr es:[edi]

015D3EBF  |.  59            pop ecx                                  ;  test.01648053

015D3EC0  |.  894D F8       mov [local.2],ecx

015D3EC3  |.  6A 00         push 0x0

015D3EC5  |.  6A 00         push 0x0

015D3EC7  |.  68 0C60C601   push test.01C6600C                       ;  UNICODE "test"

015D3ECC  |.  8B4D F8       mov ecx,[local.2]

015D3ECF  |.  E8 95D2FCFF   call test.015A1169                       ;  call test1111

015D3ED4  |.  5F            pop edi                                  ;  test.01648053

015D3ED5  |.  5E            pop esi                                  ;  test.01648053

015D3ED6  |.  5B            pop ebx                                  ;  test.01648053

015D3ED7  |.  81C4 CC000000 add esp,0xCC

015D3EDD  |.  3BEC          cmp ebp,esp

015D3EDF  |.  E8 997EFBFF   call test.0158BD7D

015D3EE4  |.  8BE5          mov esp,ebp

015D3EE6  |.  5D            pop ebp                                  ;  test.01648053

015D3EE7  \.  C3            retn

这里就找到两个button功能call了,需要调换两个地方,发现如果直接call修改,需要堆栈平衡,闲麻烦,往上找找谁调用这里push ebp的地址,会发现上面有个jmp,在数据窗口上面直接跳转过去;

20171215145940-jmp.png

完成

啊哈,直接把两个地址互换一下,OK完成。记录下整个分析流程。


http://chatgpt.dhexx.cn/article/Kkal70xV.shtml

相关文章

OD 手动脱壳 - UPX

OD 手动脱壳 - UPX 1. 准备工作 1.OD 吾爱破解版 链接:https://pan.baidu.com/s/1ErDTW3D1n_XTAfTh8uMEbQ 提取码:tr452. 待脱壳程序 test2.exe链接:https://pan.baidu.com/s/1GUseFGIB8jnrhGE_0bSZoA 提取码:xki4 3. 查壳工具…

Windows逆向分析实战:使用CE+OD获取用户信息

序: 很多想学软件逆向分析的朋友们,初学者往往看到一大堆的技术资料,直接就懵了。本文以一个简单的例子,演示一下使用CEOD进行内存的获取,然后使用Qt进行界面显示,让初学者简单了解逆向分析的流程&#xf…

OD教程(去除NAG窗口--PE文件结构)

nag本意是烦人的意思,nag窗口是软件设计者用来时不时提醒用户购买正版的警告窗口。 软件设计者可能认为当用户忍受不了试用版中的这些烦人的窗口时,就会考虑购买正式版本。 PE文件结构 为什么需要了解PE文件结构? 大家想象一下&#xff0…

OD使用说明

目录 功能下载使用界面说明工具栏介绍快捷键 功能 ollydbg是一种动态反汇编工具,可以对运行的代码进行调试 下载 我下载了吾爱破解专版,因为它集成了多种插件 使用 软件运行以后就是下面的界面 界面说明 工具栏介绍 加载上一次的调试程序 关闭调…

小甲鱼OD使用教程七----破解VisualSite Designer

学习了小甲鱼OD使用教程之后的记录,仅供学习参考使用 一,程序分析 打开 关闭 这个程序无壳,需要破解的有两个点:1.使用次数限制 2.广告 第一点甲鱼叔在视频中介绍了两种方法,在次数耗尽之前和之后 1.次数耗尽之前 …

OD插件编写

前言 本教程主旨用于编写一个OD插件修复部分问题或者解析反调试问题. 官方文档 异常过滤器的反调试插件 当触发异常时首先会将异常交付给SEH然后再交付到 SetUnhandledExceptionFilter,不管是哪个阶段当存在调试器时,首先会交付给调试器,…

OD实战(1)

软件暴力破解 软件破解 软件 TraceMe下载地址:https://pan.baidu.com/s/1bWWm3L6cZ0gOqFIsKXQqkw 提取码:uqcd 破解 软件运行以后需要输入用户名和序列号,通过文本比较,只有正确的账号信息才能够进入,我们所要作的就…

Od软件破解

【文章标题】:算法分析与注册机编写 【文章作者】:hahaya 【软件名称】:Free Internet Window Washer 【软件大小】:1177KB 【保护方式】:注册码 【软件介绍】:无 【下载地址】:http://download…

简单详细的OD破解教程

2007-08-04 15:46作者:CCDebuger注:昨天在网上见到了这篇文章,但缺少插图,从另外一篇文章中也看到了类似的的教程文章,里面的插图质量实在不敢恭维。在一个论坛中正好下载了文章中所介绍的破解软件CRACKME3&#xff0c…

通过一个例子来介绍OD的简单使用

OllyDbg是一个32位的动态调试器,在平常做逆向的题中用的比较多,下面用bugku一个简单的例子Eazy-Re来介绍一下OllyDbg的使用。 首先打开程序,看一下是干什么的,他提示你输入flag,这里我随便输入几个字母,提…

OD基本介绍及快捷键讲解

OD简介 Ollydbg(简称OD)是Windows平台下Ring3级的程序调试利器。程序调试有静态调试和动态调试两种。静态调试是指将程序源代码编译成可执行程序之前,用手工或编译程序等方法对程序源代码进行测试,来查找和修正程序中的语法错误和…

OD修改软件

一、打开软件,查看正常运行的程序 二、打开OD,拖入要调试的程序 三、分析汇编代码 title是"Hello world",内存地址是0x00403000 四、数据窗口跳转到该地址,快捷键ctrlG 五、修改数据 点击要修改的地方,按…

简单详细的OD破解教程(转)

简单详细的OD破解教程 2007-08-04 15:46作者:CCDebuger注:昨天在网上见到了这篇文章,但缺少插图,从另外一篇文章中也看到了类似的的教程文章,里面的插图质量实在不敢恭维。在一个论坛中正好下载了文章中所介绍的破解软…

OD教程(汇编基础)

一、call有以下几种方式&#xff1a; call 404000h ;直接跳到函数或过程的地址 call eax ;函数或过程地址存放在eax call dword ptr [eax] call dword prt[eax ] call dword ptr [eax5] call dword prt[eax5] calldword ptr [<&API>] ;执行一个系统API 二、关于…

小甲鱼解密系列调试篇——OD使用教程笔记(持续更新中)

目录 一点铺垫&#xff1a;基础知识 1.汇编语言 2.NAG窗口 3.SEH 4.断点类型 一、MessageBox.exe修改程序标题内容——修改函数传入值 二、TraceMe.exe暴力破解程序登陆界面——搜索函数、寻找附近调用取值的地方 三、reverseMe.exe暴力破解/打补丁实现注册——分析文件…

第52篇:OD使用教程2-设置API函数断点去除软件对话框及过期校验

Part1 前言 大家好&#xff0c;我是ABC_123。之前分享过一篇Ollydbg逆向分析入门教程《第50篇&#xff1a;使用OD逆向破解流光Fluxay扫描器各种限制》&#xff0c;这篇文章主要讲解了在使用OD逆向分析时&#xff0c;如何按照编程人员的思维去解除软件的各种限制。方法有点麻烦…

od的简单使用--(1)

od的简单使用——&#xff08;1&#xff09; 一&#xff0c;本教程需要的工具OllyDBG 下载&#xff1a; OllyDBG 中各个窗口的功能如上图。简单解释一下各个窗口的功能&#xff0c;更详细的内容可以参考 TT 小组翻译的中文帮助&#xff1a;反汇编窗口&#xff1a;显示被调试程…

PyCharm 社区版(Community)能不能商用?

其实官方博客已经给出了答案&#xff0c;截图如下&#xff1a; PyCharm社区版是专业版的阉割版&#xff0c;PYcharm专业版增加了Web开发、Python We框架、Python分析器、远程开发、支持数据库与SQL等更多高级功能。两者区分如下&#xff1a; 所以&#xff0c;大胆放心的用PyC…

Pycharm社区版下载及安装教程

下载&#xff1a; 下载地址&#xff1a;https://www.jetbrains.com/pycharm/download/#sectionwindows 安装&#xff1a; 打开你下载的路径&#xff0c;双击.exe文件&#xff0c;点击运行 默认点击next之后&#xff0c;选择路径&#xff0c;尽量不要选择在C盘&#xff0c;然后…

Pycharm社区版安装教程(永久免费,随时升级)

首先进入JetBrain的官网(国内正常访问): https://www.jetbrains.com/ 第一眼看到的界面如下图所示: 然后找到我们的Pycharm专题页: 进入Pycharm的专题页面之后,点击下载按钮(这里有两个按钮,点任何一个都行): 然后进入到真正的下载页面你会发现有两个版本的Pycharm,一个…