본문 바로가기

전체 글

(9)
[Process Hollowing] 프로세스 할로잉 개요 프로세스 할로잉(Process Hollowing)이란, 악성코드가 주로 사용하는 기술로 대상 프로세스의 이미지를 언매핑하고 자신의 이미지를 매핑하는 기술이며 PE 이미지 스위칭(PE Image Switching)으로도 불리기도 한다. 껍질로 사용할 정상적인 프로세스(explorer.exe, notepad.exe, svchost.exe 등)를 하나 생성하고, 생성된 프로세스의 이미지를 언매핑하여 로드된 DLL 이미지만 남겨둔 빈 프로세스로 만들어 버린다. 그리고 자신의 이미지를 빈 프로세스에 매핑 시켜 자신의 이미지를 실행하도록 하는 것이다. 쉽게 비유하자면 도둑이 들어와 집주인을 내쫓고 자신이 그 집의 주인처럼 행세하는 상황이랑 비슷하다. 실제로 코드와 데이터들이 바뀌었고 바뀐 코드를 실행하고 데이..
[Injection] DLL 인젝션 개요 이전 포스트에는 코드 인젝션에 대해 다뤄 보았다. 만약 이전 포스트를 읽지 않았다면 이전 포스트를 먼저 보도록 하자. DLL 인젝션은 인젝션 할 코드 대상 프로세스에 쓰는 것이 아닌 DLL 파일에 인젝션 할 코드를 포함시켜 대상 프로세스가 DLL 파일을 로드하도록 하는 것이다. 스레드 시작 주소를 LoadLibrary() 함수로 설정하고 파라미터는 DLL 파일의 경로를 지정해주는 방법으로 DLL 파일을 주입시킬 수 있다. DLL 인젝션은 코드 인젝션에 비해 난이도는 쉬운 편이고 발견될 확률은 더욱 높은 편이지만 편리성이 뛰어나다는 장점이 있기 때문에 특별한 경우를 제외하고는 대부분의 사람들이 DLL 인젝션을 선호한다. DLL 파일 #include #include BOOL WINAPI DllMain(..
[Injection] 코드 인젝션 개요 악성코드는 보통 악성 실행 파일을 드롭하여 추가적으로 프로세스를 만들어 작동한다. 하지만 몇몇 악성코드는 안티 바이러스 소프트웨어를 우회하기 위해서 또는 감염자에게 쉽게 발견되지 않기 위해서 자기 자신의 코드를 다른 프로세스에 주입시켜 해당 프로세스가 대신하여 악성 행위를 하게 만든다. 인젝션의 방식은 크게 악성코드를 바로 해당 프로세스에 주입시켜 스레드를 만드는 방식과 LoadLibrary() 주소로 스레드를 만들어 해당 프로세스가 악성코드를 포함한 DLL 파일을 로드시키는 방식으로 나눌 수 있다. 스레드를 생성하는 여러 가지 방법들과 DLL 인젝션은 다음에 다루도록 하고 이번 포스트에는 코드 인젝션에 대하여 다뤄 보도록 하겠다. 프로세스 핸들 얻기 /* HANDLE OpenProcess( DWO..
[Reversing.kr] Replace 5번째 문제 Replace 입니다. 문자는 입력할 수 없고 오로지 숫자만을 입력할 수 있는 프로그램이네요. 문제 파일에 ReadMe 텍스트 파일이 포함되어 있지 않는 것을 보아 입력하는 숫자가 문제의 정답임이 확실할 거 같습니다. 이상하게도 문제의 프로그램에 알맞지 않은 숫자를 입력한다면 비정상적으로 예외가 발생하여 프로그램이 종료되는 현상을 보실 수 있습니다. 예를 들어 1234 라는 숫자를 입력했을 때 발생되는 예외를 디버거를 통해 확인해보도록 하겠습니다. 0x0040466F에 있는 mov byte ptr ds:[eax], 90 인스트럭션에서 EAX 값 0x60160A9D에 0x90을 넣으려고 했지만 0x60160A9D 아직 매핑되지 않는 주소이므로 EXCEPTION_ACCESS_VIOLATION 예..
[Reversing.kr] Music Player 4번째 문제 Music Player 입니다. 이번에도 동일하게 문제의 의도를 모르니 ReadMe.txt 텍스트 파일을 읽어봅시다. 구글 번역기의 힘을 빌려 해당 텍스트를 번역한다면 다음과 같은 문장들로 해석 가능합니다. 이 MP3 플레이어는 1 분으로 제한됩니다. 1 분 이상 플레이해야합니다. 1분의 점검 루틴이 있습니다. 모든 점검 루틴을 우회하면 완벽한 플래그가 표시됩니다. 해석된 내용을 보아 이 뮤직 플레이어에는 재생 시간이 1분인지 체크하는 루틴에 의하여 1분까지만 재생을 제공하고 재생 시간을 체크하는 루틴을 우회한다면 문제의 플래그를 표시를 해준다는 것 같습니다. 음악 플레이어를 1분 이상 재생할 시 위와 같이 메시지 박스가 생성되며 음악 재생을 중단 당하게 되네요. 문제의 음악 플레이어는 비주..
[Reversing.kr] Easy Unpack 3번째 문제 Easy Unpack 입니다. 문제의 제목을 보아 언팩 시키는 문제임을 알 수 있지만 아직 어떠한 답을 찾아내는지 모르기 때문에 문제의 압축 파일을 풀어 ReadMe.txt 텍스트 파일을 열어봅시다. ReadMe.txt 텍스트 파일을 읽어보면 Find the OEP, 프로그램 본래의 EntryPoint를 찾아내는 문제입니다. 패킹된 프로그램의 경우 IDA로 분석하는 것에는 한계가 있으므로 디버거로 분석해보도록 하죠. 디버거로 EP에 도착하게 되면 이상한 점 하나를 느끼실 수 있습니다. 이상하게 정상적인 프로그램과는 다르게 .text 섹션이 아닌 .GWan 섹션에 있는 인스트럭션이 나타나네요. .text 섹션에 있는 인스트럭션을 살펴보지만 알 수 없는 인스트럭션 또는 이상한 흐름의 루틴이 존재..
[Reversing.kr] Easy Keygen 2번째 문제 Easy Keygen 입니다. 이번에는 문제로 제공되는 파일은 압축 파일이며 압축 파일에 포함된 파일은 Easy_Keygen.exe 콘솔 프로그램과 ReadMe.txt 텍스트 파일이 입니다. 프로그램과 같이 제공되는 ReadMe.txt 텍스트 파일을 메모장으로 열어보면 위와 같이 시리얼 번호가 "5B134977135E7D13" 일 때의 이름을 찾아야 한다는 힌트를 주고 있습니다. 그 말은 즉 이름과 시리얼 번호를 매칭하는 루틴을 수정하여 크랙하는 것이 아닌 이름과 시리얼 번호를 매칭하는 루틴을 해석하여 문제에서 제공한 시리얼 번호 "5B134977135E7D13"와 매칭되는 이름을 찾아야 합니다. 어셈블리어 코드보다 읽기 쉬운 형식으로 변환해주는 IDA 디컴파일러 기능을 활용하여 main 함..
[Reversing.kr] Easy Crack 1번째 문제 Easy Crack 입니다. 문제의 PE파일을 실행시키면 패스워드를 입력받는 다이얼로그가 생성되는데 올바른 패스워드를 찾거나 패스워드 인증 루틴을 수정해주는 것이 문제의 포인트인 거 같네요. 다이얼로그 박스를 만드는 API, DialogBoxParamA()를 호출하는 함수 0x00401000 부근에 브레이크 포인트를 걸고 실행하면 위와 같은 스택 프레임을 확인할 수 있습니다. INT_PTR DialogBoxParamA( HINSTANCE hInstance, LPCSTR lpTemplateName, HWND hWndParent, DLGPROC lpDialogFunc, LPARAM dwInitParam ); DialogBoxParamA()의 4번째 인자값에는 다이얼로그 박스에 대한 프로시저의 주..