리버싱 핵심원리4 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. 정적 분석, 동적 분석, 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 다음