Update project documentation and enhance malware detection engine
- Completely rewrite README.md with comprehensive project overview and technical details - Add detailed explanation of antivirus engine architecture and detection strategies - Implement multi-stage malware detection with machine learning, sandbox, and PE structure analysis - Update project configuration and add new source files for enhanced detection capabilities - Integrate XGBoost machine learning model with C++ export functionality - Improve sandbox environment with advanced module and LDR data table handling - Remove legacy Python prediction and training scripts in favor of C++ implementation
This commit is contained in:
@@ -46,6 +46,7 @@ void handleCodeRun(uc_engine* uc, uint64_t address, uint32_t size,
|
||||
"[!!!]detect cross section excute, from %d to %d,address: 0x%llx\n",
|
||||
sandbox->GetLastExecuteSectionIndex(), currentSectionIndex,
|
||||
address);
|
||||
sandbox->SetMalwareAnalysisType(MalwareAnalysisType::kSuspicious);
|
||||
|
||||
// 记录跨区段执行地址
|
||||
sandbox->SetCrossSectionExecution(address);
|
||||
@@ -99,6 +100,29 @@ void handleMemoryRead(uc_engine* uc, uc_mem_type type, uint64_t address,
|
||||
sandbox->GetPeInfo()->isX64 ? UC_X86_REG_RIP : UC_X86_REG_EIP,
|
||||
®Rip);
|
||||
|
||||
// 检测是否访问LDR结构
|
||||
if (sandbox->GetPeInfo()->isX64) {
|
||||
uint64_t ldrAddress = sandbox->GetPeb64()->Ldr;
|
||||
if (ldrAddress != 0 && address >= ldrAddress &&
|
||||
address < (ldrAddress + sizeof(X64_PEB_LDR_DATA))) {
|
||||
printf(
|
||||
"[WARNING] Suspicious direct LDR access detected at RIP: "
|
||||
"0x%llx, accessing address: 0x%llx\n",
|
||||
regRip, address);
|
||||
sandbox->SetMalwareAnalysisType(MalwareAnalysisType::kSuspicious);
|
||||
}
|
||||
} else {
|
||||
uint32_t ldrAddress = sandbox->GetPeb32()->Ldr;
|
||||
if (ldrAddress != 0 && address >= ldrAddress &&
|
||||
address < (ldrAddress + sizeof(_PEB_LDR_DATA))) {
|
||||
printf(
|
||||
"[WARNING] Suspicious direct LDR access detected at RIP: 0x%x, "
|
||||
"accessing address: 0x%llx\n",
|
||||
static_cast<uint32_t>(regRip), address);
|
||||
sandbox->SetMalwareAnalysisType(MalwareAnalysisType::kSuspicious);
|
||||
}
|
||||
}
|
||||
|
||||
uint64_t readAddress;
|
||||
auto readError =
|
||||
uc_mem_read(sandbox->GetUnicornHandle(), address, &readAddress, size);
|
||||
@@ -235,16 +259,53 @@ void handleMemoryUnmapRead(uc_engine* uc, uc_mem_type type, uint64_t address,
|
||||
printf("[handleMemoryUnmapRead] Address: %p Size: %p Value: %p\n", address,
|
||||
size, value);
|
||||
dumpVmenv(uc, userData);
|
||||
__debugbreak();
|
||||
}
|
||||
|
||||
void handleMemoryWrite(uc_engine* uc, uc_mem_type type, uint64_t address,
|
||||
int size, int64_t value, void* userData) {
|
||||
// 待实现
|
||||
auto* sandbox = static_cast<Sandbox*>(userData);
|
||||
if (!sandbox) return;
|
||||
|
||||
uint64_t regRip;
|
||||
uc_reg_read(uc,
|
||||
sandbox->GetPeInfo()->isX64 ? UC_X86_REG_RIP : UC_X86_REG_EIP,
|
||||
®Rip);
|
||||
|
||||
// 检测是否写入LDR结构
|
||||
if (sandbox->GetPeInfo()->isX64) {
|
||||
uint64_t ldrAddress = sandbox->GetPeb64()->Ldr;
|
||||
if (ldrAddress != 0 && address >= ldrAddress &&
|
||||
address < (ldrAddress + sizeof(X64_PEB_LDR_DATA))) {
|
||||
printf(
|
||||
"[WARNING] Suspicious direct LDR modification detected at RIP: "
|
||||
"0x%llx, modifying address: 0x%llx\n",
|
||||
regRip, address);
|
||||
sandbox->SetMalwareAnalysisType(MalwareAnalysisType::kSuspicious);
|
||||
}
|
||||
} else {
|
||||
uint32_t ldrAddress = sandbox->GetPeb32()->Ldr;
|
||||
if (ldrAddress != 0 && address >= ldrAddress &&
|
||||
address < (ldrAddress + sizeof(_PEB_LDR_DATA))) {
|
||||
printf(
|
||||
"[WARNING] Suspicious direct LDR modification detected at RIP: "
|
||||
"0x%x, modifying address: 0x%llx\n",
|
||||
static_cast<uint32_t>(regRip), address);
|
||||
sandbox->SetMalwareAnalysisType(MalwareAnalysisType::kSuspicious);
|
||||
}
|
||||
}
|
||||
|
||||
if (LOG_LEVEL > 0) {
|
||||
printf("[handleMemoryWrite] Address: %p Size: %p Value: %p RIP: %p\n",
|
||||
address, size, value, regRip);
|
||||
}
|
||||
}
|
||||
|
||||
void handleSyscall(uc_engine* uc, void* userData) {
|
||||
// 待实现
|
||||
auto* sandbox = static_cast<Sandbox*>(userData);
|
||||
if (!sandbox) return;
|
||||
sandbox->SetMalwareAnalysisType(MalwareAnalysisType::kSuspicious);
|
||||
printf("[handleSyscall] Syscall detected\n");
|
||||
}
|
||||
|
||||
} // namespace sandboxCallbacks
|
||||
|
||||
Reference in New Issue
Block a user