월별 글 목록: 2005년 5월월

_splitpath

파일명 풀패스를 드라이브명, 패스, 파일이름, 확장자를 구분해주는 함수가 있었네요.
(다른 분들은 알고 있었나요?)
아래 GetAppPath 는 풀패스에서 경로명만 얻어 오는 함수입니다.
예를 들어 풀패스가 C:\Test\Test.exe 이면 C:\Test 를 얻어 오는 함수 입니다.

CString GetAppPath(void)
{
HMODULE hModule;
hModule = GetModuleHandle(NULL);

CString strExeFileName;
GetModuleFileName(hModule, strExeFileName.GetBuffer(_MAX_PATH), _MAX_PATH);
strExeFileName.ReleaseBuffer();

char Drive[_MAX_DRIVE];
char Path[_MAX_PATH];
char Filename[_MAX_FNAME];
char Ext[_MAX_EXT];
_splitpath(strExeFileName, Drive, Path, Filename, Ext);

return CString(Drive)+CString(Path);
}

커널 드라이버에서 프로세스 이름 얻기

2X 계열에서만 유효하며, GetProcessNameOffset 함수를 DriverEntry에서 실행하여(DriverEntry 는 시스템, “System” 프로세스가 호출함)
PEPROCESS 에서 프로세스 명이 위치한 Offset 을 얻어와야 함.
이후 원하는 곳에서 GetProcessName 함수를 사용하여 프로세스 이름을 얻어오면 됨

#define PROCNAMELEN 32
#define NT_PROCNAMELEN 16

ULONG GetProcessNameOffset()
{
PEPROCESS Curprocess;
int i;

//현재 프로세스를 얻어옴
Curprocess = PsGetCurrentProcess();

// Scan for 12KB, hoping the KPEB never grows that big!
//PAGE_SIZE : 4KB
//총 12KB(KPEB 가 12KB 이상에 있을 수 없음)를 스캔하면서 “System” 프로세스 이름이 있는 위치를 찾아냄
for(i = 0; i < 3*PAGE_SIZE; i++)
{
if(!strncmp(“System”, (PCHAR)Curprocess + i, strlen(“System”)))
{
return i;
}
}
return 0;
}

PCHARGetProcessName(PCHAR ProcessName)
{
PEPROCESS Curprocess;
char *NamePointer;
ULONG i;

if(gProcessNameOffset != 0)
{
Curprocess = PsGetCurrentProcess();

//현재 얻어진 프로세스에서 ProcessNameOffset 크기 이후에 프로세스 이름이 있음
NamePointer = (PCHAR)Curprocess + gProcessNameOffset;
strncpy(ProcessName, NamePointer, NT_PROCNAMELEN-1 );
ProcessName[NT_PROCNAMELEN-1] = 0;
}
else
{
strcpy(ProcessName, “???”);
} return ProcessName;
}

Iogetdeviceobjectpointer

iogetdeviceobjectpointer() 는 장치 이름을 넣고 그에 대한 장치 객체와 파일 객체를 얻어내는데
장치객체는 얻고자 하는 장치에 attach 된 최상위 객체를 얻어오게 된다.
가끔 attach 된 최상위 객체가 아니라.. 그 장치의 장치객체를 얻어와야 하는 경우가 있는데..
이 경우 사용하기 위해서 만든 함수입니다. (영자님이 강요성 부탁으로..)
함수 이름은 getbasedeviceobjectpointer 라고 명했습니다.

사용해 보시고 피드백 부탁 드립니다.

다운로드

arp spoofing v0.1 beta

프로토콜 드라이버를 이용하여 만든 arp spoofing 프로그램 입니다.

1. 기능
– 호스트 스캔
– 호스트 스프핑
– 스프핑 탐색

2. todo
– 스프링된 호스트 모니터링

3. 테스트 환경
– windows xp sp2
(mfc7.1 관련 dll 필요함)

소스를 원하시는 분은 글을 남겨주시면 보내드리겠습니다.

다운로드

드라이버 파일 크기..

DDK 으로 드라이버를 빌드하다가 발견한 사실..
드라이버 소스파일이 있는 위치에 따라서 드라이버 파일 크기가 달라진다느 사실..
Checked 로 빌드한 경우 파일 위치가 디버깅 정보에 저장되서 그런 차이가 있는지는 확실히 모름..
한번들 확인해 보시길.. ㅋㅋ

사용 DDK
DDK 3790 XP Checked Build Environment