吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 47209|回复: 111
收起左侧

[MacOS逆向] EdrawMax的保护与绕过方法

  [复制链接]
datochan 发表于 2018-5-26 07:17
本帖最后由 besterChen 于 2018-5-26 07:34 编辑

刚发现的这个软件,画图很好用,奈何一直没有找到MACOSX环境9.1版本的破解版。所以就花时间自己分析了一下,有如下成果与大家分享。

软件大致的保护思路


软件整体的加密思路大致如下几个步骤:

  1. 软件采用C/S结构的网络认证方法。
  2. 获取系统的硬件标识符(后面详细说明获取方法)提交给服务端,服务端生成任意20位字符(字母数字组合)作为序列号(用作用户身份标识)。
  3. 服务端用RSA的私钥对硬件标识符进行加密得到的密文就是激活码,用户名随意填写。
  4. 用户点击激活时,除了校验填写的数据是否合规之外,还会发请求给服务端,服务端校验序列号是否存在,以此判断激活是否成功。
  5. 如果网络请求失败可以离线填写激活码来激活(这就留下了安全隐患,可以绕过网络验证)。
  6. 每次软件启动,都会将激活码用公钥解密并与系统的硬件标识符进行校验:一致就认证成功,否则就认证失败(这里也存在隐患,要暴力破解可以从这里入手,但是暗桩较多且不完美不建议从这里入手)。

绕过保护的思路


由于可以本地验证,我们可以生成自己的RSA公钥私钥,来对系统的硬件标识符进行加密,以此来绕过软件的认证。

通过分析可知在软件的ObjectModule.dll(libObjectModule.dylib)中存储了RSA加密的公钥,将其替换成我们自己的,然后我们用自己的私钥加密硬件标识符,这样就可以认证成功了。

另外需要说明的一点是,MACOSX系统中libObjectModule.dylib存储公钥的空间不足。我对OSX系统的mach-o文件格式不了解所以只能通过内存补丁的方法来替换公钥,大致思路是:

  1. 通过分析可知libObjectModule.dylib文件加载后会在dllmain将公钥赋值给到导出符号: __ZN12LocalizeUtil10s_locCodesE中,如下图可知导出符号的偏移是: 0x0535be0.

    MachOView查看导出符号偏移

  2. 自己写程序,监控这个导出符号值的变化,来替换公钥, 我是另起了个线程监控这个值。本来是想写钩子实现,但是C代码用FishHook库这种导入表钩子不知道如何挂钩dllmain这种方法,貌似它只能挂钩 nl或者la类的符号表。

  3. 这个导出符号的内存结构是QT的QByteArray的内存结构,所以我用QT5写这个dylib(libDTPatcher.1.0.0.dylib)直接替换不用自己拼这个内存结构了。

  4. yololib 添加自己的dylib为依赖,我找了一个比较小的dylib: libImporter.1.0.0.dylib来加载自己的dylib文件。

  5. keygen就用不着说了,一切都很明了。

硬件标识符的获取方法


整个硬件信息的获取及编码方法是通过 libImporter.1.0.0.dylib 的中导出方法: __int64 __fastcall PDFExporter::exportEffectShine(PDFExporter *this) 进行的,有兴趣的童鞋可以跟着一起分析一下,这下只说结果,不贴代码了。

Windows 环境

  1. 通过 wmic CPU get ProcessorID 命令获取CPUID。

    例如得到的是: BFEBFBFF00040661

  2. 通过 wmic diskdrive get SerialNumber 命令获取硬盘序列号。

    例如得到的是: 4e4d534246484b524e314d443733565243444a57

  3. 通过 wmic csproduct get UUID 命令获取主板的UUID。

    例如得到的是: EE049876-335D-C447-BD48-A27C393B5C95

  4. 将上面得到的字符串用 - 字符以 UUID-硬盘序列号-CPUID 的顺序拼接起来。

    例如得到的是: EE049876-335D-C447-BD48-A27C393B5C95-4e4d534246484b524e314d443733565243444a57-BFEBFBFF00040661

