概况
音视频的码流分析工具在做音视频编码的学习研究中一直是最强利器,目前该领域的专业软件包括:Elecard 和 ViCue,由于 Elecard 使用 HASP SL 导致破解异常困难,本文就从 ViCue 入手,分析与破解其两款产品。
ViCue 使用 LimeLM 来保护产品,这款防护工具网上已经有一些研究了,可以从 API 调用入手。
VQP
经过 x64dbg 和 IDA Pro 联动调试,仅需要修改两个跳转即可完美跳过。
main
这里不能直接去掉调用,因为这会导致 License 缺失,无法正常使用;而是应该去掉 checkoutLicenseState() 相关的判定逻辑。
应该去除的逻辑
这里是直接在 checkoutLicenseState() 调用之后判定其返回值,跳转到应用程序窗口创建逻辑:
直接修改跳转 显示程序窗口
checkoutLicenseState
完成上述修改之后还不能正确识别 License,还需要修改 checkoutLicenseState() 中的 License 判定逻辑,通过分析,最后一段是 企业版 的逻辑:
企业版
所以类似以上,修改一个跳转:
函数头部就开始跳转 跳到函数尾部的逻辑
VQA
VQA 的调用方式更加隐蔽,而且使用了混淆,使得直接修改调用,变得困难了。
因为可以无限制试用,那一种思路是:hook turoboactivate.dll 的返回值,绕过三天试用。
试用
使用 frida 完成这项工作更方便一些:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| const TA_UseTrial = Module.getExportByName('TurboActivate.dll', 'TA_UseTrial'); Interceptor.attach(TA_UseTrial, { onEnter: function (args) { console.log("TA_UseTrial ARG: ", args[0], args[1], args[2]) }, onLeave: function (retval) { retval.replace(0x00000000) console.log("TA_UseTrial RET: ", retval) } });
const TA_TrialDaysRemaining = Module.getExportByName('TurboActivate.dll', 'TA_TrialDaysRemaining'); var TA_TrialDaysRemaining_arg2; Interceptor.attach(TA_TrialDaysRemaining, { onEnter: function (args) { TA_TrialDaysRemaining_arg2 = args[2] console.log("TA_TrialDaysRemaining ARG: ", args[0], args[1], args[2].readInt()) }, onLeave: function (retval) { retval.replace(0x00000000) TA_TrialDaysRemaining_arg2.writeInt(0x00010086) console.log("TA_TrialDaysRemaining RET: ", retval, "; args[2]: ", TA_TrialDaysRemaining_arg2.readInt()) } });
const TA_IsActivated = Module.getExportByName('TurboActivate.dll', 'TA_IsActivated'); Interceptor.attach(TA_IsActivated, { onEnter: function (args) { console.log("TA_IsActivated ARG: ", args[0], args[1], args[2].readInt()) }, onLeave: function (retval) { retval.replace(0x00000000) console.log("TA_IsActivated RET: ", retval) } });
|
若要能够无感启动与关闭,可以使用 bat + vbs 脚本:
1
| (F:\App\miniconda3\Scripts\activate.bat F:\App\miniconda3\) && conda activate re && frida ./VQAnalyzer.exe -l vqhook.js
|
1 2
| set ws=WScript.CreateObject("WScript.Shell") ws.Run "start.bat",0
|