ronin-asm is a Ruby DSL for crafting Assmebly programs and Shellcode.
Ruby HTML
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
data/ronin
lib/ronin
spec
.document
.gitignore
.rspec
.ruby-version
.travis.yml
.yardopts
COPYING.txt
ChangeLog.md
Gemfile
README.md
Rakefile
gemspec.yml
ronin-asm.gemspec

README.md

Ronin ASM

Build Status

Description

{Ronin::ASM} is a Ruby DSL for crafting Assmebly programs and Shellcode.

Features

  • Provides a Ruby DSL for writing Assembly programs.
    • Supports X86 and AMD64 instruction sets.
    • Supports ATT and Intel syntax.
  • Uses yasm to assemble the programs.
  • Supports assembling Shellcode.

Examples

Create a program:

asm = ASM.new do
  push ebx
  mov  eax, 0xc0ffee
  pop  ebx
  hlt
end

puts asm.to_asm
# BITS 32
# section .text
# _start:
#	push	ebx
#	mov	eax,	WORD 0xc0ffee
#	pop	ebx
#	hlt

puts asm.to_asm(:att)
# .code32
# .text
# _start:
#	pushl	%ebx
#	movl	%ebx,	%eax
#	popl	%ebx
#	hlt

Create shellcode:

shellcode = ASM::Shellcode.new(arch: :x86) do
  xor   eax,  eax
  push  eax
  push  0x68732f2f
  push  0x6e69622f
  mov   esp,  ebx
  push  eax
  push  ebx
  mov   esp,  ecx
  xor   edx,  edx
  mov   al,   0xb
  int   0x80
end

shellcode.assemble
# => "1\xC0Ph//shh/bin\x89\xDCPS\x89\xCC1\xD2\xB0\v\xCD\x80"

Immediate Operands

Immediate operands can be Integers or nil:

mov eax, 0xff
mov ebx, nil

The size of the operand can also be specified explicitly:

push byte(0xff)
push word(0xffff)
push dword(0xffffffff)
push qword(0xffffffffffffffff)

Memory Operands

Memory operands can be expressed as arithmatic on registers:

mov ebx, eax+8
mov ebx, eax-8
mov ebx, eax+esi
mov ebx, eax+(esi*4)

Labels

Labels can be expressed with blocks:

_loop do
  inc eax
  cmp eax, 10
  jl :_loop
end

Syscalls

If the :os option is specified, then syscall numbers can be looked up via the syscalls Hash:

ASM.new(os: 'Linux') do
  # ...
  mov al, syscalls[:execve]
  int 0x80
end

Requirements

Install

$ gem install ronin-asm

License

Ronin::ASM - A Ruby DSL for crafting Assmebly programs and Shellcode.

Copyright (c) 2007-2013 Hal Brodigan (postmodern.mod3 at gmail.com)

This file is part of Ronin ASM.

Ronin Asm is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

Ronin Asm is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with Ronin Asm. If not, see http://www.gnu.org/licenses/.