文章总结了三种随机基址解决方案:

  1. 关闭随机基址
  2. 手动转换
  3. ida自适应
    各有优劣,需要根据实际情况使用

0x1 关于随机基址

特性:

  • 默认情况下 程序的起始内存地址是0040 0000
  • 随机基址:程序起始地址不是默认值。编译器以及操作系统共同完成
  • 缺陷:即使开启了随机基址,短时间内一个exe在同一环境上的内存起始地址是固定的

一共三种方案来解决随机基址的问题,推荐方案2

  1. 关闭随机基址

    有的程序会依赖随机基址,直接关闭会导致意想不到的情况
  2. 手动转换

    理想操作,但是很耗费时间
  3. ida自适应

    让ida自适应随机出来的内存起始地址,局限性比较大

0x2 方案一:使用工具关闭

  1. 利用cff关闭随机基址功能
  2. 可选头部->dll属性->dll属性(关闭即可)

关闭随机基址.png

0x3 方案二:计算偏移

  • 首先在ida中计算出目标内存距离默认地址00400000的偏移
  • 然后再x64中获取到 程序当前真正的内存地址
  • 真正的内存起始地址+偏移=目标内存真正的地址

0x3.1 计算偏移量

首先在ida中定位目标内存

image-20201018135944614.png

如下运算可以计算出偏移量

  1. 首先默认起始地址是:00400000
  2. 其次ida中hello的地址是:00416000
  3. 所以偏移地址(恒定)=00416000-00400000=16000

0x3.2 获取内存地址

  • 使用x64的内存窗口功能来获取程序当前的内存起始地址

image-20201018140328927.png

  • 这里获取到的起始地址是012F0000

0x3.3 计算

  • 绝对地址=偏移+内存起始地址
  • =16000+012F0000
  • 01306000

image-20201018140806315.png

方案三:修改ida的基址

  1. 查看 运行时的 基址

1565839515857.png

  1. 修改ida中默认的基址

1565839566554.png
1565839589846.png

Last modification:December 31, 2020
如果觉得我的文章对你有用,请随意赞赏