본문 바로가기
Reversing/Reversing

code injection에서 shellcode to exe

by bbolmin 2014. 1. 15.



[*] 악성코드가 코드 인젝션으로 악성 행위를 하는 경우 인젝션된 코드를 확인할 때 




(1) shellcode -> exe로 해주는 사이트를 이용


http://sandsprite.com/shellcode_2_exe.php




(2) 코드를 읽어서 jmp시켜 주는 간단한 CodeLoader 작성



CodeLoader.exe



- 첫번째 인자 : shellcode 파일 

- 두번째 인자 : JIT위해 코드의 처음에 \xCC를 삽입 할지




[source]


#include "Windows.h"
#include "stdio.h"
#include "tchar.h"

int _tmain(int argc, TCHAR* argv[])
{
	PVOID pCode;
	DWORD dwFileSize, dwRead;
	HANDLE hFile;

	if (argc != 3)
	{
		fputs("[*] Usage : < Program > < Code File > < \\xCC (y/n) >\n", stderr);
		exit(0);
	}

	hFile = CreateFile(argv[1], GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
	dwFileSize = GetFileSize(hFile, 0);		// 파일 사이즈 구하기
	pCode = VirtualAlloc(NULL, dwFileSize + 1, MEM_RESERVE | MEM_COMMIT,  PAGE_EXECUTE_READWRITE);	//실행 권한이 있는 메모리 할당
	ReadFile(hFile, (char*)pCode+1, dwFileSize, &dwRead, NULL);
	CloseHandle(hFile);

	if ((_tcscmp(argv[2], TEXT("y")) == 0) || (_tcscmp(argv[2], TEXT("Y")) == 0) )
		((char*)pCode)[0] = '\xCC';	//첫 바이트에 BP코드 \xCC삽입
	else
		((char*)pCode)[0] = '\x90';	//첫 바이트에 nop코드 삽입

	__asm
	{
		jmp pCode;
	}

	return 0;
}