看到坛友求助的一个软件试用期不能重置的问题:
有没有人知道为什么重装系统了软件试用期还是不能重置! - 『悬赏问答区』 - 吾爱破解
求助软件解包问题 - 『脱壳破解讨论求助区』
简单分析
软件下载下来发现是一个安装包,通过Total Uninstall监控软件安装,发现软件在安装过程中向注册表项写入一段数据,猜测是安装时间
image-20240915102529-xbongum.png (64.89 KB, 下载次数: 0)
下载附件
2024-9-15 12:42 上传
image-20240915102745-55ap35o.png (111.54 KB, 下载次数: 0)
下载附件
2024-9-15 12:42 上传
使用InnoExtractor(www.52pojie.cn](https://www.52pojie.cn/thread-1718344-1-1.html)对安装包解包,在安装脚本install\_script.iss中发现有相关代码
image-20240915103101-8g8r7a4.png (604.99 KB, 下载次数: 0)
下载附件
2024-9-15 12:43 上传
导出注册表文件并往后修改系统时间使软件过期,软件弹出过期窗口,此时再将时间改回,软件也会弹出过期窗口。
image-20240915104442-9u13p1a.png (21.96 KB, 下载次数: 0)
下载附件
2024-9-15 12:43 上传
image-20240915104500-8tbm7q4.png (118.68 KB, 下载次数: 0)
下载附件
2024-9-15 12:43 上传
将刚才导出的注册表文件重新导入,软件没有弹出过期窗口,看来它是通过注册表判断是否过期。到这里其实已经绕过许可过期检测了,只要更改系统时间就行了,但每次改时间也挺麻烦的,有没有一劳永逸的办法呢?
方法一:使用ida修改汇编代码,强制绕过许可检测
先将主程序SurrealCapture.exe丢到ida里,过期弹窗上有一个购买按钮,会打开某个网站,那么我们可以在ida搜索这个网站文本
image-20240915110253-hfs2r8r.png (37.25 KB, 下载次数: 0)
下载附件
2024-9-15 12:43 上传
pixpix2024_1.png (22.21 KB, 下载次数: 0)
下载附件
2024-9-15 14:54 上传
每个都点进去,f5看看伪代码,发现第一个是正常窗口,第二个才是过期窗口
在这里按x看看交叉引用,找到是谁调用了这个函数
image-20240915110956-cwd4jf9.png (105.35 KB, 下载次数: 0)
下载附件
2024-9-15 12:44 上传
跳转到这,接下来就得分析伪代码了
image-20240915111226-17cqq1e.png (47.43 KB, 下载次数: 0)
下载附件
2024-9-15 12:44 上传
int __thiscall sub_401350(const WCHAR *this)
{
__int64 v2; // kr00_8
DWORD (__stdcall *v3)(); // esi
HANDLE v4; // eax
char *v5; // edi
__int16 v6; // ax
char *v7; // edi
__int16 v8; // ax
HWND v9; // eax
HANDLE v10; // ecx
HANDLE v11; // eax
BOOL Wow64Process; // [esp+10h] [ebp-3D8h] BYREF
LPCWSTR lpParameters; // [esp+14h] [ebp-3D4h]
__int64 v14; // [esp+18h] [ebp-3D0h] BYREF
struct _NOTIFYICONDATAW Filename; // [esp+20h] [ebp-3C8h] BYREF
lpParameters = this;
if ( !sub_409180() )
{
sub_402810(
&off_430C48,
4,
L"d:\\project\\surrealcapture\\surrealcapture\\surrealcapture\\360gamecapture.cpp",
78,
L"ASSERT");
return 0;
}
v2 = qword_431D58;
sub_40E084(&v14);
if ( (v14 - v2) / 86400 >= 15 || v14
通过伪代码,我们可以得知软件会进行3次许可检查,那么我们可以修改这三次判断,跳过许可检查。
右键同步到ida窗口
image-20240915115540-kybiz35.png (33.84 KB, 下载次数: 0)
下载附件
2024-9-15 12:44 上传
ctrl+alt+k修改汇编代码,nop掉跳转
image-20240915121438-j7vd7nz.png (69.35 KB, 下载次数: 0)
下载附件
2024-9-15 12:45 上传
这里我们需要让它能够往下运行,所以改成jmp
image-20240915121607-rfm8joh.png (54.47 KB, 下载次数: 0)
下载附件
2024-9-15 12:45 上传
image-20240915121721-ukt729x.png (29.82 KB, 下载次数: 0)
下载附件
2024-9-15 12:45 上传
保存修改
image-20240915121925-irbjgig.png (51.79 KB, 下载次数: 0)
下载附件
2024-9-15 12:45 上传
打开看看,已经跳过过期检查了,这下不用修改系统时间也能打开了
image-20240915122022-yt62hxy.png (154.69 KB, 下载次数: 0)
下载附件
2024-9-15 12:45 上传
方法二:Hook GetSystemTimeAsFileTime
深入分析sub_40E084,我们可以发现软件调用了GetSystemTimeAsFileTime计算时间戳
__int64 __cdecl sub_40E084(__int64 *a1)
{
__int64 result; // rax
struct _FILETIME SystemTimeAsFileTime; // [esp+0h] [ebp-8h] BYREF
SystemTimeAsFileTime = 0i64;
GetSystemTimeAsFileTime(&SystemTimeAsFileTime);// 调用GetSystemTimeAsFileTime
if ( *(_QWORD *)&SystemTimeAsFileTime - 116444736000000000i64 >= 325368000000000000i64 )
result = -1i64;
else
result = (*(_QWORD *)&SystemTimeAsFileTime - 116444736000000000i64) / 10000000;
if ( a1 )
*a1 = result;
return result;
}
那么,我们可以尝试hook GetSystemTimeAsFileTime,让它返回特定的值
(这里使用了Detours 库)
#include
#include
#include
static void (WINAPI* Real_GetSystemTimeAsFileTime)(LPFILETIME) = GetSystemTimeAsFileTime;
void WINAPI My_GetSystemTimeAsFileTime(LPFILETIME lpSystemTimeAsFileTime) {
SYSTEMTIME st;
// 2024年9月14日20:00:00
st.wYear = 2024;
st.wMonth = 9;
st.wDay = 14;
st.wHour = 20;
st.wMinute = 0;
st.wSecond = 0;
st.wMilliseconds = 0;
SystemTimeToFileTime(&st, lpSystemTimeAsFileTime);
}
BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
switch (ul_reason_for_call) {
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
// 安装 Hook
extern "C" __declspec(dllexport) void hooknew() {
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
if (DetourAttach(&(PVOID&)Real_GetSystemTimeAsFileTime, My_GetSystemTimeAsFileTime) == NO_ERROR) {
std::cout
编译为32位dll,使用studype+添加并保存
PixPin_2024-09-15_13-03-19.png (232.24 KB, 下载次数: 0)
下载附件
2024-9-15 13:13 上传
PixPin_2024-09-15_13-05-53.png (77.78 KB, 下载次数: 0)
下载附件
2024-9-15 13:13 上传
测试通过,这种方法可行
PixPin_2024-09-15_13-11-34.png (199.58 KB, 下载次数: 0)
下载附件
2024-9-15 13:14 上传
至此,本帖完结
感谢大家看到这里,再见!