内容纲要
  1. 进程数据在各个段上,包括栈、堆和线程栈
  2. 访问数据需要基址加偏移
  3. 先用 CE 扫一下数据,看看数据地址的分布,看在进程地址空间的那个段上
  4. 如果数据在栈上,那么基址就是栈的上限,偏移就是栈上限地址 - 地址,可以从进程的 TEB 段获取线程栈基址
  5. 如果数据在堆上,那么可以通过 CreateToolhelp32Snapshot Heap32ListFirst Heap32ListNext 枚举堆地址,然后计算偏移
  6. TEB 可以通过 FS 段寄存器(32位)和 GS 段寄存器(64 位)获取
  7. CE 扫角色对象属性,变化后跟踪地址,查看附近的其他属性地址数据是否变化,变化说明,说明属性内存地址在一个对象里,然后打开OD,下内存断点,在 OD 中跟踪确认,看反汇编,一般对象的地址放在 ESI 寄存器里,然后通过偏移访问对象属性;然后选择这个对象开始的 HEX 数据作为签名在 CE 中搜索确认地址唯一
  8. 在 Threadstack0 附近能找到一些有意思的初始化对象地址

发表评论

电子邮件地址不会被公开。 必填项已用*标注