1. opcode -> assembly

[1] 파이썬 capstone library 이용하기

http://www.capstone-engine.org/lang_python.html

예) 24Byte shellcode 명령어


from capstone import *

CODE = b"\x31\xd2\x52\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x52\x53\x89\xe1\x8d\x42\x0b\xcd\x80"

md = Cs(CS_ARCH_X86, CS_MODE_32)
for i in md.disasm(CODE, 0x1000):
    print("0x%x:\t%s\t%s" %(i.address, i.mnemonic, i.op_str))

test.py에 저장 후 실행


[2] C파일에 넣어서 컴파일

char s[]="\x31\xd2\x52\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x52\x53\x89\xe1\x8d\x42\x0b\xcd\x80";

int main(int argc, char **argv) {
	return 0;
}

컴파일 후 gdb로 확인



2. assembly -> opcode

[1] nasm 사용하기

BITS 32

xor edx, edx
push edx
push 0x68732f6e
push 0x69622f2f
mov ebx, esp
push edx
push ebx
mov ecx, esp
lea eax, [edx+0xb]
int 0x80

를 sh.S에 저장 후

nasm sh.S

[2] C의 inline assembly

int main() {
	__asm__ __volatile__(
	"xor %edx, %edx\n\t"
	"push %edx\n\t"
	"push $0x68732f6e\n\t"
	"push $0x69622f2f\n\t"
	"mov %esp, %ebx\n\t"
	"push %edx\n\t"
	"push %ebx\n\t"
	"mov %esp, %ecx\n\t"
	"lea 0xb(%edx), %eax\n\t"
	"int $0x80\n\t"
	);
}

test.c에 넣고 gcc로 컴파일


+ Recent posts