반응형

공부해요/리버싱_핵심원리 51

33. '스텔스' 프로세스

API코드 패치는 프로세스 메모리에 로딩된 라이브러리 이미지에서 후킹을원하는 API 코드 자체를 수정하는 방법API코드 패치는 프로세스 메모리에 로딩된 라이브러리 이미지에서 후킹을원하는 API 코드 자체를 수정하는 방법임API 후킹에서 가장 널리 사용되는 방법 왤까.. 대부분의 API를 후킹할 수 있으니까  API 후킹과 프로세스 은닉API 후킹의 기본API 후킹은 시스템 API 호출을 가로채 동작을 변조하거나 데이터를 필터링하는 기술이다.운영 체제는 API를 통해 시스템 정보를 제공하며, 후킹 기술을 사용하면 이러한 정보의 결과를 조작할 수 있다.ZwQuerySystemInformation API 후킹ZwQuerySystemInformation API는 시스템의 프로세스 정보를 반환하는 데 사용되는 대..

32. 계산기, 한글을 배우다

API 후킹 기법 중 DLL 인젝션 기법이 있음 프로세스에 인젝션된 DLL 파일은 IAT를 후킹해 프로세스에서 호출되는 특정 API의 기능을 변경한다. windows 계산기 프로세스에 사용자 DLL파일을 삽입해서 IAT의 use32 SetWindowTextW() API 주소를 후킹함 후킹당하면 숫자를 한글로 출력.. API 후킹 기법하기로 했으면 후킹 대상 API를 선정해야된다. 그러려먼 후킹을 원하는 기능을 제공하는 API를 찾는거는 어렵다..파일 생성: kernel32!CreateFile()레지스트리 생성: advapi32!RegCreateKeyEx()네트워크 접속: kernel32!ws2_32!connect()올리디버거로 열어서보면 일케 두개 API 찾을 수 있음 저 젤위에거랑 맨아래 text드간거..

31. 디버거 이야기

OllyDbg http://www.ollydbg.de OllyDbg v1.10www.ollydbg.de편리하고 가볍고 빠르고 무료임 근데 32비트에서만 됨 IDA Pro http://www.hex-rays.com/idapro ida-proDiscover IDA Pro, the industry standard for code analysis and vulnerability research. Powerful disassembler, debugger, and decompiler in one tool. Get started now!hex-rays.com현재 최고의 디스어셈블러 디버건데 비쌈 복잡함 초기 로딩 시간도 많이걸림 WinDbg https://learn.microsoft.com/ko-kr/windows-..

30. 메모장 WriteFile() 후킹

디버거(Debugger) - 디버깅 프로그램 디버기(Debuggee) - 디버깅 당하는 프로그램 디버거 기능 디버기가 올바르게 실행되는지 확인하고 예상치 못한 프로그램의 오류를 발견하는 것 디버거의 동작 원리 디버거 프로세스로 등록되면 운영체제는 디버기에서 디버그 이벤트가 발생할 때 디버기의 실행을 멈추고 해당 이벤트를 디버거에게 통보 exception도 디버그 이벤트에 해당된다. 만약에 디버깅 중 아니였으면 그냥 자체예외처리 아니면 OS의 예외 처리 루틴이 됨. 디버그 이벤트 종류 • EXCEPTION_DEBUG_EVENT: 요게 디버깅 관련 이벤트.. • CREATE_THREAD_DEBUG_EVENT • CREATE_PROCESS_DEBUG_EVENT • EXIT_THREAD_DEBUG_EVENT •..

29. API 후킹: 리버싱의 '꽃'

후킹? 정보 가로채기, 실행 흐름 변경하기 -> 원래와는 다른 기능을 제공함 후킹의 과정 - 디스어셈블러/디버거를 이용해 프로그램의 구조와 동작 원리를 파악 - 버그 수정 또는 기능 개선에 필요한 훅(Hook) 코드를 개발 - 실행 파일과 프로세슷 메모리를 자유롭게 조작해 훅 코드 설치 Win32 API를 후킹하는걸 API 후킹이라 함. 메시지 후킹이랑 같이 젤 많이 사용된다. API란? 애플리케이션이 시스템 자원을 쓰려면 시스템 커널에 요청해야됨. 이 때 Win32 API를 이용한다. 실제 애플리케이션 코드 실행하려면 DLL 로딩되는데 모든 프로세스에는 기본적으로 kernel32.dll이 로딩되고 이거는 ntdll.dll을 로딩시킨다. API 후킹 Win32 API 호출을 중간에서 가로채서 제어권을 얻..