将这些字符串用MD5加密,并截取密文的6~9个字符。如下:

// 1. `EE049876-335D-C447-BD48-A27C393B5C95-4e4d534246484b524e314d443733565243444a57-BFEBFBFF00040661` 用MD5加密并截取字符串: 
664BF64B6C183B297BC26A723EED0E23
     ----
     5(4): 64B6

// 2. 主板UUID `EE049876-335D-C447-BD48-A27C393B5C95` 用MD5加密并截取字符串: 
22D148767E9169B049BF7ADC653DB4D6
     ----
     5(4): 8767

// 3. 硬盘序列号 `4e4d534246484b524e314d443733565243444a57` 用MD5加密并截取字符串: 
4400AAFBA449B4CBF8DADB3F78CC0405
     ----
     5(4): AFBA

// 4. 将上面截取得到的字符转换成小写字母拼接起来得到硬件标识符: `64b68767afba`

MacOSX 环境

  1. 获取硬件UUID

    ioreg -c IOPlatformExpertDevice | grep 'IOPlatformUUID' // 这样加密后得到第二组token

    | "IOPlatformUUID" = "BFE1056A-DBE1-5CC2-BDB8-EBC3A80C108B"
    加密得到: 22B76BFDD00D1E58BC2733D2E8FE93C9,截取6~9个字符得到: BFDD

  2. 获取系统序列号

    ioreg -c IOPlatformExpertDevice | grep 'IOPlatformSerialNumber'

    | "IOPlatformSerialNumber" = "C02NGJPVG3QC"
    加密得到: 5AE2186EB36AD059F3A7DDDC4A8D7FD1,截取6~9个字符得到: 86EB

  3. 将上面两个完整字符串用-连接起来,得到:

    BFE1056A-DBE1-5CC2-BDB8-EBC3A80C108B-C02NGJPVG3QC
    加密得到: D7207A086F1353DABCFBAA52B8A57DC3,截取6~9个字符得到: A086

  4. 将上面截取出来的字符串按照3,1,2的顺序排列并转换成小写字母得到硬件标识符: a086bfdd86eb

后记


以上思路应该是通杀现有所有平台和版本的,我上传了补丁和我生成的key文件,keygen由于太大,大家自己到github上下载吧。

相关的代码与文件,我放在github上了: https://github.com/datochan/DTEdrawMax,keygen 方面,由于我不用windows这部分代码空缺,有需要的童鞋可以自己补全这部分代码。

21867911.png

WIN修改的dll及key文件.zip

1.96 MB, 下载次数: 637, 下载积分: 吾爱币 -1 CB

补丁及key文件.zip

923.73 KB, 下载次数: 456, 下载积分: 吾爱币 -1 CB

免费评分

参与人数 25威望 +2 吾爱币 +41 热心值 +25 收起 理由
hjbfa + 1 + 1 我很赞同!
shiqianwei + 1 + 1 哇哦!涨姿势了!
happyzjz + 1 + 1 谢谢@Thanks!
hkchenhao + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
掠影 + 1 + 1 我很赞同!
crazywdd + 1 + 1 谢谢@Thanks!
dfui + 1 + 1 谢谢@Thanks!
狗熊宝宝笨 + 1 + 1 我很赞同!
icelemon1314 + 1 + 1 感谢大神啊,终于有mac版本的了
backtrace + 2 + 1 谢谢@Thanks!
qzr + 1 + 1 用心讨论,共获提升!
Sound + 2 + 10 + 1 已经处理,感谢您对吾爱破解论坛的支持!
感冒的猪baby + 2 + 1 谢谢@Thanks!
温柔的一哥 + 2 + 1 热心回复!
打酱油路过的 + 1 + 1 我很赞同!
qaz003 + 1 + 1 用心讨论,共获提升!
610100 + 3 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
wajika + 1 + 1 我很赞同!
gfjykldd + 1 + 1 谢谢@Thanks!
zhangbaida + 3 + 1 用心讨论,共获提升!
cii566 + 1 + 1 我很赞同!
samvon + 1 + 1 谢谢@Thanks!
yiwai2012 + 2 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
Ravey + 1 + 1 谢谢@Thanks!
cyouakari + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| datochan 发表于 2018-6-14 14:24
本帖最后由 besterChen 于 2018-6-14 15:04 编辑
zxy20014 发表于 2018-6-4 16:43
我看他的mindmaster也是采用这种方法,楼主能否写个这个的替换文件,哈哈
libedimporter.1.0.0.dylib

