본문 바로가기

공부/리버싱 핵심원리

(12)
메모장 WriteFile 함수 후킹 1. 기술 맵 디버그 테크닉디버그(Debug) 기법을 이용한 API 후킹기술을 이용하여 notepad. exe 프로세스의 kernel32! WriteFile() API를 후킹한다.2. 디버거 설명용어 정리 ① 디버거(Debugger) · 디버깅을 위해 사용하는 프로그램 ② 디버기(Debuggee) - 디버깅 당하는 target 프로그램  디버거 기능: 디버기 명령을 하나씩 수행, 레지스터와 메모리에 대한 모든 접근 권한을 갖는다.  디버거 동작 원리 ① 디버거 프로세스로 등록 ② OS는 디버기에서 디버그 이벤트가 발생하면 디버기의 실행을 멈추고 해당 이벤트를 디버거에게 통보 ③ 디버거는 해당 이벤트를 처리 ④ 디버거는 디버기의 실행을 재개 디버그 이벤트 (Debug Event): 9가지① CREATE_P..
DLL Injection&코드 인젝션 DLL Injection1. DLL 인젝션실행 중인 다른 프로세스에 특정 DLL 파일을 강제로 삽입하는 기술다른 프로세스가 LoadLibrary() API를 호출하도록 명령/유도하여 공격자가 원하는 DLL을 로딩하는 것일반적인 DLL 로딩 vs DLL 인젝션>로딩 대상(Target)이 되는 프로세스가 자신이냐, 아니면 다른 프로세스냐? 2. DLL 인젝션 활용기능 개선 및 버그 패치메시지 후킹API 후킹PC 사용자들을 감시하고 관리하기 위한 응용 프로그램악성 코드 3. DLL 인젝션 구현 방법1) 원격 스레드 생성(CreateRemoteThread() API)2) 레지스트리 이용 (AppInit_DLLs 값)3) 메시지 후킹 (SetWindowsHookEx() API)  코드 인젝션1. 코드 인젝션상대방..
DLL 인젝션 a. 악성 DLL을 인젝션하는 injector.exe 만들기           i. PID를 입력하면 해당 프로세스에 inject.dll을 삽입하도록#include #include #include #include // 함수 원형BOOL InjectDLL(DWORD dwPID, const char* dllPath);int main() { DWORD dwPID; std::string dllPath; // 사용자로부터 PID 입력 받기 std::cout > dwPID; dllPath="(dll 주소)"; // 예시: dllPath="C:\\Users\\BSBS\\Downloads\\inject.dll"; // DLL 삽입 시도 if (InjectDLL(dwPID, d..
Windows 메시지 후킹 1. 훅 Hook, 갈고리 (군사적으로 사용되는) 훅의 개념"훅(hook)을 건다/설치한다 " or "후킹(hooking)한다"→ 중간에 오고가는 정보를 엿보거나 가로채기 위해 검문/검색을 하는 "초소"를 설치한다.2. 메시지 훅 Windows 운영 체제 (GUI 기반): Event Driven 방식      ① 이벤트 발생 (ex. 키 보드 입력 이벤트)           → WM_KEYDOWN 메시지가 OS message queue에 추가된다.      ② OS는 이벤트가 발생한 응용 프로그램을 파악하고,         OS message queue에서 메시지를 읽어와서         해당 응용 프로그램의 message queue에 추가한다.      ③ 응용 프로그램은 message queue에서 ..
인라인 패치 실습 1. unpackme#1.aC 실행abex' chacma #2: visual basic으로 작성된 프로그램시리얼 키(serial key)를 검증하는 프로그램2. 디버깅 시작1. 00401001에서 함수 CALL2. 이후 RETN > OEP로 이동 예상됨 401007 주소 이후는 암호화된 코드.문자열도 암호화되어 있어 찾기 불가능. [F7]로 디버깅 계속하다보면 복호화 루프 1이 나옴루프 1과 루프 2의 복호화 영역이 같음 = 그 영역은 이중으로 인코딩됨 OEP에 BP를 걸고 실행시키면 복호화가 완료된다.그런데 문자열이 문자 하나하나로 보인다.복호화 한 영역을 Ollydbg가 영역의 값을 1byte씩만 읽어낸 탓에 코드가 아닌 데이터로 인식하여 일어난 오류다.[Ctrl + a]를 누르면 정상적으로 보인다...
UPX 언패킹 a. POPAD를 찾는 과정과 POPAD에 브레이크 포인트를 걸어 OEP로 점프하는 과정 실습파일 notepad_upx.exe OEP(Original Entry Point): 패킹된 파일을 실행할 때 시스템 내부에서 자동적으로 하는 언패킹이 끝나면 복구한 원본코드를 동작시켜야 하는데, 이 원본코드의 Entry Point UPX 패커 특징: EP 코드가 PUSHAD~POPAD 명령어로 쌓여 있음 보통 POPAD 명령어 밑에 점프문이 있고, 이 점프문이 OEP로 가는 코드인 경우가 대부분 Search for - All commands 로 POPAD에 B.P를 다 건다 POPAD가 있는 부분 코드 밑에서 JMP를 찾아본다찾았다b. UPX 언패킹 도구 찾아서 언패킹 해보기 upx303w 툴을 다운로드받아 해봤다..
IAT 따라가기 a. MessageBox를 띄우는 exe를 하나 만들고 IAT에서 user32.dll/MessageBox 찾는 과정 b. Python의 pefile 라이브러리를 사용해 간단한 IAT 뷰어 만들기이분 코드를 사용했다.https://goka2052.tistory.com/4 pefile module을 이용하여 간단한 pe parser 구현하기 (pe 구조, pefile, pe 파서)개요 안녕하세요. 이번에 소개해드릴 내용은 pe 파서 구현에 대한 내용입니다. 먼저 PE 구조에 대해 간단히 짚고 넘어가겠습니다. PE는 “Portable Executable”의 약자로, Windows 운영체제에서 사용되는goka2052.tistory.comimport pefileimport structimport datetimed..
PE File Format 1. 소개Windows 운영체제는 기본적으로 파일의 포맷을 PE File Format으로 사용 분류32비트 형태의 실행 파일: PE 또는 PE32 64비트 형태의 실행 파일: PE+ 또는 PE32+ 2. PE File Format 종류종류주요 확장자실행 계열EXE, SCR라이브러리 계열DLL, OCX, CPL, DRV드라이버 계열SYS, VXD오브젝트 파일 계열OBJ32비트 형태의 실행 파일: PE 또는 PE32 64비트 형태의 실행 파일: PE+ 또는 PE32+2.1 기본 구조구성: "PE Header" + "PE Body" 헤더: 이 파일에 대한 대략적인 정보들을 갖고 있음 바디: 실제 데이터들은 바디에 들어가 있음 섹션 헤더: 각 섹션에 대한 파일/메모리의 크기 및 위치, 속성 등이 정의되어 있다...
Lena's Reversing for Newbies 1. 실행: Tut. ReverseMe1.exe 2. 분석 2.1 목표 (1) - 메시지 박스(Nag screen) 제거 >> 방법 1: 메시지 박스 함수를 호출하는 부분을 제거 >> 방법 2: 메시지 박스 함수를 호출하는 "상위 함수"가 호출되지 못하게 하거나, 또는 상위 함수가 바로 리턴하게 한다. 메시지 박스가 나타나는 경우 1) 프로그램이 시작될 때 2) "Part10Tut.ReverseMe" 박스에서 [Nag?] 버튼을 눌렀을 때 실행 >> 방법 1: "Nag Screen" 문자열 검색 >> 방법 2: 메시지 박스 검색: MSVBVM50.rtcMsgBox() 함수 1) 우클릭 > [Search for] > [All intermodular calls] : 프로그램에서 사용하는 API 리스트 2) ..
abex' crackme #2 분석 1. abex' crackme #2 실행 abex' chacma #2: visual basic으로 작성된 프로그램 시리얼 키(serial key)를 검증하는 프로그램 2. visual basic 파일의 특징 2.1 visual basic (VB) 전용 엔진 msvbvm60.dll (Microsoft visual basic virtual machine 6.0) 이라는 전용엔진 사용 2.2 N code vs. P code VB 파일은 컴파일 옵션에 따라 N code와 P code로 컴파일됨 N (Native) code >> 디버거에서 해석이 가능한 IA-32 Instruction을 사용 P (Psuudo) code >> Interpreter 언어 개념 >> VB 엔진으로 가상 머신을 구현하여 자체적으로 해석..