分析现有二进制代码的结构,是Hook加入新功能的基础。如何在二进制代码海洋里快速定位,这个需要一定的技巧,本文主要整理来自网页提供的方法,方便大家快速上手。
1.win64位虚拟内存地址
X64 CPU 仅支持 64 位虚拟地址中的 48 位,这 48 位虚拟地址被运行在该 CPU 上的软件使用。 对于用户模式地址,64 位虚拟地址中的高 16 位总是被设置为 0x0;对于内核模式地址,总是设置为 0xF。这有效地将 X64 地址空间分开成2部分——用户模式地址的范围:0x00000000`00000000~0x0000FFFF`FFFFFFFF;内核模式地址的范围:0xFFFF0000`00000000~0xFFFFFFFF`FFFFFFFF。
此内核虚拟地址范围总计为 256 TB,用于 Windows 上可访问的全部内核虚拟地址空间。然后,Windows 静态划分此空间成多个固定大小的虚拟地址范围(VA),每个范围被赋予特定用途。每个范围的起始和结束地址如下表所示:
从X64Dbg的内存布局来看,如下图所示:
如果需要修改PE文件,需要注意虚拟内存地址的范围,不要超过PE模块的内存地址范围。
2.入口断点设置
菜单栏–选项–设置–事件选项卡下,可以设置什么时候暂停,入口断点,就是进入代码段的第一个地址,就暂停下来。这个是可选头部AddressOfEntryPoint的内存位置。
3.搜索导入表动态链接库函数
点击面板符号,搜索user32.dll中的MessageBox函数,如下图所示:
然后右键所选择的符号,加入断点,这样运行到此处内存时就停下来。然后运行到此位置,双击红色箭头位置文字,即可返回调用位置。如下图所示:
如果一些文件有提示,就很容易通过这种方法,找到目标代码所在位置。双击RIP,回到当前指令位置:如下图哦所示:
4.设置硬件断点和软件断点
硬件断点:硬断点需要硬件寄存器提供支持,断点的数目受Embedded ICE中的Watchpoint数目的限制,但是可以在任何地方设置断点。
软件断点:软件断点通过在运行起来的程序中设置特征值实现,其数目不受限制,但是一般情况下软件断点只能在可写的存储器的地址中设置(比如:RAM),而不能在ROM(比如:Flash)中设置。
在X64Dbg中,右键即可设置断点。
以上内容整理转载于网络,仅用于学习参考,如有侵权,第一时间联系删除。
欢迎光临知了软件开发网络平台,本公司定制开发各类软件,主要方向为桌面专业软件开发和插件定制开发,桌面软件主要包括文字图形识别类软件,信息管理类软件,3D打印类软件,视频类软件以及其它涉及专业的各类图形图像处理软件。插件包含AE插件,AI插件,PS插件,PDF插件,3DMAX插件以及Word,Excel等Office插件开发。详情请咨询,微信QQ:312117271,手机:18928899728,邮箱: [email protected]
公司网址:http://www.zhiliaos.com