study/리버싱6 3.1 바이트 오더링 바이트 오더링은 데이터를 저장하는 방식이다. 바이트 오더링 방식에는 빅 엔디언(Big Endian)과 리틀 엔디언(Little Endian) 방식이 있다. 아래 예제를 확인해 보자. BYTE b = 0x12; WORD w = 0x1234; DWORD dw = 0x12345678; char str[] = "abc"; TYPE Name SIZE 빅 엔디언 리틀 엔디언 BYTE b 1 [12] [12] WORD w 2 [12][34] [34][12] DWORD dw 4 [12][34][56][78] [78][56][34][12] char [] str 6 [61][62][63][00] [61][62][63][00] BYTE 타입인 b 변수를 저장하는 방법에는 차이가 없다. 그러나 2바이트 이상 저장하는 WORD.. study/리버싱 2021. 12. 17. 2.5 "Hello World!" 문자열 패치 0. 패치 패치 기능을 이용해 프로그램의 기능을 수정하거나 추가할 수 있다. 패치 대상은 파일, 메모리가 될 수 있다. 지금은 "Hello World" 출력을 바꾸어 보겠다. main 함수 시작 주소까지 실행합니다. 00401000부터 0040104E까지가 main 함수입니다. 1. 문자열을 패치하는 방법 두 가지 방법 문자열 버퍼를 직접 수정하는 방법 다른 메모리 영역에 새로운 문자열을 생성하여 전달 1) 문자열 버퍼를 직접 수정하는 방법 MessageBoxW 함수의 전달인자 4092A0의 문자열 ("Hello World") 버퍼를 직접 수정하는 방법이다. 그러기 위해 4092A0으로 이동해 보자[Ctrl + G]. 커서가 올라가 있는 window에 따라 뷰가 달라진다. dump window를 확인해 .. study/리버싱 2021. 12. 1. 2-2 HelloWorld.exe 디버깅 0. main() 함수 찾기 앞에서 JMP로 들어왔던 0040104F으로 들어오면 많은 함수호출을 볼 수 있다. 여기 안에서 main()을 찾아보자. 1. win32API F7(step in)로 함수호출문 안으로 들어가다 보면 반복문 때문에 탈출하기 어려운 경우가 있다. 004010E4 같은 경우가 이와 같다. Ctrl + F9로 함수 탈출할 때 시간이 오래 걸리기 때문에 지금은 step over(F8)로 넘어가자. 2. CALL 00401000 함수 호출을 돌아다니다 보면 CALL 00401000을 볼 수 있다. 3. CALL 00401000 내부 드디어 우리가 찾던 main 함수를 찾았다. 오른쪽 설명을 보면 파라미터가 "www.reversecore.com', "Hello World!"인 것을 확인할.. study/리버싱 2021. 11. 11. 2-1. HelloWorld.exe 디버깅 0. 디버깅 목표 HelloWorld.exe 실행 파일을 디버깅하여 어셈블리 언로로 변환된 main() 함수를 찾자. 1. 디버깅 시작 지금 보이는 이미지는 ollydbg 실행 화면이다. 화면 구성에 대해 알아보자. Code window 기본적으로 disassembly code 를 표시하여 각종 comment, label을 보여주며, 코드를 분석하여 loop, jump 위치 등의 정보를 표시한다. Register window CPU register 값을 실시간으로 표시하며 특정 register 값 수정이 가능하다 Dump window 프로세스에서 원하는 memory 주소 위치를 Hex와 ASCII/유니코드 값으로 표시하고 수정도 가능하다. Stack window ESP register가 가리키는 프로세스.. study/리버싱 2021. 11. 6. 정적 분석, 동적 분석, Source Code, Hex Code, Assembly Code 0. 정적 분석 정적 분석은 파일을 실행하지 않고 분석하는 방법 중 한 가지이다. 파일의 종류(EXE, DLI, DOC, ZIP 등), 크기, 헤더(PE)정보, Import, Export API, 내부 문자열, 실행 압축 여부, 등록 정보, 디버킹 정보, 디지털 인정서 등의 다양한 내용을 확인하는 것이다. 디스어셈플리를 활용해 내부 코드의 구조를 파악하는 것도 정적 분석의 범주에 들어간다. 정적 분석으로 얻은 정보들은 이후 동적 분석에 방법에 좋은 참고가 된다. 1. 동적 분석 파일을 직접 실행시켜 그 행위를 분석한다. 디버깅을 통해 코드의 흐름, 메모리 상태 등을 자세히 살펴 볼 수 있다. 2. Source Code 우리가 IDE를 통해 작성하는 코드를 말한다. 프로그래밍 언어별로 정의된 문법에 따라 .. study/리버싱 2021. 11. 5. 1. 프로그램 실행 구조 0. 프로그램 동작 우리가 윈도우를 사용하다 보면 exe파일을 보게 될 것이다. 더블클릭해서 누르면 프로그램이 실행되는 파일이다. 이 exe파일은 컴파일을 통해 실행 가능한 파일로 만들어지는데 이것을 윈도우에서 PE(Portable Executable)파일이라고 부른다. 1. PE 파일이란? 위에 설명이 되어있듯 휴대할 수 있고 실행 가능한 파일을 말한다. 이 PE 파일에는 프로그램을 실행하는 데 필요한 기본 정보와 파일을 메모리 어디에 저장해야 할지 알려주는 배치 정보가 들어있다. PE파일에는 헤더(Header), 보디(Body)로 구성되는데, 헤더에는 프로그램 실행에 관한 주요 정보가 들어있고 바디에는 코드와 데이터가 들어있다. PE 파일은 exe 뿐만 아니라 dll, ocx 등이 더 있다. 2. 헤.. study/리버싱 2021. 3. 16. 이전 1 다음