Exploring the X64

Exploring the X64

Exploring the x64 Junichi Murakami Executive Officer, Director of Research Fourteenforty Research Institute, Inc. Who am I? • Junichi Murakami – @Fourteenforty Research Institute, Inc. – Both Windows and Linux kernel development – Reversing malware and P2P software, etc. – Speaker at: • Black Hat 2008 US and Japan, AVAR 2009, RSA Conference(2009-) – Instructor at Security & Programming Camp(2006-) 2 Environment • Windows 7 x64 Edition • Visual Studio 2008 • Windbg • IDA Pro Advanced – STD doesn’t support x64, an offering is needed! 4 Agenda • Windows x64 • ABI(Application Binary Interface) • API Hooking • Code Injection 5 Windows x64 • Native x64 and WoW64 • Virtual Address Space – 2^64 = 16 Exa Byte ( Exa: 10^18) – but, limited to 16TB by Microsoft • File/Registry reflection • New 64-bit APIs – IsWow64Process, GetNativeSystemInfo, etc. 6 ABI • Binary Format • Register • Calling Convention • Exception Handling • Systemcall(x64, WoW64) 11 Binary Format(Cont.) • Some fields were extended to 64-bits – IMAGE_NT_HEADERS.IMAGE_OPTIONAL_HEADER • ImageBase • SizeOfStackReserve • SizeOfStackCommit • SizeOfHeapReserve • SizeOfHeapCommit 13 Calling Convention • first 4 parameters are passed by RCX, RDX, R8, R9 – 5th and later are passed on the stack • caller allocates register home space on the stack • RAX is used for return values • leaf / non-leaf function – leaf function: never use stack – PE32+ contains non-leaf function’s information in its EXCEPTION DIRECTORY • Register’s volatility – volatile: RAX, RCX, RDX, R8-R11 15 Exception Handling • Table-base – linked-list is no longer used if you don’t know the classic SEH mechanism, you should check Shuichiro Suzuki’s works! 17 advantages of the exception directory (RF structure) • possible to enumerate all non-leaf functions • possible to understand – each function’s exception information – each function’s usage of stack and volatile registers 24 fs:[0C0h] • FS register points to TEB(Thread Environment Block) 0:000:x86> dt _TEB dbgbreak!_TEB +0x000 NtTib : _NT_TIB ( i ) 0:000:x86> dd fs:[0C0h] 0053:000000c0 738c2320 00000411 00000000 00000000 ↑ X86SwitchTo64BitMode +0x040 Win32ThreadInfo : Ptr32 Void +0x044 User32Reserved : [26] Uint4B +0x0ac UserReserved : [5] Uint4B +0x0c0 WOW32Reserved : Ptr32 Void 28 Content of GDT[0x30] • base: 0x000`00000000 • limite: 0x000`00000000 • type: CODE, Read, Execute and Accessed • Privilege Level: 3(User-mode) • L (64-bit code segment) flag: set 32 Demo: Direct x64 API call from WoW64 • x86 to x64 – jmp 0033:XXXXXXXX • API call – rax: syscall number – rdx: pointer to parameter list – syscall • x64 to x86 – call 0023:XXXXXXXX 35 API Hooking • IAT Hooking – possible to hook IAT on x64 in the same manner as x86 • Code Hooking 36 Conclusions • Windows x64 • ABI(Application Binary Interface) • API Hooking • Code Injection 41 Acknowledgement • Toshiaki Ishiyama@FFR • Satoshi Tanda@FFR 42 .

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    42 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us