小编KIN*_*BRI的帖子

如何使用Fiddle with Windows API(dll)在Ruby中运行shellcode

我正在尝试使用ruby Fiddle标准库来运行Windows API以运行shellcode

代码的想法是

  1. 有一个执行任何事情的hexdicemial shellcode raw(例如MessageBoxA)
  2. 呼叫 kernel32.dll
  3. 为这个shellcode分配一个内存. VirtualAlloc
  4. 为这个shellcode创建一个缓冲区
  5. 将shellcode移动到该分配. RtlMoveMemory
  6. 创建一个新线程来执行该shellcode. CreateThread
  7. 等待执行/线程结束. WaitForSingleObject

这是代码:

require 'fiddle'
require 'fiddle/import'
require 'fiddle/types'

shellcode = # MessageBoxA
"\x31\xd2\xb2\x30\x64\x8b\x12\x8b\x52\x0c\x8b\x52\x1c\x8b\x42" +  
"\x08\x8b\x72\x20\x8b\x12\x80\x7e\x0c\x33\x75\xf2\x89\xc7\x03" + 
"\x78\x3c\x8b\x57\x78\x01\xc2\x8b\x7a\x20\x01\xc7\x31\xed\x8b" + 
"\x34\xaf\x01\xc6\x45\x81\x3e\x46\x61\x74\x61\x75\xf2\x81\x7e" + 
"\x08\x45\x78\x69\x74\x75\xe9\x8b\x7a\x24\x01\xc7\x66\x8b\x2c" + 
"\x6f\x8b\x7a\x1c\x01\xc7\x8b\x7c\xaf\xfc\x01\xc7\x68\x79\x74" + 
"\x65\x01\x68\x6b\x65\x6e\x42\x68\x20\x42\x72\x6f\x89\xe1\xfe" + 
"\x49\x0b\x31\xc0\x51\x50\xff\xd7"

include Fiddle 
kernel32 = Fiddle.dlopen('kernel32')

puts "[-] VirtualAlloc"
ptr = Function.new(kernel32['VirtualAlloc'], [4,4,4,4], 4).call(0, (shellcode.size), 0x3000, 0x40)
Function.new(kernel32['VirtualProtect'], [4,4,4,4], 4).call(ptr, shellcode.size, 0, 0)

puts "[-] Create buffer"
buf = Fiddle::Pointer[shellcode]

puts "[-] RtlMoveMemory"
Function.new(kernel32['RtlMoveMemory'], [4, 4, 4], …
Run Code Online (Sandbox Code Playgroud)

c ruby windows winapi fiddle

6
推荐指数
1
解决办法
288
查看次数

标签 统计

c ×1

fiddle ×1

ruby ×1

winapi ×1

windows ×1