Self-Remapping Code学习

重新映射程序镜像,防止镜像中包含页面的页面保护被NtProtectVirtualMemory修改。可以用于一种反调试和反dump技术

  1. 镜像被复制到一个可执行buffer,作为remap区域
  2. remap区域中的remap过程被定位并调用
  3. remap过程创建一个page-file-backed节存储重映射之后的镜像
  4. remap过程映射全部节的视图并将镜像复制到对应视图,这个视图随后被unmap
  5. remap过程为利用RVA每一个PE节映射一个视图,RVA作为视图的偏移。每一个视图使用SEC_NO_CHANGE分配来阻止页面保护改变
  6. remap过程完成执行并返回重定向后的镜像

代码

https://github.com/changeofpace/Self-Remapping-Code

参考

https://github.com/changeofpace/Self-Remapping-Code