恩,这个软件我也在用~

公钥是存储在 `libedobjectmodule.1.0.0.dylib` 的 `_ZN9EEMMShape11s_mmLayoutsE + 0x10` 中。

由于我QT的开发环境已经卸载了,所以就直接修改帖子附件中的 `libDTPatcher.1.0.0.dylib`文件了。
找了个比较小的dylib用来加载自己的dylib文件。

为了避免有人也要windows版本的,顺便再追加一个windows版本的附件。

具体参考附件,破解方法都是一样的。

MindMaster_patcher.zip

28.16 KB, 下载次数: 58, 下载积分: 吾爱币 -1 CB

edobjectmodule.dll.zip

825.09 KB, 下载次数: 64, 下载积分: 吾爱币 -1 CB

qzr 发表于 2018-5-27 16:32
f23258 发表于 2018-5-27 14:00
不好意思,是我表达没到位,那两个截图的对比,主要是在图形和名称上,试用版物品和名称是对得上的,而替 ...

好像有一个md5校验,你搜索字符串mdfive就能找到几处,这个可能要patch掉,还有一个可能的问题是选择打印的时候出错,我不知道这样替换会不会遇到。
jgs 发表于 2020-6-14 22:57
CRoot 发表于 2020-4-29 18:17
似乎10.x的变动也不是很大,感谢楼主给的启发。
1.png

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
datochan + 1 + 1 我很赞同!

查看全部评分

 楼主| datochan 发表于 2018-8-28 10:11
deadlybugs 发表于 2018-8-18 18:31
9.2版本出来了,楼主的办法还有效吗? 试着MAC上直接拿9.1的覆盖,程序闪退。

这个补丁是依赖 EdrawMax9.1版本写的,补丁中为了省事儿用了硬编码,所以肯定无法直接用于9.2版本的。

通过分析可知libObjectModule.dylib文件加载后会在dllmain将公钥赋值给到导出符号: __ZN12LocalizeUtil10s_locCodesE中,Mach0View查看导出符号的偏移是: 0x0535be0。


补丁中直接使用了这个便宜的硬编码,要想提高通用性需要解析 libObjectModule.dylib文件的mach-o文件头动态获取此偏移地址就可以通杀目前市面上所有的版本了。

9.2版本的偏移地址是: 0x052BC70,只需要修改补丁文件,重新编译即可。

出这个帖子也只是为了说明思路,不想直接提供通杀的破解补丁,还请见谅。
qzr 发表于 2018-5-26 13:18
本帖最后由 qzr 于 2018-6-14 01:14 编辑

其实这个暗桩并不多,爆破也不是很难,各位也可以试试我这个补丁(这软件算是较为优秀的国产软件,所以我故意没有去掉试用版和购买的标识,但功能应该正常)

但是楼主注意下这个程序是有自校验的!简单替换公钥是会遇到错位暗桩的!

Edraw Max 9.1.zip

179.91 KB, 下载次数: 240, 下载积分: 吾爱币 -1 CB

 楼主| datochan 发表于 2018-5-27 07:27
本帖最后由 besterChen 于 2018-5-27 07:52 编辑

keygen不用非得用QT写,随便一个能做rsa加密的语言就可以。而且原理都已经知道了,也没有必要非得纠结自己是否会编程啊,办法总比困难多,为啥非得逼我作一个宣传破解软件的呢?

我来一个一行代码不写就可以免费使用这个软件的方法

