Path: blob/master/modules/nops/mipsbe/better.rb
19500 views
##1# This module requires Metasploit: https://metasploit.com/download2# Current source: https://github.com/rapid7/metasploit-framework3##45###6#7# MixedNop8# ----------9#10# This class implements a mixed NOP generator for MIPS (big endian)11#12###13class MetasploitModule < Msf::Nop1415def initialize16super(17'Name' => 'Better',18'Alias' => 'mipsbe_better',19'Description' => 'Better NOP generator',20'Author' => 'jm',21'License' => MSF_LICENSE,22'Arch' => ARCH_MIPSBE)2324register_advanced_options(25[26OptBool.new('RandomNops', [ false, 'Generate a random NOP sled', true ])27]28)29end3031def get_register32return rand(1..27)33end3435def make_bne(_reg)36op = 0x140000003738rand_reg = get_register39offset = rand(65536)4041op = op | (rand_reg << 21) | (rand_reg << 16) | offset42return op43end4445def make_or(reg)46op = 0x000000254748op = op | (reg << 21) | (reg << 11)49return op50end5152def make_sll(reg)53op = 0x000000005455op = op | (reg << 16) | (reg << 11)56return op57end5859def make_sra(reg)60op = 0x000000036162op = op | (reg << 16) | (reg << 11)63return op64end6566def make_srl(reg)67op = 0x000000026869op = op | (reg << 16) | (reg << 11)70return op71end7273def make_xori(reg)74op = 0x380000007576op = op | (reg << 21) | (reg << 16)77return op78end7980def make_ori(reg)81op = 0x340000008283op = op | (reg << 21) | (reg << 16)84return op85end8687def generate_sled(length, opts)88nop_fn = %i[make_bne make_or make_sll make_sra make_srl make_xori make_ori]89sled = ''9091for _ in 1..length / 4 do92n = nop_fn.sample93sled << [send(n, get_register)].pack('N*')94end9596return sled97end98end99100101