因为要给孩子做点视频啥的,就找到这个工具,当然网络上也有某大神的破解结果,不过他的补丁做了保护,作为强迫症,对于杀毒软件的提示是不能忍受的,就撸了一下它。
版本信息:直接官网下载的最新版本。
开始上调试器没有做反调试,程序会退出,虽然没有做很强的保护。
先在软件的激活框随便输入点啥,提示:XXXXXX-XXXXX-XXXXX-XXXXX-XXXXX-XXXXX-XXXXX,因为这个是QT实现,肯定有一些逻辑在DLL中。
通过对文件内搜索,在Application.dll内找到它的位置。
地址=000007FEB4661338
反汇编=lea r8,qword ptr ds:[7FEB467A830]
字符串="<b>Activation error.</b><br><br>Please check if the key has the following format XXXXXX-XXXXX-XXXXX-XXXXX-XXXXX-XXXXX-XXXXX and try again."
地址=000007FEB4661338
反汇编=lea r8,qword ptr ds:[7FEB467A830]
字符串="<b>Activation error.</b><br><br>Please check if the key has the following format XXXXXX-XXXXX-XXXXX-XXXXX-XXXXX-XXXXX-XXXXX and try again."
设置断点后,停止下来:
000007FEB7CF0B64 | E8 57FBFFFF | call <application.?MakeLearnMoreLink@RegistrationDialog@App@Movavi@@ | 000007FEB7CF0B69 | 48:8BF8 | mov rdi,rax | 000007FEB7CF0B6C | 44:897C24 20 | mov dword ptr ss:[rsp+20],r15d | 000007FEB7CF0B71 | 45:33C9 | xor r9d,r9d | 000007FEB7CF0B74 | 4C:8D05 35BB0300 | lea r8,qword ptr ds:[7FEB7D2C6B0] <------ | r8:"x+", 000007FEB7D2C6B0:"<b>Activation error.</b><br><br>Please check if the key has the following format XXXXXX-XXXXX-XXXXX-XXXXX-XXXXX-XXXXX-XXXXX and try again." 000007FEB7CF0B7B | 48:8D55 70 | lea rdx,qword ptr ss:[rbp+70] | 000007FEB7CF0B7F | 48:8D0D CA403300 | lea rcx,qword ptr ds:[<?staticMetaObject@RegistrationDialog@App@Mova | 000007FEB7CF0B86 | FF15 5C130300 | call qword ptr ds:[<&?tr@QMetaObject@@QEBA?AVQString@@PEBD0H@Z>] | 000007FEB7CF0B8C | 90 | nop |
正则如下:^\d{6}-\d{5}-\d{5}-\d{5}-\d{5}-\d{5}-\d{5}$,通过这个表达式验证,发现应该Key全为数字,再次构造一个KEY:
123456-12345-12345-12345-12345-12345-12345
这次断点在了academic.exe内部,从给出的破解也是这个文件,所以具体去分析一下:
000000013F177DFC | 48:81EC 70010000 | sub rsp,170 |
000000013F177E03 | 48:8B05 EEC90A00 | mov rax,qword ptr ds:[13F2247F8] |
000000013F177E0A | 48:33C4 | xor rax,rsp |
000000013F177E0D | 48:8945 60 | mov qword ptr ss:[rbp+60],rax |
000000013F177E11 | 48:8BFA | mov rdi,rdx <------ |
000000013F177E14 | 48:8BD9 | mov rbx,rcx |
000000013F177E17 | 48:895424 58 | mov qword ptr ss:[rsp+58],rdx |
000000013F177E1C | 33F6 | xor esi,esi |
对应的函数:sub_140067DF0(int64 a1, int64 a2)
输入后,得到注册失败,监控网络注册过程:
地址=000000013F11A239
反汇编=lea rcx,qword ptr ds:[13F1F4C88]
字符串=http://activations.movavi.com/activate3.php
地址=000000013F11A269
反汇编=lea rcx,qword ptr ds:[13F1F4CB8]
字符串=http://activations.movavi.com/key/check_expiration
并没有想着去破解在线注册,看到它可以通过离线注册,就查看了一下逻辑:
从上面的逻辑,应该是发邮件给提供商,会给提供一个码,填进去就OK了!!!先随便输入一个后,程序停了下来:
000000013F1658FA 41:55 push r13 r13:&"123456-12345-12345-12345-12345-12345-12345" 000000013F1658FC 41:56 push r14 000000013F1658FE 41:57 push r15 000000013F165900 48:8D6C24 90 lea rbp,qword ptr ss:[rsp-70] 000000013F165905 48:81EC 70010000 sub rsp,170 000000013F16590C 48:8B05 E5EE0B00 mov rax,qword ptr ds:[13F2247F8] 000000013F165913 48:33C4 xor rax,rsp 000000013F165916 48:8945 68 mov qword ptr ss:[rbp+68],rax 000000013F16591A 45:0FB6E9 movzx r13d,r9b r13d:&"123456-12345-12345-12345-12345-12345-12345" 000000013F16591E 4D:8BF8 mov r15,r8 r8:&"123456-12345-12345-12345-12345-12345-12345" 000000013F165921 48:8BF2 mov rsi,rdx rdx:&"11111111111111111111111111111111" 000000013F165924 4C:8BF1 mov r14,rcx 000000013F165927 45:33E4 xor r12d,r12d 000000013F16592A 44:896424 38 mov dword ptr ss:[rsp+38],r12d 000000013F16592F 4C:8965 18 mov qword ptr ss:[rbp+18],r12 000000013F165933 48:C745 20 0F000000 mov qword ptr ss:[rbp+20],F 000000013F16593B 44:8865 08 mov byte ptr ss:[rbp+8],r12b 000000013F16593F 45:8D4424 1D lea r8d,qword ptr ds:[r12+1D] r8d:&"123456-12345-12345-12345-12345-12345-12345" 000000013F165944 48:8D15 ADD40800 lea rdx,qword ptr ds:[13F1F2DF8] rdx:&"11111111111111111111111111111111", 000000013F1F2DF8:"^([\\dA-Z]{8}-){15}[\\dA-Z]{8}$"
可以看到我输入的码信息:全为11,对应函数为:
Offline_key = ^([\dA-Z]{8}-){15}[\dA-Z]{8}$
构建KEY:
12345678-12345678-12345678-12345678-12345678-12345678-12345678-12345678-12345678-12345678-12345678-12345678-12345678-12345678-12345678-12345678
到这里就进入到函数:sub_1400558F0
因为字符串没有混淆,做了Patch,以为就可以破解了,结果程序直接奔溃了:
0000000005DC5807 44:39DA cmp edx,r11d 0000000005DC580A 49:89C8 mov r8,rcx 0000000005DC580D 0F82 0E020000 jb 5DC5A21 0000000005DC5813 8039 30 cmp byte ptr ds:[rcx],30 30:'0' 0000000005DC5816 74 09 je 5DC5821 0000000005DC5818 8039 31 cmp byte ptr ds:[rcx],31 31:'1' 0000000005DC581B 0F85 00020000 jne 5DC5A21 0000000005DC5821 8A41 01 mov al,byte ptr ds:[rcx+1] 0000000005DC5824 BD 01000000 mov ebp,1
很奇怪是吧,这段地址都不在代码段,重新试了一次,发现程序通过内存位置,进入了一个dll函数调用:
而且分析它的代码发现它是加密的,这个应该是做了保护的本地认证模块了。
###0x2.3 考虑绕过认证:
找到上面的dll加载机制后,发现有比较多的点都在进行调用和认证,关键位置为:
从代码可以看到在获取是IsTrial等信息,调度时,把IsTrial的结果调整测试下来,发现它就完成注册了!
Patch:
academic.exe
0000000000075C15:48->B8
0000000000075C16:8D->00
0000000000075C17:15->00
0000000000075C18:8C->00
0000000000075C19:F5->00
0000000000075C1A:06->90
0000000000075C1B:00->90
0000000000075C1C:48->90
0000000000075C1D:8B->90
0000000000075C1E:CE->90
0000000000075C1F:E8->90
0000000000075C20:0C->90
0000000000075C21:91->90
0000000000075C22:FF->90
0000000000075C23:FF->90