목록Reversing (16)
Study
17. 실행 파일에서 .reloc 섹션 제거하기 17.1 .reloc 섹션 - exe 형식의 PE 파일에서 Base Relocation Table 항목은 실행에 큰 영향을 미치지 않는다. - PEView와 HxD만 가지고도 수동으로 충분히 제거가 가능하다. 17.2 .reloc 제거 ▶ .reloc 섹션을 제거하는 순서 ① .reloc 섹션 헤더 정리 ② .reloc 섹션 제거 ③ IMAGE_FILE_HEADER 수정 ④ IMAGE_OPTIONAL_HEADER 수정 17.2.1 .reloc 섹션 헤더 정리 섹션 헤더의 범위는 270~297이다. 이 부분을 HxD를 이용하여 0으로 덮어쓴다. 17.2.2 .reloc 섹션 제거 .reloc 헤더를 보면 file에서 .reloc 섹션의 범위는 C000~D00..
16. Base Relocation Table 16.1 PE 재배치 - PE 파일(EXE/DLL/SYS)이 프로세스 가상 메모리에 로딩될 때 PE 헤더의 ImageBase 주소에 로딩된다. - DLL(SYS) 파일의 경우 ImageBase 위치에 이미 다른 DLL(SYS) 파일이 로딩되어 있다면 다른 비어 있는 주소 공간에 로딩된다. - PE 파일이 ImageBase에 로딩되지 못하고 다른 주소에 로딩될 때 수행되는 일련의 작업을 의미한다. 16.1.1 dll/sys 이미지 베이스 10000000을 갖는 a와 b 두 dll이 있다. a.dll이 먼저 로드되어 있을 때 b.dll을 로드하려 하면 a.dll가 로드된 주소를 포기하고 다른 주소를 찾아 로드된다. ex) 메모장을 로드한 후 실행시키고 dll 인..
15. UPX 실행 압축된 notepad 디버깅 15.1 압축코드 소개 ▲ 파일을 키면 UPX EP 코드(1015330)가 나타난다. 이는 UPX1 영역에 속하는 주소이며 notepad 프로그램을 실행시키는 코드의 진입점이 아니라 원본 코드를 압축 해제하는 코드의 EP 코드이다. ※ 참고 ① UPX는 압축된 원본 코드와 압축 해제 코드를 UPX1 섹션에 저장하고, UPX0 섹션에 압축을 풀어 원본 코드를 올린다는 것을 14장에서 배웠다. ② .rsrc 섹션은 압축이 되지 않고 원본 그대로 남아있는데, 그 이유는 파일의 아이콘, 이미지, IAT 관련 정보를 담고 있기 때문이다. 실행 이전에 필요한 리소스를 담고 있으므로 압축해서는 안 된다. 원본 코드를 복원시키는 코드는 UPX1의 마지막 부분에 있으며 1..
13. PE File 13.3 IAT ▶ IAT란? 프로그램이 어떤 라이브러리에서 어떤 함수를 사용하고 있는지를 기술한 테이블 13.3.1 DLL ▶ DLL이란? 16비트 DOS 시절은 어떠한 라이브러리 함수를 사용하고자 할 때 라이브러리에서 해당 함수의 binary 코드를 그대로 가져와 프로그램에 포함시켰다. 그러나 32비트 Windows 환경에서는 멀티태스킹을 지원하기 때문에 여러 곳에서 자주 사용되는 라이브러리 함수를 매번 프로그램에 포함시키는 방법이 비효율적이 되어버렸다. 또한 Windows 환경을 제대로 지원하기 위해서는 매우 많은 라이브러리 함수가 필요하다. (process, memory, window, message 등) 따라서 심각한 자원낭비를 방지하기 위해 고안해낸 방법이 DLL 방법이다..
13. PE File 13.1 PE File이란? - Windows 운영체제에서 사용되는 실행 파일 형식. - 기본적으로 32비트 형태의 실행 파일을 의미하며 PE32라는 용어를 사용하기도 한다. - 64비트 형태의 실행 파일은 PE+ 또는 PE32+라고 부르며 PE 파일의 확장 형태이다. 실행 계열 .scr - Screen Saver의 약자. 윈도우 화면 보호기 파일. 이 파일은 혼자서도 실행된다. - 윈도우 디렉터리나 System 디렉터리에 설치되며, 디스플레이 등록정보에서 설정하여 사용한다. .exe - Executable의 약자로 가장 기본적인 실행파일. - 그 외 실행 파일로는 .bat, .com등이 있다. 드라이버 계열 .sys - System의 약자로 시스템 운영에 꼭 필요한 파일이며, co..
07. Stack Frame 7.1 Stack Frame이란? ESP(스택 포인터)가 아닌 EBP(베이스 포인터)를 사용하여 스택 내의 로컬 변수, 파라미터, 복귀 주소에 접근하는 기법 - ESP는 프로그램 실행 과정 중 스택 내에서 수시로 변경되기 때문에 이를 기준으로 프로그램을 작성하면 프로그래머도 힘들고, CPU도 정확한 위치를 참고할 때 어려움이 있다. - 따라서 EBP를 이용하여 함수가 실행되는 동안 일정한 위치를 유지해주면 그것을 기준으로 안전하게 해당 함수의 변수, 파라미터, 복귀 주소에 접근할 수 있다. 7.2 StackFrame.exe 분석 예제 코드를 준비하고 OllyDbg에서 열어 main()을 호출하는 CALL 명령어부터 보기로 한다. ▲ CALL StackFra.00401020 m..