吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2178|回复: 2
收起左侧

[求助] 【逆向初级学习】实现简单的加密壳

[复制链接]
吾爱|破解 发表于 2020-3-19 12:05
看了滴水3期视频中的加密壳然后开始动手

流程:
PE文件整个加密->壳新增节->将加密数据放入壳的新增节中->加密完成
解密:
获取壳的PE文件->取出加密数据进行解密->以挂起的方式创建进程->获取Context线程数据->使用 NtUnmapViewOfSection将卸载进程->在进程中申请内存VirtualAllocEx->解密数据拉伸进内存->将oep 和 imageBase 写入Context->恢复线程->完成


加密流程比较简单就说了 说解密流程几个重点地方
首先我这使用LoadLibrary来获取在内存中的指针 也就是ImageBuff
[C++] 纯文本查看 复制代码
//获取内存中的拉伸指针
	HINSTANCE hImageBuff = LoadLibrary("decode.exe");
	if (hImageBuff == NULL)
	{
		return 0;
	}



然后以挂起的方式创建进程
[C++] 纯文本查看 复制代码
STARTUPINFO si;
	
	memset(&si, 0, sizeof(STARTUPINFO));//初始化si在内存块中的值(详见memset函数)
	ZeroMemory(&si, sizeof(si));
	si.cb = sizeof(STARTUPINFO);
	
	ZeroMemory(&pi, sizeof(pi));
	CreateProcess(TEXT("PETool 1.0.0.5.exe"),
		NULL,
		NULL,
		NULL,
		FALSE,
		CREATE_SUSPENDED,
		NULL,
		NULL,
		&si,
		&pi
		);



获取Context 将创建的进程进行卸载  Context.Ebx + 8的地方就是PE的 imageBase


[C++] 纯文本查看 复制代码
CONTEXT Context;
	
	Context.ContextFlags = CONTEXT_FULL;
	GetThreadContext(pi.hThread, &Context);
	DWORD dwVictimBaseAddr = 0;
	if (ReadProcessMemory(pi.hProcess, (LPCVOID)(Context.Ebx + 8), &dwVictimBaseAddr, sizeof(PVOID), NULL) == 0)
	{
		return -1;
	}
	ZwOfSection zw;
	zw = (ZwOfSection)GetProcAddress(LoadLibrary("ntdll.dll"), "NtUnmapViewOfSection");
	NTSTATUS nt = zw(pi.hProcess, (PVOID)dwVictimBaseAddr);


在挂起进程中申请内存
[C++] 纯文本查看 复制代码
char* Address = (char*)VirtualAllocEx(pi.hProcess, (PVOID)g_image_optional.optional32.ImageBase, g_image_optional.optional32.SizeOfImage, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);


将数据拉伸后修复一下Context 就可以开始跑了
[Asm] 纯文本查看 复制代码
DWORD dwImageBase = g_image_optional.optional32.ImageBase;
	WriteProcessMemory(pi.hProcess, (LPVOID)(Context.Ebx + 8), &dwImageBase, sizeof(PVOID), NULL);

	//恢复
	Context.Eax = dwImageBase + g_image_optional.optional32.AddressOfEntryPoint;
	int a = SetThreadContext(pi.hThread, &Context);
	 a = ResumeThread(pi.hThread);



PS:还有一个问题 视频中说是以挂起的方式创建自己的进程 但是我创建自己进程后,恢复就会报c0005的错误 这个有没有大佬知道原因呢

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| 吾爱|破解 发表于 2020-3-21 10:56
我用挂起的方式创建别的EXE进程,在修改Context 后恢复就可以运行
就是挂起自己的进程在恢复就会报错
 楼主| 吾爱|破解 发表于 2020-4-21 18:31
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 10:59

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表