2021. 5. 3. 14:09ㆍ리버싱,악성코드분석
DLL 인젝션을 동작시키는 프로그램 분석
1. WINDBG로 해당 프로그램 실행 후 EP로 이동하고 함수 호출단위로 분석
WinExec함수를 호출하고있고 인자값을 살펴보면 외부연결을통해
인젝션할 msg.dll파일을 다운로드 하고있다.
2. 다음호출은 함수의 pid를 얻는 함수인데
인자값으로 explorer.exe가 들어가므로 explorer.exe의 pid를 얻어 dll을 인젝션 하려는것으로 보인다.
step over로 함수를 실행한후 확인해보면 explorer.exe의 pid 값은 3892인 것을 알수있다.
process explorer 툴을 이용하여 확인해볼 수도 있음.
3. printf 같은 분석에 중요하지않은 내용들은 step out으로 빠져나가 빠르게 분석하는 것이 좋다.
4. 다음 함수는 _strlen함수를 호출하는데 인자값은 dll경로의 값이 들어가 있고 반환값은 해당 경로의 길이값이다.
5. 다음으로 openprocess함수를 호출하고 이함수에서 중요한 인자는 3번쨰 pid 값이다
explorer.exe를 오픈하는것을 알수있음.
함수를 실행하면 eax에 000000b4를 반환하는데 이값은 프로세스의 explorer.exe 핸들값이다.
6. 다음으로 실행되는 함수는 virtualAllocEx이고 첫번째 인자는 handle, 세번째 인자는 size, 네번째 인자는 protect이다. 00001000은 메모리에 read/write할수 있는 권한임.
함수의 반환값은 할당된 메모리 주소인데 explorer.exe에 메모리할당하였으므로 이 프로세스에서는 확인이 불가능하다.
해당메모리를 확인하기위해 새로 디버거를 열어서 실행중인 프로세스를 열기위해 attach to a process를 클릭.
pid - 3892인 explorer.exe를 열어서 할당된 메모리주소를 확인가능.
7. 다음 호출된 함수는 WriteProcessMemory 이고 특정프로세스에 값을 쓰는 행위를 한다.
첫번째 인자값은 값을쓸 대상 프로세스의 handle, 두번째 인자값은 주소값, 세번째 인자값은 쓸려는 값의 주소
네번쨰 인자값은 size
explorer.exe에서 메모리에 잘써져있는지 확인이 가능함.
pid와 할당한 메모리가 달라진이유는 글을쓰면서 다시 실행시켰기 떄문이다.
8. 다음 함수는 함수의 모듈값을 구하는 getmodulehandle이 실행됨.
첫번쨰 인자값으로는 모듈의 이름이 들어간다. 반환값은 핸들값임.
핸들값은 모듈이 메모리에 올라갈때 base주소를 의미함.
9. 다음호출함수는 특정함수의 주소를 가져오기위한 getprocaddress 함수를 호출함.
1번째 인자는 kernel32의 핸들값, 2번째 인자는 문자열인데 loadlibrary의 주소이다.
함수를 실행하고 반환값 eax 주소를 보면 loadlibrary 임을 확인가능하다.
10. 다음실행함수는 다른 프로세스에 쓰레드를 생성하는 createremotethread 이다.
1번째인자는 생성하려는 프로세스의 핸들값, ,2,3번째인자는 일반적으로 null값이 들어감
4번째인자는 쓰레드를 생성해서 실행할 함수(loadlibrary), 5번째인자는 실행 함수에 들어갈 인자값.
loadlibrary에 들어가야하는 값은 dll경로의 문자열이여야 하므로 이전에 할당한 메모리에 dll경로를 쓴 주소가 들어 가게됨
이 함수가 실행되면 explorer.exe에 dll이 로드되고 dllmain()이 실행된다.
'리버싱,악성코드분석' 카테고리의 다른 글
문서형 악성코드 이해 (0) | 2021.05.06 |
---|---|
UAC 우회기법 (0) | 2021.05.06 |
UAC 이해 (0) | 2021.05.06 |
DLL 인젝션 이해 (0) | 2021.05.03 |
PE 파일 포멧 이해 (0) | 2021.04.30 |