28. 어셈블리 언어를 이용한 Code 인젝션

어셈블리 프로그래밍올리디버거에서 지원하는 assenble 기능을 이용해서 프로그래밍.. OllyDbg의 Assemble 명령asmtest.txt를 올리디버거로 열어서 코드 섹션의 맨 윗부분(401000) 봄여기 주소에 커서 올리고 마우스 우클릭해서 'New origin here[Ctrl+Gray]항목 누르면 EIP가 해당 주소로 변함 여기서 스페이스 누르면 어셈블 입력창 떠서 간단한 어셈블리 프로그래밍 할 수 있음  ThreadProc() 작성C로만든 ThreadProc()함수와의 차이점은 Code 사이에 필요한 Data를 포함하는 것CALL 명령어 넣고.. ASCII 항목에는 ReverseCore 문자열 넣음 이때 문자열은 반드시 NULL로 끝나야하 하니 hex 에서 00을 추가함..이 명령 하면 코드..

27. Code 인젝션

Code 인젝션상대방 프로세스에 독립 실행 코드를 삽입한 후 실행하는 기법일반적으로CreateRemoteThread() API를 이용해 원격 스레드의 형태로 실행하므로 Thread 인젝션이라도고 함. DLL 인젝션 vs Code 인젝션DWORD WINAPI ThreadProc(LPVOID lParam){ MessageBoxAa(NULL, "www.reversecore,com", "ReverseCore", MB_OK); return 0;}windows 메시지 박스 출력하는 코드 DLL인젝션이면 위에 코드를 DLL 파일 형태로 만들고 다른 프로세스에 인젝션하면됨 디버거로 열면 이렇게 나온다. 10009290, 1000929C 주소의 문자열을 확인하면 DLL의 데이터 섹션에 위치한 문자열을 가르키..

26. PE Tools

프로세스 메모리 덤프, PE 헤더 Editing, PE Rebuilding 기능 가짐 홈페이지: http://petools.org.ru다운경로: http://petools.org.ru/updates/pt_update_08_rc7.zip이라는데.. 사이트가 없어진듯 https://petoolse.github.io/petools/ PE ToolsPortable executable (PE) manipulation toolkitpetoolse.github.io 이걸로 받음 PE Tools 주된 목적은 프로세스 메모리 덤프   프로세스 메모리 덤프덤프란 메모리의 내용을 그대로 파일로 저장시킨다는 뜻주로 실행 중인 프로세스의 메모리 내용을 확인할 때 자주사용한다..실행 압축 파일의 경우 메모리에서는 압축 해제된 상..

25. PE 패치를 이용한 DLL 로딩

대상 프로그램의 실행 파일을 직접 수정하여 DLL을 강제로 로딩하는 방법: 한 번 적용해두면 별도의 인젝션 과정 없이 프로세스가 시작할 때마다 원하는 DLL을 로딩하게 만들 수 있음, 일종의 크랙TextView.exe의 참조 DLL:KERNEL32.dll, USER32.dll, GDI32.dll, SHELL32.dll 등의 주요 Windows DLL을 참조하며, 이들은 프로그램이 Windows API 기능을 사용하는 데 필요.이러한 DLL을 통해 파일 관리, 메모리 할당, 창 처리, 그래픽 렌더링 등 다양한 기본적인 운영 체제 기능을 호출 가능  IMPORT Directory Table의 구조:IMAGE_IMPORT_DESCRIPTOR 구조체에 의해 구성되며, 각 DLL에 대한 정보를 포함.Origina..

24. DLL 이젝션

DLL Injection DLL Injection은 특정 DLL을 다른 프로세스의 주소 공간에 강제로 삽입하여 해당 프로세스의 동작을 조작하는 기술임. 주로 프로그램을 모니터링하거나 조작하는 목적에서 사용되며, 악성 코드가 다른 프로그램에 삽입되어 악의적인 동작을 수행하도록 하는 데 악용되기도 함. DLL Injection의 동작 원리대표적인 DLL Injection 방식으로 CreateRemoteThread() API를 이용한 방법이 있음. 이 방식은 대상 프로세스로 하여금 특정 DLL을 강제로 로드하도록 유도함. 주요 동작 단계는 다음과 같음.1. LoadLibrary() 호출 유도CreateRemoteThread() API를 사용하여 대상 프로세스에 새로운 스레드를 생성함.새롭게 생성된 스레드가 L..

반응형