发布于2022年11月7日2年前 最近Heap加密对BeaconEye很火,我自己正好在写C2,所以简单记录一下。过程遍历进程拥有的堆。编译堆分配的块。XOR 分配块中的数据。 过程首先使用 GetProcessHeaps 获取进程拥有的所有堆句柄。DWORD GetProcessHeaps(DWORD 堆数,PHANDLE 进程堆);然后使用 HeapWalk 枚举所有分配的堆块。 (这个功能设计的很好,终于不用First Next了)(heapEntry.wFlags & PROCESS_HEAP_ENTRY_BUSY)布尔堆走(处理 hHeap,LPPROCESS_HEAP_ENTRY lpEntry); 代码 #include <windows.h> #include <stdio.h> VOID Xor(char* buffer, size_t buffer_size) { char key[9] = { 1,2,3,4,5,6,8,0 }; for (size_t i = 0; i < buffer_size; i++) { buffer[i] ^= key[i % sizeof(key)-1]; } } VOID FuckHeap() { PROCESS_HEAP_ENTRY heapEntry = { 0 }; HANDLE hHeap = GetProcessHeap(); while (HeapWalk(hHeap, &heapEntry)) { if (heapEntry.wFlags & PROCESS_HEAP_ENTRY_BUSY) { Xor((char*)heapEntry.lpData, heapEntry.cbData); } } } int main() { LPVOID WorkPath = malloc(MAX_PATH); GetCurrentDirectoryA(MAX_PATH, (LPSTR)WorkPath); printf("%s\n", (char*)WorkPath); FuckHeap(); //printf("%s\n", (char*)WorkPath); FuckHeap(); printf("%s\n", (char*)WorkPath); }
创建帐户或登录后发表意见