[原创]Safengine 2.4.0 系统到期时间去除,告别改系统时间删注册表。
本帖最后由 R-R, 于 2021-1-12 19:37 编辑//玩过Safengine壳的都应该了解它的限制项都在注册表里,只需要删除注册表项就能从新打开
//但是有个系统到期时间很麻烦,要手动改掉系统时间才行。当然_也有更好的方式,直接KeyGen即可
//这里我就只讲述我去除的系统到期和补丁的编写
//下面是补丁代码
//补丁里使用了minhook 感兴趣的朋友可以在GitHub上下载,演示的程序没有 shadow api,所以有shadowapi的程序这个补丁代码可能不适应,但去除的方法同理。
#include "stdafx.h"
#include "include/MinHook.h"
#include <Windows.h>
#include <atlstr.h>
typedef void (WINAPI *OldGetSystemTime)(LPSYSTEMTIME);
OldGetSystemTime fpMyC = NULL;
DWORD SEaddress = 0;
void DoEvents()
{
MSG msg;
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
int L = 0;
void search(){
DWORD processId = GetCurrentProcessId();
HANDLE Hprocess;
unsigned char makecode =
{
0xe5, 0x07, 0x01, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe5, 0x07
};
//By R-R,
DWORD makecodesize = sizeof(makecode);
int len = 0;
MEMORY_BASIC_INFORMATION buf;
SIZE_T d_len = sizeof(MEMORY_BASIC_INFORMATION);
LPCVOID p_Address = NULL;
BOOL ret;
Hprocess = OpenProcess(PROCESS_ALL_ACCESS, false, processId);
while (VirtualQueryEx(Hprocess, (LPCVOID)p_Address, &buf, d_len) != 0)
{
DWORD Address = 0;
if (buf.Protect != 16 && buf.Protect != 1 && buf.Protect != 512)
{
BYTE *m_code = new BYTE;
ret = ReadProcessMemory(Hprocess, (LPCVOID)p_Address, m_code, buf.RegionSize, 0);
if (*m_code != 0xcd)
{
len = buf.RegionSize;
for (int i = 0; i < len; i++)
{
int ret = memcmp(makecode, m_code, makecodesize);
if (ret != 0)
{
m_code = m_code + 1;
}
if (ret == 0)
{
Address = DWORD(p_Address) + i;
L = L + 1;
if (L == 3)
{
//By R-R,
CString str;
str.Format(_T("Address:%#x"), Address);
MessageBox(0, str, L"", 48);
BYTE Data[] = { 0xE6 };
DWORD Datasize = sizeof(Data);
WriteProcessMemory(Hprocess, (LPVOID)Address, (LPVOID)Data, Datasize, NULL);
}
if (i < len)
{
m_code = m_code + 1;
}
}
}
}
}
if ((DWORD)p_Address > 0x01000000)
{
break;
}
p_Address = (LPCVOID)((DWORD)p_Address + buf.RegionSize);
DoEvents();
}
}
int i = 0;
void MyGetSystemTime(LPSYSTEMTIME lpSystemTime)
{
MessageBoxA(NULL, "安装HOOK成功!", "HOOK成功! ", MB_OK);//进行功能hook
i = i + 1;
if (i == 2)
{
search();
}
fpMyC(lpSystemTime);
}
void MyHook(){
if (MH_Initialize() == MB_OK)
{
MH_CreateHook(&GetSystemTime, &MyGetSystemTime, reinterpret_cast<void**>(&fpMyC));
MH_EnableHook(&GetSystemTime);
}
}
//在经过一系列的捣鼓,我分析出Safengine在调用获取时间GetSystemTime之前会解密出Key里的限制项,里面分别有天数,次数 到期时间以及其他到限制项,所以只需要改掉其项即可。
//下图分别是在内存里解密出的系统到期时间和到期时间 次数 等其他限制,和显示的补丁操作。
学到新知识了,百度了一下Safengine,原来是一个具有反调试、反附加、动态自效验等功能,同时提供了对代码的变形、乱序和虚拟化等功能的应用程序保护壳 直接keygen也可以吧。 {:1_927:}
学习了,多谢楼主分享哟 学习了,还可以这么玩 我很赞同! 多谢楼主分享哟, 请上传测试文件 1_se.exe, winspool.drv 本帖最后由 willgoon 于 2021-1-12 22:43 编辑
楼主可否有详细的去除教程感谢 楼主可否有详细的去除教程感谢