리버싱 42

Process Hollowing 기법 실습

#Process Hollowing #Malware - Process Hollowing 이란? Process Hollowing 은 간략히 설명하면, 정상적인 타겟파일을 suspended 상태의 프로세스로 실행 시킨 다음, 해당 프로세스 안에 악성코드 데이터를 삽입시키고 suspend 상태를 해제함과 동시에 악성코드를 정상 프로세스로 둔갑시켜 실행시키는 방식이다. CreateProcess -> NtUnmapViewOfSection -> VirtualAlloc -> WriteProcessMemory -> SetContextThread -> ResumeThread 의 흐름으로 진행된다. - 예제로 보는 Process Hollowing - OS 환경 Windows 10(x86) - 소스 #include #incl..

[WinAPI] 리소스를 분석, 해체 해보자

#리소스 분석 API #FindResource #LoadResource #LockResource #SizeOfResource 악성코드에 리소스를 심어서 숙주파일을 뽑아내어 실행시키는 악성코드를 분석해보았다. 관련 API가 빈번히 나오는 것 같아서 정리해본다. 1. HRSRC FindResource( HMODULE hModule, LPCSTR lpName, LPCSTR lpType); #include 로 불러올 수 있다. 껍데기 파일에서 숙주 파일인 리소스를 찾는 함수이다. 인자들의 조건이 맞아떨어지면 리소스 정보 block 에 대한 핸들 을 리턴한다. Return value 에 대한 msdn 설명 Type: HRSRC If the function succeeds, the return value is a ..

ProcMon "Unable to load Process Monitor device driver" 에러

#ProcessMonitor #VMware #ProcMon Win7 Ultimate x64 버전이 깔린 VMware 에서 Process Monitor 가 실행이 원활히 안되었다. 해당 오류창을 뿜뿜 뿜어냈는데, 알아보니 윈도우 7 특정버전의 보안업데이트가 미비하여 실행이 안되는거라고... 아래 링크 파일 해당 VM 에서 실행시키면 된다. Download Security Update for Windows 7 for x64-based Systems (KB3033929)

[WinAPI] 프로세스 순회해보자

#WinAPI #프로세스 탐색 1. EnumProcesses(DWORD *lpidProcess, DWORD cb, LPDWORD lpcbNeeded); #include 로 불러와서 실행가능하다. 현재 실행 중인 프로세스들의 PID 를 불러와서 배열에 저장한다. [인자설명] lpidProcess : 실행 중인 프로세스들의 PID 를 저장할 DWORD 배열이다. cb : 첫 번째 인자 배열의 사이즈이다. lpcbNeeded : 전체 프로세스 PID 들의 총 바이트를 저장할 DWORD 변수이다. ( DWORD(4) * 프로세스들의 수 ) = ( 총 바이트 ) 2. HANDLE OpenProcess(DWORD dwDesiredAccess, BOOL bInheritHandle, DWORD dwProcessId);..

[ Reversing.kr ] Ransomware

Ransomware #crack me #custom crypto 오랜만에 reversing.kr 을 풀어보았다. 랜섬웨어라고 하는데... key를 알맞게 입력하면 압축파일로 같이 준 file을 올바르게 복호화 해주나보다. (키 값의 옳고 그름에 관계없이 일단 어떤 연산을 거쳐 복호화 해주긴한다.) 일단 처음 바이너리는 UPX로 패킹되어있다는 것을 알 수 있다. upx 언패커로 패킹을 해제하고... IDA에 올려보면 hex ray를 방해하기 위한 용도인지 쓸데없는 쓰레기 코드들이 있다. 그래서인지 main함수가 너무 크다며, 디컴파일이 안된다. 고민을 하다가 idc 함수를 이용해서 다 nop 처리 후, main함수 프롤로그를 옮기기로 하였다. 아래는 패치코드이다. addr=0x4135F4 end_addr=..

[Hack.lu 2019] no_risc_no_future

no_risc_no_future #mips #pwn ※ 원본 Write Up : https://github.com/goseungduk/CTF_WriteUp/tree/master/Hack.lu_2019/pwn/no_risc_no_future제목 그대로 risc 형식의 mips 아키텍쳐로 된 바이너리에 대한 pwnable 문제이다. Ghidra로 열어본 바이너리는 이런 모습이다. 64바이트짜리 배열에 256바이트를 입력할 수 있게 해준다. 그리고 입력한 버퍼를 출력시켜준다. 그리고 Canary 외에는 별다른 보호기법도 걸려있지 않는 것으로 보아, buffer overflow 이후, 쉘코드를 이용하여 쉘을 얻어내면 될 것 같다. 대강 순서는 이러하다. 1. puts 함수를 이용해서 canary를 leak 2...

<보안 study>/CTFs 2019.12.21

[SECCON 2019] Coffee_break

COFFEE_BREAK #crypto #reversing※ 원본 Write Up : https://github.com/goseungduk/CTF_WriteUp/tree/master/SECCON_2019/crypto/coffee_break 간단히 풀 수 있었던 크립토(?) 라기엔 리버싱에 가까운 문제였다. The program "encrypt.py" gets one string argument and outputs ciphertext. Example: $ python encrypt.py "test_text" gYYpbhlXwuM59PtV1qctnQ== The following text is ciphertext with "encrypt.py". FyRyZNBO2MG6ncd3hEkC/yeYKUseI/CxYoZ..

<보안 study>/CTFs 2019.12.21

[TokyoWesterns 2019] EASY_CRACK_ME

EASY_CRACK_ME #z3 #reversing ※ 원본 Write Up : https://github.com/goseungduk/CTF_WriteUp/tree/master/TokyoWesterns_2019/reverse/easy_crack_me 단순한 Crack Me 유형의 문제입니다. 인자로 플래그를 받는데, 맞지않는 값을 넣으면 incorrect를 출력시켜줍니다. 바이너리를 뜯어보면 알겠지만 플래그 인증과정이 총 8개정도 있고, 모든 조건에 다 맞아야 정확한 플래그로 인지합니다. 첫 번째 조건 플래그길이는 총 39바이트여야하며, TWCTF{ 로 시작하여 } 로 끝나야합니다. 두 번째 조건 우선 0123456789abcdef 의 표본이 될 문자열이 주어집니다. 그리고 반복문으로 순회하면서 인자로 ..

<보안 study>/CTFs 2019.12.21
반응형