从汇编生成shellcode的n种方法

第一种,添加asm代码到c中,然后gcc编译生成可执行代码,最后objdump:

void main() {

asm{

}

}

太麻烦,这里就不详细介绍了,基本上包含在第二种方法中

 

第二种,直接用NASM或者GAS生成elf文件,然后objdump:

nasm -f elf print.asm

ld -m elf_i386 -o print print.asm

as test.asm -o test.o

ld test.asm -o test

objdump生成shellcode:

objdump -d print2 grep “^ ” cut -d$’\t’ -f 2 tr ‘\n’ ‘ ‘ sed -e ‘s/ *$//’ sed -e ‘s/ +/\x/g’ awk ‘{print “\x”$0}’

关于NASM和GAS的区别可以看:

https://www.ibm.com/developerworks/library/l-gas-nasm/

 

第三种,使用pwntools(https://github.com/Gallopsled/pwntools#readme)

example:

from pwn import *

code = """.global _start
_start:
        jmp     test1
test2:
        pop     ebx
        mov     al, 0xa
        int     0x80
        mov     al, 0x1
        xor     ebx, ebx
        int     0x80
test1:
        call    test2
        .string "delfile" """

context(arch='x86', os='linux', endian='little', word_size=32)
shellcode = asm(code).encode('hex')
re = ''
while len(shellcode):
    re += r'\x'+shellcode[:2]
    shellcode = shellcode[2:]
print re<span data-mce-type="bookmark" style="display: inline-block; width: 0px; overflow: hidden; line-height: 0;" class="mce_SELRES_start"></span>

 

未完待补充

 

最近的文章

windows下获取dll中函数地址的方法

在windows下面调试shellcode的时候需要查找一些函数的地址,这里总结下可以用的方法:1、微软的depents工具:http://www.dependencywalker.com/这个在xp上应该没问题但是在64位win7之后的系统会报错,github上有人写了新的工具解决了这个问题(https://github.com/lucasg/Dependencies)但是我这个软件读出来的地址不是正确的函数地址,具体原因未知,待测试 2、在调试的时候直接在OD中查找函数地址使用ctrl...…

dll function shellcode windows 函数地址继续阅读
更早的文章

GDB 调试dumped core文件

在调试堆栈溢出的时候,用gdb加载文件运行的时候的地址会和直接运行的地址有出入,这个时候我们需要先在没有gdb的情况下运行程序,程序崩溃会生成core文件然后我们用gdb filename core进行调试我在ubuntu上测试的时候会发现当前目录里面并没有生成core文件,在研究一番后发现需要修改/proc/sys/kernel/core_pattern 文件然后我们用root来执行下面命令:$> mkdir -p /tmp/cores$> chmod a+rwx /tmp/...…

core dump gdb gdb调试继续阅读