需要用到的工具

  1. MD5加密工具: http://tool.chinaz.com/Tools/md5.aspx
  2. rsa私钥加密工具: http://tool.chacuo.net/cryptrsaprikey
  3. base64解码工具(支持16进制显示):http://www1.tc711.com/tool/BASE64.htm
  4. 一款支持正则的编辑器: Sublime Text

操作步骤

  1. 根据楼主帖子的文字收集硬件标识码,并通过MD5工具加密,得到最终的硬件标识符, 比如我电脑的硬件标识符是: a086bfdd86eb
  2. 用rsa加密工具以附件中的秘钥文件对硬件标识符加密,得到的结果是

    vagEcQbQ5wMYIEzvD7a7mLIoYAsN5yhXbdQU7Uq+p59H5qjt54r4bHleRmNzxhv6M0LwPuiOV47l+jbilbK/NCTPqKtpvH2lIF4Nmh+clp7MILQRdczI45Fryu4SZQAzIFBhgf5MDCiHS7dqdMm+dj6D+0TKSmmSKzwZ3Y10njU=
    01.jpg

  3. 用base64工具解码为十六进制字符,如下图:

    02.jpg

  4. 用编辑器去掉无用字符,得到最终的激活码:

    bda8047106d0e70318204cef0fb6bb98b228600b0de728576dd414ed4abea79f47e6a8ede78af86c795e466373c61bfa3342f03ee88e578ee5fa36e295b2bf3424cfa8ab69bc7da5205e0d9a1f9c969ecc20b41175ccc8e3916bcaee1265003320506181fe4c0c28874bb76a74c9be763e83fb44ca4a69922b3c19dd8d749e35

破解过程

  1. 安装原版程序(我的是目前最新的9.1版本, 其它版本应该也通用)。
  2. 运行起来,断网,输入用户名,随机的20位大写字母数字组合的字符串,点击激活。
  3. 提示网络失败后,输入刚得到的激活码点击手工激活。

    03.jpg

  4. 将帖子附件中的文件替换到应用程序指定目录中。

    MACOSX系统是在应用程序包的Framework目录下。
    WINDOWS系统是在应用程序的安装根目录下。

  5. 重新启动应用程序,破解成功。

    04.jpg

windows环境也是一样的过程,就不用重新截一遍图了.

免费评分

参与人数 2吾爱币 +1 热心值 +2 收起 理由
610100 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
qaz003 + 1 + 1 热心回复!

查看全部评分

cii566 发表于 2018-5-26 09:34
哎,我是小白,怎么用啊?windows用户居多,老大能不能搞个windows的版本的?网上windows的也不好用。
kinyon 发表于 2018-5-26 08:20
不好使,退钱呀,哈哈
f23258 发表于 2018-5-26 07:47
这个很厉害啊,谢谢分享。
之前一直在用8.4版本。
冥界3大法王 发表于 2018-5-26 08:48
kinyon 发表于 2018-5-26 08:20
不好使,退钱呀,哈哈

人穷智短。。。
tianzdws 发表于 2018-5-26 08:53

这个很厉害
lddhnly 发表于 2018-5-26 09:02
分享一下,看看效果,谢谢。
azw80 发表于 2018-5-26 10:29
WIN的用户无法享受了~
justday 发表于 2018-5-26 10:52
WINDOWS可用吗
 楼主| datochan 发表于 2018-5-26 11:05 来自手机
本帖最后由 besterChen 于 2018-5-26 11:20 编辑

WIN环境也是一样的过程,没有一点儿变化啊:

  1. win版本已经替换过公钥的dll以及秘钥文件都已经给出来了。
  2. 硬件标识符的获取方法也给出了

    获取硬件标识符的截图

  3. 只需要自己写个rsa的加密程序用秘钥生成激活码就可以了,只是我电脑配置不高,虚拟机里面装不了QT环境没写到keygen代码中而已。

我给出win和osx的效果图。

osx.png
bg1.png
id.png
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-26 10:27

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表