欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

做设计的朋友注意了!看完此文,你将获得永久的Sketch破解版

来源:本站整理 作者:佚名 时间:2020-02-22 TAG: 我要投稿

本文旨让网络安全专业人员更好地了解网络和系统中的潜在漏洞风险,提高其攻防技巧。接下来将向你展示如何只使用Ghidra SRE轻而易举地破解Sketch。为什么要选择Sketch作为破解对象呢?Sketch 是一款适用于所有设计师的矢量绘图应用,特点是容易理解,上手简单,对于有设计经验的设计师来说,入门门槛很低,但就是软件太贵。从2019年九月到2020年二月的半年中,Sketch 经历了高密度的更新节奏,从58版本一路更新到了62版本,一些已有功能得到了优化和补充,也有一些全新的大功能,本文我用的版本是Sketch v63.1(最新更新)。另外,我再简单介绍一下Ghidra SRE,Ghidra 是由 NSA 的研究理事会为 NSA 的网络安全任务开发的软件逆向工程(SRE)框架,它有助于分析恶意代码和病毒等恶意软件,并可以让网络安全专业人员更好地了解其网络和系统中的潜在漏洞。
破解之前的准备
我强烈建议你为SketchApp(以后简称为Sketch)可执行文件创建备份,该可执行文件的通常位置在/Applications/SketchApp/Contents/MacOS中。唯一要做的就是将Sketch复制到同一目录中,但使用不同的名称。

打开Ghidra并创建一个新项目,从上述视图中导入Sketch可执行文件。要导入,只需将可执行文件拖到Ghidra中的项目视图即可。具体过程,请参阅Ghidra文档或这段精彩视频,以了解有关Ghidra基础的更多信息。如果你需要停止并稍后继续工作,这将简化你的逆向工程。现在,双击Ghidra项目3的Sketch,然后让Ghidra完整分析该项目(可能需要几分钟)。

查找可用的试用版
有不同的方法可以找到试验实施的位置,第一个也是最重要的是使用XREF字符串剩余的试用天数,这在启动Sketch时会显示。另一种方法是在“符号树”窗口中搜索字符串BCLicenseManager。由于上述字符串直接引用方法numberOfDaysLeftInTrialMode,因此我们也可以在同一窗口中完全搜索该字符串。

当我们将Ghidra指向此函数时,我们可以看到下一个伪代码;它接受两个参数。有趣的参数是param_1。此参数的严格要求是参考使用哪种许可证。如果遵循参考,则Sketch中有两个选项可用:BCRegularLicense和BCCloudLicense。一种用于离线激活,另一种用于基于云的激活。因此,此BCLicenseManager类具有许可证选择器,该选择器返回一些许可证实例。
long_long numberOfDaysLeftInTrialMode(ID param_1,SEL param_2)
{
  ...
 
  puVar1 = _objc_msgSendSuper2;
  uVar3 = (*(code *)_objc_msgSendSuper2)(param_1,"license");
  uVar3 = _objc_retainBlock(uVar3);
  (*(code *)puVar1)(uVar3,"remainingTimeInterval");
  uVar4 = (*(code *)puVar1)(&_OBJC_CLASS___NSDate,"dateWithTimeIntervalSinceNow:");
  uVar4 = _objc_retainBlock(uVar4);
  (*(code *)_objc_retain)(uVar3);
  uVar3 = (*(code *)puVar1)(&_OBJC_CLASS___NSCalendar,"currentCalendar");
  uVar3 = _objc_retainBlock(uVar3);
  uVar5 = (*(code *)puVar1)(&_OBJC_CLASS___NSDate,"date");
  uVar5 = _objc_retainBlock(uVar5);
  uVar6 = (*(code *)puVar1)(uVar3,"components:fromDate:toDate:options:",0x10,uVar5,uVar4,0);
  uVar6 = _objc_retainBlock(uVar6);
  puVar2 = _objc_retain;
  (*(code *)_objc_retain)(uVar5);
  (*(code *)puVar2)(uVar3);
  lVar7 = (*(code *)puVar1)(uVar6,"day");
  (*(code *)puVar2)(uVar6);
  (*(code *)puVar2)(uVar4);
  return lVar7;
}
接下来,我们将调用函数remainingTimeInterval,然后再进行一次计算,该计算用于通过currentCalendar和dateWithTimeIntervalSinceNow使用剩余时间。如果我们搜索名为first (remainingTimeInterval)的方法,我们可以看到我们通过BCLicenseManager获得两个可能的许可证类引用是非常正确的。

我们将使用-in BCRegularLicense,因为我们不需要处理云保护和向/etc/hosts添加内容让我们看看里面是什么。我们在其中调用了一些有趣的函数:validityInterval,它基本上与endTime(当许可证到期时)和networkTime/currentTime的组合一起工作。我们还有通知impl的isValid方法,如果许可仍然可用。
double remainingTimeInterval(ID param_1,SEL param_2)
{
  ...
  puVar2 = _objc_msgSendSuper2;
  uVar1 = (*(code *)_objc_msgSendSuper2)(param_1,"validityInterval");
  uVar4 = _objc_retainBlock(uVar1);
  uVar1 = (*(code *)puVar2)(uVar4,"endDate");
  uVar1 = _objc_retainBlock(uVar1);
  uVar6 = (*(code *)puVar2)(param_1,"networkTime");
  uVar5 = _objc_retainBlock(uVar6);
  uVar6 = (*(code *)puVar2)(uVar5,"currentDate");
  uVar6 = _objc_retainBlock(uVar6);
  (*(code *)puVar2)(uVar1,"timeIntervalSinceDate:",uVar6);

[1] [2] [3] [4]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载