IoM进阶系列(1) PELoader&RDI的TLS之殇
从一个崩溃开始的 PE Loader 救赎之旅
本系列文章虽然叫做IoM进阶系列, 但实际与IoM关系不大,只是在开发IoM的过程中遇到的。进阶系列均为解决前无古人的问题、创新等, 本文将从最常用的技术 PE-Loader开始。
如果读者已经熟知PE加载, 那么本文的内容将不会有非常大的革新, 但各位阅读完本文可能也会看到一些新鲜玩意, 聊以慰籍 :)
今年8月, 我们推出了下一代
C2
计划 --Internal of Malice
, 旨在实现一套post-exploit
基础设施, 在implant
的语言选用中, 我们尝试了这两年最火热的红队语言:Rust
, 也因为这个选择,在实现过程中遇到了和解决了非常多有意思的问题。在推出
stager
版本之后, 交流群的一位同学贴出了Writing a PE Loader for the Xbox in 2024 这篇文章, 用一种非常粗暴的方式解决了Rust
在使用MSVC
编译时引入了TLS(thread-local storage)
, 而只常见的PELoader
简单调用tls callback
无法正常加载PE
文件的问题, 遂成文。