优化rip的速度
This commit is contained in:
@@ -548,7 +548,10 @@ auto Sandbox::InitEnv(std::shared_ptr<BasicPeInfo> peInfo) -> void {
|
||||
}
|
||||
mapSystemModuleToVmByName("kernelbase.dll");
|
||||
}
|
||||
// 闭合ldr
|
||||
FinalizeLdrLinks();
|
||||
// 给所有导入表加c3
|
||||
/*
|
||||
for (const auto& module : this->GetModuleList()) {
|
||||
// 遍历导出函数查找对应名称
|
||||
for (const auto& exp : module->export_function) {
|
||||
@@ -556,6 +559,15 @@ auto Sandbox::InitEnv(std::shared_ptr<BasicPeInfo> peInfo) -> void {
|
||||
uc_mem_write(m_ucEngine, inMemAddr, "\xCC", sizeof(char));
|
||||
}
|
||||
}
|
||||
*/
|
||||
// 挂导入表钩子
|
||||
for (const auto& module : this->GetModuleList()) {
|
||||
// 遍历导出函数查找对应名称
|
||||
for (const auto& exp : module->export_function) {
|
||||
auto inMemAddr = module->base + exp->function_address;
|
||||
uc_hook_add(m_ucEngine, &exp->sys_ook, UC_HOOK_CODE, sandboxCallbacks::handleApiCall,(void*)this, inMemAddr, inMemAddr + 5, 0);
|
||||
}
|
||||
}
|
||||
uc_err ucErr = uc_mem_map(m_ucEngine, m_peInfo->RecImageBase,
|
||||
m_peInfo->peSize, UC_PROT_ALL);
|
||||
if (ucErr != UC_ERR_OK) {
|
||||
@@ -682,7 +694,6 @@ auto Sandbox::Run(uint64_t address) -> void {
|
||||
// 为参数腾出空间
|
||||
rsp -= 3 * 4; // 三个参数:hinstDLL, fdwReason, lpvReserved
|
||||
uc_reg_write(m_ucEngine, UC_X86_REG_ESP, &rsp);
|
||||
|
||||
// 按照从右到左的顺序压栈
|
||||
uint32_t lpvReserved = 0; // 第三个参数为NULL
|
||||
uint32_t reason = dll_fdwReason; // DLL_PROCESS_ATTACH
|
||||
@@ -704,6 +715,7 @@ auto Sandbox::Run(uint64_t address) -> void {
|
||||
}
|
||||
}
|
||||
err = uc_emu_start(m_ucEngine, entryPoint, m_peInfo->imageEnd, timeout, 0);
|
||||
|
||||
// 2. 有自定义地址 再跑自定义地址
|
||||
std::cerr << "Entry Point Emulation error: " << uc_strerror(err)
|
||||
<< std::endl;
|
||||
|
||||
Reference in New Issue
Block a user