od反汇编linux,新手学习反汇编之OD寻找功能call
背景知识
VC++编程知识
OD工具使用
汇编知识
功能实现
简单的互换点击功能;
将两个功能互换
效果图:
创建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按钮;
这个时候会自行到断点地方,注意看堆栈窗口里面的数据,如以下信息;
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会发现,堆栈窗口里面还有一个调用地址;
先跟随过去,下断点,重复上面的动作测试一下,结果发现,这里才是正确的断点。
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,在数据窗口上面直接跳转过去;
完成
啊哈,直接把两个地址互换一下,OK完成。记录下整个分析流程。
od反汇编linux,新手学习反汇编之OD寻找功能call相关推荐
- Linux新手学习起步
因为岗位变动现在接触一些科技.网络方面的工作,所以想多学一些知识丰富一下大脑的储备.不能让其他同事说我是大外行! 实话实说工作已经16年了,原来上学期间对电脑.对网络还是比较喜欢的.虽然不是计算机等相 ...
- Linux 新手学习任务
在一个论坛上http://www.linuxdiyf.com/看到的,感觉受用,特此转了下来,被Linux学习之用. 新手的练习任务在这里: 任务一:打开系统主菜单,逐一细看,而后默想一遍:逐次打开若 ...
- 【Windows 逆向】OD 调试器工具 ( OD 附加进程 | OD 调试器面板简介 | 反汇编窗口 | 寄存器窗口 | 数据窗口 | 堆栈窗口 )
文章目录 一.OD 附加进程 二.OD 调试器面板简介 ( 反汇编窗口 | 寄存器窗口 | 数据窗口 | 堆栈窗口 ) 一.OD 附加进程 先启动游戏 , 打开 OD 调试工具 ; 游戏 参考 [Wi ...
- linux下反汇编命令,Linux命令学习手册-objdump命令
objdump [选项] objfile... [功能] 显示二进制文件信息 [描述] objdump用来显示一个或者多个目标文件的信息.使用选项控制具体显示哪些信息.参数objfile...可以是静 ...
- 如何学习Linux / 新手入门
如何学习Linux / 新手入门 一.从基础开始:常常有些朋友在Linux论坛问一些问题,不过,其中大多数的问题都是很基础的.例如:为什么我使用一个命令的时候,系统告诉我找不到该目录,我要如何限制使用 ...
- linux课程内容知识脉络,云计算学习路线教程大纲课件:Linux新手入门教程
云计算学习路线教程大纲课件,Linux新手入门教程讲解: v> Shell编程之基础知识 No.1 Shell脚本的基本语法结构 第一行: "#!/usr/bin/env bash&q ...
- Linux新手大礼包:学习Linux你必须知道的那些事儿
欢迎加入Linux的大家庭!对你来说,这可能还是一个陌生的领域,不过相信随着逐步深入的了解,你会喜欢上Linux,喜欢上开源的!首先,让我们来看一下,Linux新手应该注意和了解哪些事情吧! 1. ...
- Linux 命令(2)—— od 命令
1.功能简介 od(Octal Dump)命令用于将指定文件内容以八进制.十进制.十六进制.浮点格式或 ASCII 编码字符方式显示,通常用于显示或查看文件中不能直接显示在终端的字符.od 命令系统默 ...
- linux系统pkl,(网摘)Linux新手必看:浅谈如何学习linux
地址:http://www.eimhe.com/bbs/viewthread.php?tid=53256&extra=page=1> Linux新手必看:浅谈如何教习linux 一.起步 ...
- Linux命令学习资料总结
对 Linux 新手非常有用的 20 个命令 1. ls命令 ls命令是列出目录内容(List Directory Contents)的意思.运行它就是列出文件夹里的内容,可能是文件也可能是文件夹. ...
最新文章
- 《为什么我们的决策总出错》摘录
- The prefix “mvc“ for element “mvc:annotation-driven“ is not bound 异常
- C++标准类型库string
- 产品经理入门应该怎样学习和成长?
- MVC之前的那点事儿系列(4):Http Pipeline详细分析(上)
- 【CF1230E】Kamil and Making a Stream【GCD性质】【暴力vector】
- NoSuchElementException
- CAN总线技术 | 物理层03 - 采样点
- python入门指南阅读答案_【python】入门指南1
- 按照两个dataframe的index合并数据
- Python之数据分析(Numpy的子模块:线性代数模块linalg、傅里叶变换模块fft)
- springcloud工作笔记107---Springboot中MyBatis 自动转换 map-underscore-to-camel-case=true 开启驼峰命名映射
- Kotlin — 心印(熟悉与锻炼Kotlin语法)
- windows更新不支持的硬件_漫威复仇者联盟首次打折半价,GTA5最大更新即将到来,糖豆人将更新困难模式,赛博朋克2077首发不支持A卡光追...
- (免费自取)厦门大学林子雨老师的spark(python)版本的pyspark链接hbase的jar包
- 银联刷卡POS机冲正
- 小程序实现文字竖排展示
- 花了一年时间开发的三维弯管机交互式转档软件(三维管子模型UG,SOLIDWORK,PRO/E文件转成YBC)...
- 编程累了进来听听音乐
- awg线径与电流_AWG_线径电流
热门文章
- 翻译狗文档免费下载手册(补充版)
- SQLServer中如何高效解析JSON格式数据
- 一文读懂Layer 2:Layer 2指基于底层区块链...
- HTML5视频和音频常见的格式,HTML5中视频音频的使用详解
- 用Tkinter打造GUI开发工具(35)Tkinter中的视频播放组件
- 金融量化分析【day112】:量化平台的使用-第一个策略
- 国外遥感影像如何下载之利用USGS网站影像下载无需JAVA
- 三星android截屏快捷键是什么,三星s10截屏快捷键是什么
- 在线OJ后端涉及到的知识点
- 哪个手机浏览器可以倍速_手机四款浏览器APP的比较