逆向学习笔记二

逆向基础

一:OD操作基础

在这里插入图片描述

  • goto语句
    跳转到指定位置去,执行Go to(Ctrl + G) 命
    在这里插入图片描述

  • 设置断点
    设置BP(Break Point,断点)(快捷键F2)
    设置断点后,调试运行到断点处将会暂停(若未在代码中设置断点则继续调试)。
    在OD菜单栏中依次选中View-Breakpoints选项(快捷键 ALT+B),打开Breakpoints对话框,列出代码中设置的断点

  • 注释
    按键盘上的";"可以在指定地址处添加注释

  • 标签
    我们可以通过标签提供的功能在指定地址添加特定名称。移动光标到指定地址处,按":"键输入标签

二:快速查找指定代码方法

调试代码时,main()函数并不直接位于可执行文件的EP位置上,出现在此的时开发工具(Visual c++)生成的启动函数。我们需要查看的main()函数距离EP代码很远,快速找到main()函数有四种

  • 代码执行法
    适用于量不大,且程序功能明确的情况

  • 字符串检索法
    鼠标右键菜单–search for --all referenced text strings
    在OD的Dump窗口中使用Go to(Ctrl+G)命令,可以进一步查看位于内存某处的字符串。首先使用鼠标点击dump窗口,然后按Ctrl+G快捷键,打开Enter expression to follow in Dump窗口。
    在这里插入图片描述
    在这里插入图片描述

  • API检索法:在调用代码中设置断点
    鼠标右键菜单–Search for --all intermodular calls(所有模块间的调用)
    在这里插入图片描述

  • API检索法:再API代码中设置断点
    鼠标右键菜单–Search for—Name in all calls(“所有模块中的名称”并敲下MessageBox,光标会直接定位到messagebox那去)
    OD并不能为所有可执行文件都列出API函数列表。使用压缩器/保护器工具对可执行文件进行压缩保护之后,文件结构就会改变,此时OD就无法列出API调用列表了(甚至连调试都会变得非常麻烦)
    在这里插入图片描述
    在OD中选择View-Memory菜单(快捷键Alt+M),打开内存映射窗口。

三:修改字符串

  • 直接修改字符串缓冲区
    在dump窗口按ctrl+G快捷键执行Go to命令,在弹出的窗口中输入字符串的地址进入字符串缓冲区。然后在选中地址处的字符串,按ctrl+e快捷键打开编辑窗口修改
    在这里插入图片描述
    unicode字符串必须以null结束,它占据2个字节(添加null时不能直接在unicode文本框中进行,需要在hex项目中添加)
    在这里插入图片描述
    上面的更改只是零时的,永久保存就要更改程序后另保存为一个可执行文件。
    在dump窗口中,选中更改后的字符串—单击鼠标右键—在弹出的菜单中选中copy to executable file菜单
    然后 在hex窗口中鼠标右键–选择save file菜单

  • 在其他内存区域生成新字符串并传递给消息函数
    按ctrl+f2重新调试,开始的时候在main函数的地址处下了断点在按f9就会自动跳转到main函数处了

向MessageBoxW()函数传递字符串参数时,传递的是字符串所在区域的首地址。如果改变了字符串地址,消息框就会显示改变后的字符串。在内存的某个区域新建一个长字符串,并把新字符串的首地址传递给MessageBoxW()函数,可以人为传递的是完全不同的字符串地址。

  • 简单分析helloword
#include "windows.h"
#include "tchar.h"

int _tmain(int argc, TCHAR * argv[])
{
	MessageBox(NULL,"Hello World!","张轩瑞",MB_OK);
	return 0;
}

用vs生成release exe
用od打开
在这里插入图片描述
打开后直接敲messageboxw(因为输出字符会调用这个api)
在这里插入图片描述
然后我们直接点击即可,来到了这里
在这里插入图片描述
在函数起始地址处下上断点(f2)
在这里插入图片描述
然后按f9继续执行
在这里插入图片描述
程序执行到messageboxw代码的断点处就停下来了,可以看见栈中的值
在这里插入图片描述
esp值的18ff30处对应一个返回地址401014,helloworld.exe的main()函数调用完messageboxw函数后,程序执行流将返回到该地址处。按ctrl+f9快捷键使程序运行到messageboxw函数的RETN命令处,然后按F7键也可以返回到401014地址处。地址401014的上方就是地址40100E,它正是调用messageboxw函数的地方
在这里插入图片描述
修改字符串缓冲:
在dump窗口输入ctrl+g快捷键执行go to命令
在这里插入图片描述
然后点击确定,然后选中4092A0地址处的字符串
在这里插入图片描述
快捷键ctrl+e打开编辑窗口
在这里插入图片描述
请注意:unicode字符串必须以null结束,它占据2个字节(添加null时不能直接在unicode文本框中进行,而要在hex项目中添加)
然后鼠标右键–>复制到可执行文件—>保存为文件 保存为exe即可
在这里插入图片描述
在这里插入图片描述
运行修改生成后的exe,可见修改成功
在这里插入图片描述
其他内区域新建字符串并传递给消息函数
在这里插入图片描述
401007地址处有一条push 004029A0命令(前面那字符串不用管),它是把该地址处的值也就是hello world传递给messageboxw()函数 (字符串所在区域首地址)

我们在方法一中修改的字符串地址为4092A0,在dump窗口查看该部分
,我们找到内存区域有null填充的部分
在这里插入图片描述
在这里远一个地址填入我们想要修改的字符串
在这里插入图片描述
修改地址
在这里插入图片描述
按f9运行程序
在这里插入图片描述
修改成功

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值