본문 바로가기
반응형

전체 글607

[SYSTEM HACKING] 어셈블리 명령어( shift 연산<shl, shr, sal, sar>, 논리연산<and, or, not>, 형변환<movzx, movsx>) 어셈블리 명령어( shift 연산, 논리연산, 형변환)에 대해서 정리한다. 1. 컴파일 과정 2. 실행중인 프로세스의 메모리 구조 3. 어셈블리 프로그래밍: 사칙연산 --------------------------------------------- 1. 비트연산: shift 연산 1). 부호가 없는 연산 ( Logical Shift ) - 왼쪽으로 이동: shl - 오른쪽으로 이동: shr ex). eax = 4; eax al * 큰 -> 작은 크기로 이동하는 상황은 특정 명령어가 존재하지 않고 메모리나 레지스터의 해당 크기를 줄여서 그 크기 만큼의 값만 가지고 온다. 대신에 이 경우에는 상위 비트의 값을 잃게 되므로 값의 손실이 생길 수 있다!!! [실습] - 사칙연산 프로그램 작성 - 입력 최대크기는.. 2017. 10. 21.
[SYSTEM HACKING] 어셈블리 사칙연산 명령어( add, sub, mul, imul, div, idiv ) / 계산기 만들기 실습 어셈블리 사칙연산 / 계산기 만들기 실습에 대해서 정리한다. 1. 사칙연산: +, -, *, / * 어셈블리에서 나머지를 구하는 연산은 없다. 1). 덧셈: ADD ( 어셈블리에서 + 이용해서 연산을 하는 경우는 Effective Address의 주소 연산을 할 경우에 [ ] 안에서만 사용하고더하기 연산 기능은 add 명령어를 통해서 하게 된다.. ) 2). 뺄셈: SUB 3). 곱셈 - MUL( unsigned ) * 피연산자는 하나이고 곱셈을 해서 eax와 edx 레지스터에 저장한다. - IMUL( signed ) * 피연산자가 1부터 3개까지 올 수 있고 형식은 MUL과 똑같다. ( unsigned의 곱하기 연산을 할 경우에는 mul을 사용한다 ) ( signed의 경우에는 IMUL 명령어를 이용하.. 2017. 10. 20.
[C언어] 문자열 자르기( strtok() ) / 문자열과 숫자 서로 변환하기 ( atoi(), strtol(), atof(), strtof() ) / 회문 판별, N-gram 만들기 문자열 자르기( strtok() ) / 문자열과 숫자 서로 변환하기 ( atoi(), strtol(), atof(), strtof() ) / 회문 판별, N-gram 만들기에 대해서 정리한다. 문자열 자르기 - strtok(대상문자열, 기준문자); ( 기준문자는 "(큰 따옴표)로 묶어준다 ) - 헤더 파일에 정의되어 있다. - strtok() 함수는 자른 문자열을 NULL로 채운다. ( 더이상 자를 문자열이 없으면 NULL을 반환한다 ) * 자른 문자열을 NULL로 채우기 때문에 반복해서 문자열을 자르는 작업을 하려면 반복문을 이용해서 strtok() 함수를 사용할때 대상문자열을 NULL로 준다. * strtok() 함수를 이용해서 문자열을 자르면 원본 문자열을 변환하기 때문에 사용에 주의한다. 문자열 .. 2017. 10. 19.
[SYSTEM HACKING] 명령어( mov, lea ) 명령어( mov, lea )에 대해서 정리한다. ! 데이터를 저장할 수 있는 곳 - 메모리 - 레지스터 - 코드섹션 명령어 1. mov - 할당 연산자와 비슷한 개념 - mov dst, src ! 피연산자 dst, src가 둘 모두 메모리가 올수는 없다. !! 코드섹션에서 메모리를 사용할때는 주소에 대한 메모리의 크기를 명시해준다. ( 주소에 대한 메모리의 크기를 명시해주지 않으면 nasm은 해당 주소의 크기를 data 혹은 bss 섹션에 정의해놔도 코드를 실행할때는 알지 못한다 ) * 레지스터의 크기는 이름으로 알 수 있지만 메모리는 이름으로 크기를 알 수 없다. * 코드 섹션에 mov 명령어를 사용할 때 피연산자로 레이블 이름을 그대로 적어주고 상수 값을 주는건 피연산자로 상수, 상수를 주는것과 같기.. 2017. 10. 18.
[SYSTEM HACKING] NASM ( 문자, 문자열 ) / data, bss, text segment에서의 데이터 표현 / 레지스터( Register ) NASM ( 문자, 문자열 ) / data, bss, text segment에서의 데이터 표현 / 레지스터( Register )에 대해서 정리한다. C 언어 - 문자: '(작은 따옴표) - 문자열: "(큰 따옴표) - 'hello'(x), 'h'(o) - "hello"(o), "h" NASM - 문자, 문자열: '(작은 따옴표) * 어셈블리어는 문자와 문자열을 구분하지 않는다. - 어셈블리어는 NULL 문자가 자동으로 붙지 않기 때문에 따로 붙여줘야 한다. * 이스케이프 문자가 지원되지 않는다면 ASCII 코드 값을 넣어주면 된다. ( nasm 홈페이지에 문서를 참조하면 String Constants 부분에 문자에 대한 표현 방법이 자세하게 나와있다 ) ( C언어 같은 경우에는 NULL 문자가 자동으로 .. 2017. 10. 17.
[C언어] 문자열 길이(strlen()) / 비교하기(strcmp()) / 복사하기(strcpy()) / 붙이기(strcat()) / 만들기(sprintf()) / 검색(strchr(), strrchr(), strstr()) 문자열 길이 구하기(strlen()) / 비교하기(strcmp()) / 복사하기(strcpy()) / 붙이기(strcat()) / 만들기(sprintf()) / 검색(strchr(), strrchr(), strstr())에 대해서 정리한다. 문자열 길이 구하기 - 문자열 길이를 구할때는 strlen(문자열포인터) 혹은 strlen(배열) 형식을 사용한다. ( 헤더 파일에 정의되어 있다 ) * strlen() 함수를 이용해서 문자열의 길이를 구할때는 NULL은 길이에 포함하지 않는다. ( strlen()을 이용한 문자열 길이는 NULL 바로 앞까지의 길이를 구하는 것이다 ) 문자열 비교하기 - strcmp(문자열1, 문자열2) 형식을 사용해서 두 문자열이 같은지를 비교한다. ( 헤더 파일에 정의되어 있다 .. 2017. 10. 17.
[C 언어] 포인터와 배열 응용 / 문자와 문자열 포인터( 문자열 사용하기 ) / 배열 형태로 문자열 선언 / 입력 값을 문자열에 저장 포인터와 배열 응용 / 문자와 문자열 포인터( 문자열 사용하기 ) / 배열 형태로 문자열 선언 / 입력 값을 문자열에 저장에 대해서 정리한다. 포인터와 배열 응용 - 프로그램 실행 중에 원하는 크기만큼 배열을 생성하는 기능 ( 가변 길이 배열(Variable-Length Array, VLA) ) - visual studio 2015에서는 해당 방법을 지원하지 않기 때문에 포인터에 메모리를 할당해서 메모리를 배열처럼 사용하는 방법을 이용한다. - 자료형 *포인터 = malloc(sizeof(자료형) * 크기) 형식을 사용한다. - '*포인터'처럼 포인터를 역참조한 것과 '포인터[0]'처럼 인덱스 0에 접근하는것은 같은 값을 가져온다. 또한 '포인터[1]'과 *(포인터 + 1)도 서로 같은 값을 가져온다. .. 2017. 10. 16.
[SYSTEM HACKING] 실습 환경 세팅 / 컴파일 과정 / ELF 섹션(ELF Section) / 어셈블 프로그래밍 실습 환경 세팅 / 컴파일 과정 / ELF 섹션(ELF Section) / 어셈블 프로그래밍에 대해서 정리한다. - 실습 환경 - Red Hat Linux 6.2 * 부팅시마다 LILO BOOT에서 linux-up을 입력해줘야 한다. - 원격접속 설정 1). /etc/securetty pts/0 pts/1 pts/2 .. pts/8 * 위 내용을 해당 파일에 추가 시켜주기만 하면 다음 부팅시부터 Telnet을 이용한 원격접속이 가능하다. 2). PAM: /etc/pam.d/login - 두번째 라인을 주석 처리 - # auth required /lib/security/pam_securetty.so - 사용하는 도구 * C 컴파일러 : GCC ( GNU C Complier) * 어셈블러 : GAS( GNU.. 2017. 10. 14.