기본 콘텐츠로 건너뛰기

라벨이 프로그래밍인 게시물 표시

쉘코드 만들기 강좌

1. 쉘코드 프로그래밍 하기 void  main ( ) {         execve ( "/bin/sh" , NULL , NULL ) ; } // compile : gcc -o mkshell mkshell.c -static 단순히 리눅스 쉘을 실행시켜주는 프로그램인데, 우리에게 필요한건 저 쉘을 실행시켜주는 기계어 루틴입니다. 그리고 컴파일할때 반드시 -static 옵션을 주고 컴파일하세요!! 컴파일한후에, gdb 명령어로 실행시켜줍니다. 그리고 gdb의 disas 명령어로 execve() 루틴을 분석해보겠습니다. 2.쉘코드 분석하기 execve 함수는 위와같은 어셈블리 코드로 이루어져있군요. 분석을 해보도록 하겠습니다. 0x0804e723   < execve + 3 >:   mov     0x10 ( % ebp ) ,% edx  // 세 번째 파라미터 0x0804e726   < execve + 6 >:   push    % ebx 0x0804e727   < execve + 7 >:   mov     0xc ( % ebp ) ,% ecx   // 두 번째 파라미터 0x0804e72a   < execve + 10 >:  mov     0x8 ( % ebp ) ,% ebx   //문자열의 주소, 첫번째파라미터 0x0804e72d   < execve + 13 >:  mov    $ 0xb ,% eax 0x0804e732   < execve + 18 >:   int     ...

ARM Assembly 명령어 정리

※ 용어 정의       Rd : Destination Register   /    Rn : Operand1 Register   /    Rm : Operand2 Register      < cond >: Execution Condition code      < S >: S-Suffix - Status Update Suffix - SPSR의 값을 CPSR로 불러와서 Status를 Update      < ! > : ! - Suffix - Writeback Suffix - [,]내의 선처리 연산 수행 후 값을 갱신      < Operand2 >: Operand2가 가질 수 있는 형식           ㄱ. #Immediate: 32bit  명령에서 Immediate값은 8-bit pattern의 짝수 shift 값 만을 허용           ㄴ. Rm{, shift연산 #immediate}: Register(Rm)값에 #immediate 값으로 Shift 연산                                  §  Shift 연산의 종류                - asr(Arithmetic Shift Right): Immediate의 값 만큼 right shift, 앞에 bit는 Sign Extension             ...

어셈블리어(Assembly) 기초

0x01.  어셈블리 언어란 ? &  배우는 목적 CPU  에는 해당 프로세서에 명령을 내리기 위해 고유의 명령어 세트가 마련되어 있는데 이  명령어 세트를 기계어라고 한다 .  이 기계어는 숫자들의 규칙조합임으로 프로그래밍에 상당 히 난해하다 .  그래서 이 기계 명령어를 좀더 이해하기 쉬운 기호 코드로 나타낸것 ( 기계어와  1:1 로 대응된 명령을 기술하는 언어 ) 이 어셈블리어이다 .  어셈블리 언어는 그 코드가 어떤  일을 할지를 추상적이 아닌 ,  직접적으로 보여준다 .  논리상의 오류나 ,  수행 속도 ,  수행 과정 에 대해 명확히 해준다는 점에서 직관적인 언어이다 .  어셈블리 언어를 사용하면 메모리에 대한 이해도도 높아진다 .  어셈블리를 익히고 ,  배우는데 있어서는 여러 가지 목적이 있을 수 있다 .  컴퓨터 시스템 & 구조를 좀 더 깊게 이해하고 ,  메모리상의 데이터나  I/O 기기를 직접 액 세스 하는등의 고급언어에서는 할 수 없는 조작을위해서이다 .  프로그램의 최적화 및 리버 스 엔지니어링을 위해서도 필요하다 . + 2 줄 요약  + -  어셈블리 언어는 기계어와  1:1  대응을 하는 언어이다 . -  어셈블리 언어를 배우면 시스템을 이해하는데 도움이 된다 . 0x02.  어셈블리를 위한 기본 지식 (1)  기본적인 하드웨어 1) CPU -  메모리에 있는 내용을 읽고 ,  쓰고 데이터를 메모리와 각 레지스터로 보낸다 . 프로그램의 명령을 해석하고 실행한다 . 하나의 프로세서는  12~14 개의 레지스터를 가 지고 있으며 , CPU 의 연산 ,  논리 장치는 숫자와 기호에 관한 연산자를...