跳转到帖子

游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

TheHackerWorld官方

精选回复

发布于

最近Heap加密对BeaconEye很火,我自己正好在写C2,所以简单记录一下。
过程
遍历进程拥有的堆。
编译堆分配的块。
XOR 分配块中的数据。


过程
首先使用 GetProcessHeaps 获取进程拥有的所有堆句柄。
DWORD GetProcessHeaps(
DWORD 堆数,
PHANDLE 进程堆
);
然后使用 HeapWalk 枚举所有分配的堆块。 (这个功能设计的很好,终于不用First Next了)
(heapEntry.wFlags & PROCESS_HEAP_ENTRY_BUSY)
布尔堆走(
处理 hHeap,
LPPROCESS_HEAP_ENTRY lpEntry
);

sadasd1231ds32a.png.c22a65631016385eab9bb34ae3afaffa.pngimage12313213.png.a74902b79e6c37d82e4648f20dcdda49.png


代码
 

#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);
 
 
 
}
 
 

创建帐户或登录后发表意见

最近浏览 0

  • 没有会员查看此页面。