Tys*_*son 6 c++ memory windows patch module
我试图检测加载的模块是否在运行时被恶意进程修补。在这种情况下,模块是一个正在运行的 EXE。
我的检测方案如下:
MODULEINFO mInfo;
GetModuleInformation(myProc, myInstance, &modInfo, sizeof(MODULEINFO));
//
char* hash1 = hashBytes(mInfo.lpBaseOfDll, mInfo.SizeOfImage);
//.....some time later
char* hash2 = hashBytes(mInfo.lpBaseOfDll, mInfo.SizeOfImage);
//
bool moduleIsModified = compareHashes(hash1, hash2); //false == we're patched!
Run Code Online (Sandbox Code Playgroud)
起初这很好用......如果没有补丁出现,哈希将是相同的,我可以成功检测到我自己的补丁(模块地址空间中的字节随 VirtualProect/CopyMemory 改变)。
但是,我发现如果我在 hash1/hash2 的生成之间放入以下代码,哈希将不再匹配:
//char* hash1 = ....
std::ifstream stream(pathToModule); //this causes hashes to no longer match???
//char* hash1 = ....
Run Code Online (Sandbox Code Playgroud)
为什么向模块创建文件流会更改模块的预加载字节?我假设模块在加载后会静态地位于内存中(假设没有恶意补丁)显然是不正确的......但为什么呢?模块加载的字节是否有特定区域是动态的?
归档时间: |
|
查看次数: |
65 次 |
最近记录: |