提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
转帖|使用教程|编辑:杨鹏连|2021-07-20 14:20:36.827|阅读 287 次
概述:由于工作需要,经常会接触一些加过壳的软件,VMProtect是其中自己比较'欣赏'的一款加壳软件,Tls回调函数分析。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
VMProtect是一种很可靠的工具,可以保护应用程序代码免受分析和破解,但只有在应用程序内保护机制正确构建且没有可能破坏整个保护的严重错误的情况下,才能实现最好的效果。
VMProtect通过在具有非标准体系结构的虚拟机上执行代码来保护代码,这将使分析和破解软件变得十分困难。除此之外,VMProtect还可以生成和验证序列号,限制免费升级等等。
VMProtect正版授权在线订购享受最低价,仅售801元起!还不赶紧加入你的订购清单?>>更多详情可点击咨询购买
Tls回调函数(上)
继续看下程序的Handler是如何计算的,查看VmJMP代码:
算法教简单:Handler表中根据BYTE:[RSI-1]取偏移,循环右移5位 ,再加上Handler基址。
寄存器状态如下:
Handler数量有0n256个之多,我们此次将Tls回调函数作为分析目标,先走一小步,只看那些会用到的,没用到的先不管它。
首先需要确定Tls回调函数的结束地址,在启动中断在Tls时,查看调用栈(下图),Tls回调执行完毕后,会返回到00007FFDBB969A1D这个地址,可以在这个地址下断,用于标识Tls回调函数已经执行完毕。
写脚本如下:
vardel $handlerTable vardel $handlerCount vardel $handlerBaseAddress vardel $vmJmp vardel $tlsEnd var $handlerTable, VMP_UserDebugger.exe:0 + 19065C var $handlerCount, 0x100 var $handlerBaseAddress, VMP_UserDebugger.exe:0 - 54F80000 var $vmJmp, VMP_UserDebugger.exe:0 + 18C8F2 var $tlsEnd, ntdll.dll:0 + 19A1D clearlog vmtraceclear vminit $handlerTable bd bp $tlsEnd bp $vmJmp SetBreakpointSilent $tlsEnd SetBreakpointSilent $vmJmp .begin: be $tlsEnd be $vmJmp g bd $vmJmp bd $tlsEnd .loop: cmp cip, $tlsEnd jz .leave cmp cip, $vmJmp jz .trace log "Unexpected breakpoit: {p:rip}" jmp .leave .trace: vmtracestart "vm_{p:rcx}", 1 cmp $result, 1 jnz .begin ticnd "cip == $vmJmp || cip == $tlsEnd" vmtracestop jmp .loop .leave: bd $tlsEnd bd $vmJmp ret调试启动程序,中断在Tls回调函数起始处,执行上文脚本,各个handler的trace文件会以名字vm_[handler地址].trace64保存至X64DBG所在文件夹下(可调用vmclear删除),跟踪文件见附件trace.zip。
看几个有代表性的Handler:
从上面两个Handler可以判断出栈应是2字节对齐的。
我们注意到会有多个Handler实现同一个功能。
重新调试执行程序,修改脚本,使用已分析的Handler翻译程序(vmdump):
vardel $handlerTable vardel $handlerCount vardel $handlerBaseAddress vardel $vmJmp vardel $tlsEnd var $handlerTable, VMP_UserDebugger.exe:0 + 19065C var $handlerCount, 0x100 var $handlerBaseAddress, VMP_UserDebugger.exe:0 - 54F80000 var $vmJmp, VMP_UserDebugger.exe:0 + 18C8F2 var $tlsEnd, ntdll.dll:0 + 19A1D clearlog vmtraceclear vminit $handlerTable bd bp $tlsEnd bp $vmJmp SetBreakpointSilent $tlsEnd SetBreakpointSilent $vmJmp .begin: g .loop: cmp cip, $tlsEnd jz .leave cmp cip, $vmJmp jz .dump log "Unexpected breakpoit: {p:rip}" jmp .leave .dump: vmdump rcx, rsi, rbx jmp .begin .leave: bd $tlsEnd bd $vmJmp ret得到伪代码如下(见附件vm_tls.txt):
[Anakin] VmPOP V_98 [Anakin] VmPUSH FFFFFFFF9F5A5C32 [Anakin] VmADD [Anakin] VmPOP V_40 [Anakin] VmPOP V_B8 [Anakin] VmPOP V_28 [Anakin] VmPOP V_18 [Anakin] VmPOP V_00 [Anakin] VmPOP V_78 [Anakin] VmPOP V_A0 [Anakin] VmPOP V_90 [Anakin] VmPOP V_40 [Anakin] VmPOP V_20 [Anakin] VmPOP V_68 [Anakin] VmPOP V_50 [Anakin] VmPOP V_58 [Anakin] VmPOP V_30 [Anakin] VmPOP V_B0 [Anakin] VmPOP V_38 [Anakin] VmPOP V_48 [Anakin] VmPOP V_70 [Anakin] VmPOP V_88 [Anakin] VmPOP V_10 [Anakin] VmPOP V_A8 [Anakin] VmPUSH 0000000064765E24 [Anakin] VmPUSHB8 00 [Anakin] VmPUSH 000000014018B3E7 [Anakin] VmPUSH V_98 [Anakin] VmADD [Anakin] VmPOP V_08 [Anakin] VmREADB [Anakin] VmSBP [Anakin] VmREADB [Anakin] VmNOTANDB [Anakin] VmPOP V_60 [Anakin] VmADDB [Anakin] VmPOP V_10 ... ... ...3W多行的汇编代码已然被翻译为300多行的伪代码,是一个较大的进步,后面我们需要进一步分析这些伪代码,进而把Tls回调的执行搞清楚。
如果您对该加密/解密软件感兴趣,欢迎加入vmpQQ交流群:740060302
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn
文章转载自:本文探讨 SQL Server 中 NULL 和空值之间的区别,并讨论如何有效地处理它们。
Unity 是一款功能极其丰富的游戏引擎,允许开发人员将各种媒体集成到他们的项目中。但是,它缺少最令人兴奋的功能之一 - 将 Web 内容(例如 HTML、CSS 和 JavaScript)直接渲染到 3D 场景中的纹理上的能力。在本文中,我们将介绍如何使用 DotNetBrowser 在 Unity3D 中将 Web 内容渲染为纹理。
DevExpress v24.2帮助文档正式发布上线了,请按版本按需下载~
本教程将向您展示如何用MyEclipse构建一个Web项目,欢迎下载最新版IDE体验!
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@pclwef.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