Movavi Academic 2020分析和Patch
2020-05-11 14:03:26 Author: bbs.pediy.com(查看原文) 阅读量:536 收藏

0x01 扯点其它:

因为要给孩子做点视频啥的,就找到这个工具,当然网络上也有某大神的破解结果,不过他的补丁做了保护,作为强迫症,对于杀毒软件的提示是不能忍受的,就撸了一下它。
版本信息:直接官网下载的最新版本。
图片描述

0x02 注册代码定位:

开始上调试器没有做反调试,程序会退出,虽然没有做很强的保护。

0x02.1文件扫描:

图片描述

0x02.2找注册逻辑

先在软件的激活框随便输入点啥,提示: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

[推荐]看雪企服平台,提供项目众包、渗透测试、安全分析、定制项目开发、APP等级保护等安全服务!


文章来源: https://bbs.pediy.com/thread-259421.htm
如有侵权请联系:admin#unsafe.sh