본문 바로가기

Reversing23

[리버싱 핵심 원리] 24장, DLL 이젝션 DLL 이젝션(DLL Ejection)은 프로세스에 강제로 삽입한 DLL을 빼내는 기법이다. 기본 동작 원리는 CreateRemoteThread API를 이용한 DLL 인젝션(Injection)의 동작원리와 같다. DLL 이젝션 동작 원리 CreateRemoteThread() API를 이용한 DLL 인젝션의 동작원리는 아래와 같다. 대상 프로세스로 하여금 LoadLibrary() API를 호출하도록 만드는 것 마찬가지로 DLL 이젝션의 동작 원리도 아래와 같다. 대상 프로세스로 하여금 FreeLibrary() API를 호출하도록 만드는 것 즉 CreateRemoteThread()의 IpStartAddress 파라미터에 FreeLibrary() API 주소를 넘겨주고, IpParameter 파라미터에 이젝.. 2021. 12. 2.
[리눅스 핵심 원리] 23장, DLL 인젝션 다른 프로세스에 침투하는 가장 쉽고 강력한 방법인 DLL 인젝션에 대해 살펴보자! DLL 인젝션 기법을 통하여 API 후킹, 프로그램 기능 개성 및 버그 패치 등의 작업을 수행할 수 있다. DLL 인젝션 DLL 인젝션이란 실행 중인 다른 프로세스에 특정 DLL 파일을 강제로 삽입하는 것이라고 말할 수 있다. 조금 더 기술적으로 표현하자면 다른 프로세스에게 LoadLibrary() API를 스스로 호출하도록 명령하여 사용자가 원하는 DLL을 로딩(Loading)하는 것이다. DLL 인젝션이 일반적인 DLL 로딩과 다른 점은 로딩 대상이 되는 프로세스가 나 자신이냐 아니면 다른 프로세스냐 하는 것이다. notepad 프로세스에 myhack.dll을 강제로 삽입했다. 이처럼 notepad.exe 프로세스에 로.. 2021. 12. 2.
[리버싱 핵심 원리] 27장, Code 인젝션 Code Injection Code Injection이란 상대방 프로세스에 독립 실행 코드를 삽입한 후 실행하는 기법이다. 일반적으로 CreateRemoteThread() API를 이용하여 원격 스레드 형태로 실행하므로 Thread 인젝션이라고도 얘기한다. 인젝션 대상이 되는 target.exe 프로세스에 코드와 데이터를 삽입한다. 이때 코드의 형식은 스레드 프로시저(Thread Procedure) 형식으로 해주고, 코드에서 사용되는 데이터는 스레드의 파라미터로 전달한다. 즉 코드와 데이터를 각각 인젝션해주는 것이다. 이와 같이 개념은 간단하지만 구현에 있어서 주의해야 할 내용이 있다. Code 인젝션 구현의 주의사항에 대하서는 DLL 인젝션과 비교하여 설명할 수 있다. DLL 인젝션 vs Code 인젝.. 2021. 12. 2.
[리버싱 핵심 원리] 21장, Windows 메시지 후킹 훅이란, 우리말로는 갈고리, 낚시바늘 정도의 뜻을 가지고 있는데, 원하는 것을 낚아채고 싶을 때 사용하는 도구이다. 이 갈고리의 뜻이 확장되어서 정보를 엿보거나 가로채는 경우에도 훅이라는 말을 쓴다. 메시지 훅 Windows 운영체제는 GUI(Graphic User Interface)를 제공하고, 이는 Event Driven 방식으로 동작합니다. 키보드/마우스를 이용하여 메뉴 선택, 버튼 선택, 마우스 이동, 창 크기 변경, 창 위치 이동 등의 작업은 모두 이벤트(Event)입니다. 이런 이벤트가 발생할 때 OS는 미리 정의된 메시지를 해당 응용 프로그램으로 통보한다. 응용 프로그램은 해당 메시지를 분석하여 필요한 작업을 진행하는 것입니다. 즉, 키보드를 입력할 때에도 OS로부터 응용 프로그램으로 메시지.. 2021. 11. 24.
[리버싱 핵심 원리] 19장, UPack 디버깅 - OEP 찾기 19장, UPack 디버깅 - OEP 찾기 19.1. OllyDbg 실행 에러 UPack으로 압축된 메모장(notepad_upack.exe) 파일을 OllyDbg로 열어보면 에러 메시지가 보인다. UPack은 IMAGE_OPTIONAL_HEADER에서 NumberOfRvaAndSizes 값을 A로 변경(기본 값 10)하기 때문에 OllyDbg의 초기 검증 과정에서 에러 메시지가 출력되는 것이다. 위 에러 때문에 OllyDbg는 EP로 가지 못하고, 에러 메세지와 같이 ntdll.dll 영역에서 멈춰버린다. OllyDbg의 버그(혹은 엄격한 PE 체크) 때문에 이런 현상이 발생한 것이므로 강제로 EP를 설정해줘야 한다. 그럼 먼저 PE가 어디인지 알아야 하기 때문에 Stud_EP를 이용한다. Imageba.. 2020. 11. 19.
[리버싱 핵심 원리] 18장, UPack PE 헤더 상세 분석 18장, UPack PE 헤더 상세 분석 UPack으로 압축한 notepad를 PEView로 열었을 때, PE HEADER를 제대로 읽어들이지 못한다. IMAGE_OPTIONAL_HEADER, IMAGE_SECTION_HEADER 등의 정보들이 없다. HxD로 notepad와 Upack을 살펴보니 차이점이 뚜렸하다. 먼저 MZ 뒤에 써있는 KERNEL32.DLL MZ와 PE 시그니처간의 간격이 너무 가깝기도 하다. DOS Stub 영역이 없어서 그런 것 같다. 18.5. UPack의 PE 헤더 분석 18.5.1 헤더 겹쳐쓰기 IMAGE_DOS_HEADER와 IMAGE_NT_HEADERS를 겹쳐쓰는 기법이다. 헤더를 겹처씀으로서 헤더 공간을 절약할 수 있으며 복잡성을 증가시켜 분석을 어렵게 만든다. Stu.. 2020. 11. 15.