编写shellcode很重要的一步就是搜索kernel32的基址,毕竟我们要获取API的地址 x86下总所周知的fs寄存器搜索kernel32基址的办法,在x64下已经失效了. 鉴于网上的资料太少,也许是我没搜索到.暂且写一段分享. x64下fs的角色已经换成了gs. 暂时发现存储的一些感兴趣的东西,如果有其他的,希望能告知我. gs:[0x30] TEB gs:[0x40] Pid gs:[0x48] Tid gs:[0x60] PEB gs:[0x68] LastError 值得一提的是,虽然gs:[0x60] 直接存放的PEB,但是由于vista/7后的地址随机化机制,还是从TEB获取比较靠谱. 0:009> dt 000007fffff98000 _TEB ntdll!_TEB +0×000 NtTib : _NT_TIB +0×038 EnvironmentPointer : (null) +0×040 ClientId : _CLIENT_ID +0×050 ActiveRpcHandle : (null) +0×058 ThreadLocalStoragePointer : (null) +0×060 ProcessEnvironmentBlock : 0x000007ff`fffd5000 _PEB //这里即是PEB //用c语言描述就是 #define x64_GetPeb() [...]
