티스토리 뷰
파일
파일 열기 쓰기
HANDLE hFile;
hFile = CreateFile(argv[1], // name of the write GENERIC_WRITE, // open for writing 0, // do not share NULL, // default security CREATE_NEW, // create new file only FILE_ATTRIBUTE_NORMAL, // normal file NULL); // no attr. template
파일 열기 읽기
HANDLE hFile;
LARGE_INTEGER distance;
distance.QuadPart=-1
hFile = CreateFile(argv[1], // file to open GENERIC_READ, // open for reading FILE_SHARE_READ, // share for reading NULL, // default security OPEN_EXISTING, // existing file only FILE_ATTRIBUTE_NORMAL, // normal file NULL); // no attr. template
SetFilePointerEx(hFile, buffer, distance, NULL, FILE_END);
ReadFile(hFile,majic,1,&read,NULL);
레지스트리
열기
읽기
data_size 값은 0으로 초기화할 경우 데이터를 못 알아온다.
Default 를 얻으려면 키 값이름을 NULL로 해주면 된다.
닫기
RegCloseKey ( hKey );
프로세스
CreateProcess
STARTUPINFO si; PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &pi, sizeof(pi) );
CreateProcess(File_Path, argument, NULL ,NULL ,FALSE ,0 ,NULL ,NULL ,&si ,&pi);
인자값을 전달하려면 두 번째 인자값에 넣는다.
파일 경로
%SystemRoot%
getenv("systemroot") 를 통해서 알아온다.
getSystemDirectory
system32의 path를 알아온다.
스레드
CreateThread
HANDLE hThread; DWORD dwThreadId = 1; DWORD dwThrdParam = 1;
hThread=CreateThread(NULL, 0, ThreadProc, (LPVOID)dwThrdParam, 0, &dwThreadId);
문자열
replace
char *replaceAll(char *s, const char *olds, const char *news) {
char *result, *sr;
size_t i, count = 0;
size_t oldlen = strlen(olds); if (oldlen < 1) return s;
size_t newlen = strlen(news);
if (newlen != oldlen) {
for (i = 0; s[i] != '\0';) {
if (memcmp(&s[i], olds, oldlen) == 0) count++, i += oldlen;
else i++;
}
} else i = strlen(s);
result = (char *) malloc(i + 1 + count * (newlen - oldlen));
if (result == NULL) return NULL;
sr = result;
while (*s) {
if (memcmp(s, olds, oldlen) == 0) {
memcpy(sr, news, newlen);
sr += newlen;
s += oldlen;
} else *sr++ = *s++;
}
*sr = '\0';
return result;
}
strtok_s
strtok_s(나눌 스트링,나눌 기준,나눈 이후 나머지가 들어간다)
strtok_s(reg_buffer,"%",&left);
wcsrchr
wcsstr(path,'.');
뒤와 같이 사용하면 파일의 extention을 구할 수 있다. wcsrchr 은 문자열의 뒤에서부터 검색해준다.
메모리
memmove
void *memmove(void *dest, const void *src, size_t count );
dest : 복사될 곳
src : 복사할 메모리
count : 복사할 바이트 수
네트워크
URLDownloadToFile
URLDownloadToFile(NULL, L"http://URL", L"exe_path", 0, NULL);
sockaddr
struct sockaddr_in{
short sin_family;
unsigned short sin_port;
IN_ADDR sin_add;
char sin_zero[8];
}
strcut sockaddr{
ushort sa_family;
char sa_data[14];
}
bind
int bind(int sockfd, struct sockaddr *myaddr, socklen_t addrlen);
connect
int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen);
setsockopt
int setsockopt(int socket, int level, intoption_name,const void *option_value, socklen_toption_len);
level :
- SOL_SOCKET 0xffff :
optval :
-SO_BROADCAST 0x20 : 브로드캐스트가 가능하게 해준다.
accept
sudo pip install [모듈명]
send
int send(int s, const void *msg, size_t len, int flags); |
'Programming > C' 카테고리의 다른 글
struct (0) | 2017.09.08 |
---|---|
Dlll로부터 함수 얻어오기 (0) | 2017.09.08 |
rand 함수 (0) | 2017.05.14 |
mmap (0) | 2017.05.06 |
strtoull 함수 (0) | 2017.04.30 |
- Total
- Today
- Yesterday
- vmware cannot connect to the virtual machine
- gdb명령어
- Intel
- 모듈
- vmware 오류
- gdb 명령어
- 리눅스 모듈
- 루트킷
- 백도어
- GDB
- BP
- DriverEntry
- gdb intel 변환
- module
- LKM
- IRP
- 레거시 드라이버
- VMware
- breakpoint
- 드라이버
- PNP 드라이버
- 변환
- gdb intel
- backdoor
- 디바이스
- rootkit
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |