본문 바로가기
반응형

Study/Reversing24

[리버싱] 리틀 엔디언&빅 엔디언 엔디언(Endianness)이란? 컴퓨터의 메모리와 같은 1차원 공간에 여러 개의 연속된 대상을 배열하는 방법이다. 빅 엔디언(Big-endian)과 리틀 엔디언(Little-endian)으로 나눠진다. 빅 엔디언(Big-endian) 최상위 바이트(MSB)부터 차례대로 저장하는 방식이다.장점 디버그를 편하게 해주는 경향이 있다. (사람이 숫자를 읽고 쓰는 방법과 같기 때문) TCP/IP는 16비트와 32비트 정수에서 빅 엔디안 방식을 사용한다. 숫자 비교시, 유리 UNIX에서 사용하는 바이트 오더 리틀 엔디언(Little-endian) 최 하위 바이트(LSB)부터 차례대로 저장하는 방식이다. 장점 메모리에 저장된 값의 하위 바이트들만 사용할 때 별도의 계산이 필요 없다. 수치 계산시, 유리 Intel에.. 2017. 8. 23.
[리버싱] 레지스터에 대해 알아보자 레지스터란? CPU 내부에 존재하는 작은 고속의 메모리이다. 레지스터의 종류 위 레지스터들은 범용레지스터, 인덱스레지스터, 포인터레지스터라고 한다. 32비트 환경에서는 첫 글자가 E(Extended)로 시작한다. 64비트 환경에서는 첫 글자가 R(Register)로 시작하고 32비트의 레지스터를 포함한다. 범용 레지스터 AX(Accumulator) : 연산에 사용 BX(Base) : 메모리 주소 지정 시 사용 CX(Counter) : 반복과 같은 상황에 사용 DX(Data) : EAX와 함께 연산, 부호확장 인덱스 레지스터 SI(Source) : 메모리를 이동 및 비교 시 해당 주소 DI(Destination) : 메모리 이동 및 비교 시 목적지 주소 포인터 레지스터 IP(Instruction) : 다음.. 2017. 8. 23.
[리버싱] 어셈블리어 명령어 어셈블리어 명령어 push : 스택에 저장pop : 스택 가장 상위에 있는 값을 꺼내서 저장mov : 메모리나 레지스터 값을 옮길 때 사용lea : 주소값을 옮길 때 사용inc : 1 증가dec : 1 감소add : 레지스터나 메모리의 값을 덧셈할 때 쓰임sub : 레지스터나 메모리의 값을 뺄셈할 때 쓰임call : 프로시져를 호출한다.※ 프로시져 : 어떤 행동을 수행하기 위한 일련의 작업 순서 (함수라고 생각하면 될 듯)ret : 호출했던 바로 다음 지점으로 이동cmp : 레지스터와 레지스터 값을 비교nop : 아무 동작도 하지 않는다(No Operation)jmp : 특정한 곳으로 분기 unsigned jump(=)je : jump equaljne : jump not equaljz : jump zer.. 2017. 8. 22.
[리버싱] 어셈블리어에 대해 알아보자 어셈블리어(Assembly language)란? - 기계어와 1대1 대응되는 컴퓨터 프로그램의 저급 언어. 어셈블러(Assember)란? - 어셈블리어로 작성된 소스 코드를 기계어로 변환하는 프로그램. 어셈블리어 구조CPU는 2진수로 모든 것을 처리하는데 어셈블리 명령어들도 2진수로 되어 있다. 하지만 2진수로 된 것은 알아보기가 힘들어 mov, add와 같은 형태로 변환하여 보여진다. mov %eax %ebx는 C언어로 보면 ebx = eax의 경우와 같다. eax에 저장된 값을 ebx에 할당한다. 어셈블리어 문법 (Intel vs AT&T) Intel 방식 - 가독성이 뛰어남. - 윈도우 환경에서 구동. - 오퍼랜드 위치 : mov dest, source - 메모리 오퍼랜드 : mov [eax], [.. 2017. 8. 21.
[리버싱] 디버거 조사(OllyDbg) Debug(디버그)란? - 프로그래머가 자신이 만든 프로그램의 오류를 찾고 그것을 해결하는 과정 올리 디버거 (OllyDbg) 올리 디버거는 디버그 하는데 사용되는 프로그램이다. 올리 디버거는 무료, 저용량, 다수의 플러그인 지원등의 장점으로 많은 사람들이 사용하고 있다. 올리 디버거에 대해 알아보자. 처음 화면은 이러하다. 크게 5개의 영역으로 나눠져 있다. [A]부분은 Code Window라고 부른다. disassembling된 코드와 OP코드를 나타내고 있는 Code부분이다. 여기서 프로그램의 흐름을 체크하고 분석한다. 주소, OP코드, 어셈블리어, Comment 순서로 되어 있다. [B]부분은 Register Window라고 부른다. CPU의 레지스터 상태를 나타내는 부분이다. 이부분을 이용해 각.. 2017. 8. 21.
[리버싱] 리버싱에 대해 알아보자 리버싱에 대해 알아보자 ● 리버싱의 의미 - '역공학' 이라고 하며 어느 특정 물건, 장치 등이 있으면 그것에 대한 구조, 기능, 동작 등을 역으로 따라가며 분석하고 그 원리를 이해하며 부족한 부분을 보완하며 새로운 기능 등을 추가하는 작업. - 해킹 보안에서 리버싱은 침해 사고를 일으키는 바이러스 및 웜을 비롯한 각종 악성코드와 좀비 프로세스에 관련된 실행 코드를 분석하여 소스 코드로 변환해 분석하는 작업을 말하는데, 악성 코드 분석에서 가장 핵심적인 기술로 사용됨 - 리버싱 자체는 불법이 아니지만 리버싱을 이용해서 타인의 기술과 소스등을 무단으로 도용하는 것은 불법. ● 리버싱을 배우는 이유 1. 프로그램의 속을 훤히 들여다 볼 수 있음. 2. 개발/테스트 단계에서 미쳐 발견하지 못한 버그나 취약점 .. 2017. 8. 20.
반응형