PVS-Studio漏洞分析
PVS-Studio是一个静态代码扫描工具,还不错。
先通过dnspy调试主进程可以发现检查授权文件的的进程是一个子进程,如:
PVS-Studio.exe --checkreg=yes --lic-file="D:\pvs.lic"
因此要解决授权问题,核心应该是调试PVS-Studio.exe这个进程。通过命令行分析我们可以知道该进程肯定是要读取授权文件才能查询授权状态,因此Windows API的kernal32.CreateFile、kernal32.WriteFile都可以作为关键点来作为突破口。
在x64dbg中调试PVS-Studio.exe,在kernal32.WriteFile处下断点,可以找到类似下面的代码:
000000014001E4C0 | 55 | push rbp | 000000014001E4C1 | 41:57 | push r15 | 000000014001E4C3 | 41:56 | push r14 | 000000014001E4C5 | 41:55 | push r13 | 000000014001E4C7 | 41:54 | push r12 | 000000014001E4C9 | 56 | push rsi | 000000014001E4CA | 57 | push rdi | 000000014001E4CB | 53 | push rbx | 000000014001E4CC | 48:81EC E8000000 | sub rsp,E8 | 000000014001E4D3 | 48:8DAC24 80000000 | lea rbp,qword ptr ss:[rsp+80] | 000000014001E4DB | 48:C745 60 FEFFFFFF | mov qword ptr ss:[rbp+60],FFFFFFFFFFFFFFFE | 000000014001E4E3 | 88CB | mov bl,cl | 000000014001E4E5 | 0F57C0 | xorps xmm0,xmm0 | 000000014001E4E8 | 0F2945 C0 | movaps xmmword ptr ss:[rbp-40],xmm0 | 000000014001E4EC | 48:C745 D0 00000000 | mov qword ptr ss:[rbp-30],0 | 000000014001E4F4 | 48:C745 D8 07000000 | mov qword ptr ss:[rbp-28],7 | 000000014001E4FC | 48:C745 48 00000000 | mov qword ptr ss:[rbp+48],0 | 000000014001E504 | C645 5F 00 | mov byte ptr ss:[rbp+5F],0 | 000000014001E508 | 48:8D4D C0 | lea rcx,qword ptr ss:[rbp-40] | 000000014001E50C | 48:8D55 48 | lea rdx,qword ptr ss:[rbp+48] | var_expire_time 000000014001E510 | 4C:8D45 5F | lea r8,qword ptr ss:[rbp+5F] | var_license_type 000000014001E514 | E8 B7DAFFFF | call <pvs-studio.get_license_details> | get_license_details 000000014001E519 | 84DB | test bl,bl | 000000014001E51B | 74 3C | je pvs-studio.14001E559 | 000000014001E51D | 85C0 | test eax,eax |
上面的pvs-studio.get_license_details就是我们想找的那个函数,一共有三个地方引用这个函数。所以我们将get_license_details这个函数改成下面这样:
000000014001BFD0 | 3641:C700 03000000 | mov dword ptr ss:[r8],3 | set license type: 3, enterprise 000000014001BFD8 | 36:C702 809277E8 | mov dword ptr ss:[rdx],E8779280 | set expire time, 2093/8/3.... 000000014001BFDF | 90 | nop | 000000014001BFE0 | B8 03000000 | mov eax,3 | set return value: 3, valid license 000000014001BFE5 | C3 | ret |
这将会无视授权文件,直接返回授权类型并设置一个巨大无比的试用期限,然后直接返回3。这样你的目的就达到了。
安装包下载地址:
链接: https://pan.baidu.com/s/10j9cnmqT8FUwBbuKxjNXyw?pwd=ab7i 提取码: ab7i