多种方法绕过某软件许可过期检测

 佚名文
发布时间:2025-10-17 05:22

看到坛友求助的一个软件试用期不能重置的问题:

有没有人知道为什么重装系统了软件试用期还是不能重置! - 『悬赏问答区』 - 吾爱破解

求助软件解包问题 - 『脱壳破解讨论求助区』

简单分析


软件下载下来发现是一个安装包,通过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(](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 <= v2 )  // 计算当前时间与安装日期的时间差,如果超过15天或者当前时间早于安装时间,则提示试用期已过期   {     sub_408BC0(1u);     sub_402810(       &off_430C48,       3,       L"d:\\project\\surrealcapture\\surrealcapture\\surrealcapture\\360gamecapture.cpp",       84,       L"Surreal Capture trial period has expired.");     goto LABEL_42;   }   if ( !sub_409180() )                          // 再次许可检查,如果 sub_409180() 再次返回 false,则显示一个错误消息   {     sub_402810(       &off_430C48,       4,       L"d:\\project\\surrealcapture\\surrealcapture\\surrealcapture\\360gamecapture.cpp",       101,       L"ASSERT");     MessageBoxW(       0,       L"The data for install date was corrupted. Please purchase Windows 10 Movies & TV Codec Pack.",       L"Surreal Capture",       0x10u);     return 0;   }   if ( sub_409240() )                           // 如果 sub_409240() 返回 true,则表示试用期已过期   {     sub_402810(       &off_430C48,       3,       L"d:\\project\\surrealcapture\\surrealcapture\\surrealcapture\\360gamecapture.cpp",       108,       L"Surreal Capture trial period has expired."); ...



通过伪代码,我们可以得知软件会进行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, 下载次数: 1)

下载附件

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 <windows.h> #include <detours.h> #include <iostream> 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 << "Hook attached successfully." << std::endl;     }     else {         std::cerr << "Failed to attach hook." << std::endl;     }     if (DetourTransactionCommit() == NO_ERROR) {         std::cout << "Hook successfully installed.\n" << std::endl;     }     else {         std::cerr << "Hook installation failed.\n" << std::endl;     } } // 卸载 Hook extern "C" __declspec(dllexport) void unhooknew() {     DetourTransactionBegin();     DetourUpdateThread(GetCurrentThread());     if (DetourDetach(&(PVOID&)Real_GetSystemTimeAsFileTime, My_GetSystemTimeAsFileTime) == NO_ERROR) {         std::cout << "Hook detached successfully." << std::endl;     }     else {         std::cerr << "Failed to detach hook." << std::endl;     }     DetourTransactionCommit(); }



编译为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, 下载次数: 1)

下载附件

2024-9-15 13:13 上传



测试通过,这种方法可行

PixPin_2024-09-15_13-11-34.png (199.58 KB, 下载次数: 0)

下载附件

2024-9-15 13:14 上传



至此,本帖完结
感谢大家看到这里,再见!  

免费评分 参与人数 63威望 +1 吾爱币 +74 热心值 +58 理由
sammier     + 1   + 1   受益匪浅  
wod112     + 1   + 1   谢谢@Thanks!  
daemonlive     + 1   + 1   我很赞同!  
beatone       + 1   鼓励转贴优秀软件安全工具和文档!  
xujidejia     + 2   + 1   用心讨论,共获提升!  
zemin       + 1   热心回复!  
pwndasys     + 1   + 1   谢谢@Thanks!  
18933400536     + 1   + 1   谢谢@Thanks!  
笙若     + 1   + 1   谢谢@Thanks!  
wcy66     + 1   + 1   我很赞同!  
521105     + 1   + 1   我很赞同!  
ddal     + 1   + 1   我很赞同!  
jazz5920       + 1   谢谢@Thanks!  
Hmily   + 1   + 20   + 1   感谢发布原创作品,吾爱破解论坛因你更精彩!  
n99675     + 1   + 1   谢谢@Thanks!  
shinpekong     + 1   + 1   我很赞同!  
tokenian     + 1   + 1   用心讨论,共获提升!  
RainH     + 1   + 1   热心回复!  
NarcySunshine     + 1   + 1   用心讨论,共获提升!  
linciver     + 1   + 1   我很赞同!  
sdpaopao     + 1   + 1   谢谢@Thanks!  
fairesense     + 1   + 1   谢谢@Thanks!  
kewu200     + 1   + 1   我很赞同!  
melooon     + 1   + 1   我很赞同!  
xielong     + 1   + 1   我很赞同!  
dapanglaile     + 1   + 1   用心讨论,共获提升!  
luckilygou     + 1     谢谢@Thanks!  
gezhonglunta     + 1   + 1   我很赞同!  
AnDawn     + 1   + 1   热心回复!  
GGbond141242       + 1   我很赞同!  
slslsl     + 1   + 1   我很赞同!  
Icicle丶凌       + 1   欢迎分析讨论交流,吾爱破解论坛有你更精彩!  
mscsky     + 1   + 1   我很赞同!  
angelabebe     + 1   + 1   我很赞同!  
sdzcq     + 1   + 1   谢谢@Thanks!  
匿名网友哟     + 1     热心回复!  
freesoft     + 1   + 1   谢谢@Thanks!  
jaffa       + 1   谢谢@Thanks!  
galaxys10     + 1   + 1   受益匪浅!!  
mcbaiyun     + 1   + 1   我很赞同!  
Mooshed88     + 1   + 1   我很赞同!  
midkr     + 1   + 1   我很赞同!  
st0rm     + 1   + 1   热心回复!  
1783780690     + 1   + 1   谢谢@Thanks!  
Issacclark1       + 1   谢谢@Thanks!  
yltz       + 1   热心回复!  
toot     + 1   + 1   谢谢@Thanks!  
repack9527     + 1     感谢发布原创作品,吾爱破解论坛因你更精彩!  
Qiaoyuexuan     + 1   + 1   谢谢@Thanks!  
twl288     + 1   + 1   谢谢@Thanks!  
78zhanghao87     + 1     我很赞同!  
HillBoom     + 1   + 1   用心讨论,共获提升!  
lgc81034       + 1   谢谢@Thanks!  
xiaonan22533     + 1   + 1   我很赞同!  
真的小白     + 1   + 1   我很赞同!  
二零一八小王子     + 1     热心回复!  
BayMax2911     + 1   + 1   6666,学习了!!  
andyle     + 2   + 1   我很赞同!  
han163426       + 1   我很赞同!  
daoye9988     + 1   + 1   谢谢@Thanks!  
丶峰宇     + 1   + 1   我很赞同!  
F14990A       + 1   我很赞同!  
小朋友呢     + 2   + 1   我很赞同!  

查看全部评分

首页
评论
分享
Top