Advertisement

Zuken CADSTAR 16 破解流程

阅读量:

1.什么是CADSTAR?

复制代码
     Home Page: https://www.zuken.com
     What's New in CADSTAR 16: https://www.zuken.com/en/products/pcb-design/cadstar/whats-new/cadstar-whats-new/cadstar-16-features
    
    
      
      
    

2.授权方式

此前网络上流传着CADSTAR13的破解版本,经过分析发现v13版本采用了FlexNet授权机制进行保护,该破解文件对ECC校验进行了修改,并利用FlexNet SDK开发了生成许可证的程序。所涉及的补丁文件包括以下内容:

engineer.exe
impulse.exe
Log.txt
pred.dll
rdr2adv.exe
scs.exe
senario.exe
sysutils.dll
gradianWX\bin\winnt\gradian.EXE

通过对比分析可知,CADSTAR16版本使用的是FlexNet 11.11.1授权机制,若要编写注册机,则首先需要获取SDK。目前网络上公开的SDK版本为FlexNet SDK 11.9.1。

3.破解过程

3.1 确定VENDOR_NAME
通过OD加载engineer.exe文件,查找固定值0x87654321。随后找到邻近地址0x12345678,在其上方的CALL指令处设置断点,执行F9命令运行程序直至触发断点,此时仍可观察到VENDOR_NAME的值为zuken。

这里写图片描述

3.2 找FEATURE_NAME
核心步骤在于定位lc_checkout函数,通过IDA工具加载11.9.1版本SDK中lmgr.lib库文件所包含的lm_ckout.obj对象文件,进而找到对应函数_lc_checkout。首先需对该函数在11.9.1版本中的结构特征进行分析与观察,随后再在11.11.1版本中确定lc_checkout函数的具体位置。

这里写图片描述

通过肉眼观察,发现存在一个0x20000的常量,该常量被&和^操作符各使用了一次。在OD中搜索指令序列“and ecx, 0x20000”,共找到四处匹配结果。经人工比对后确认,第一处函数流程与IDA中的分析结果基本一致,因此可以初步判断该函数即为新版11.11.1中的lc_checkout函数。

同时也可以借助SDK 11.11.1所提供的IDA SIG文件,直接定位到lc_checkout函数

在函数入口处设置断点后,通过F9键执行程序直至到达该函数入口位置。

这里写图片描述

在寄存器与堆栈区域中,已经能够识别出FEATURE_NAME与FEATURE_VERSION的存在。同时,在数据窗口中还可以发现其他相关的FEATURE信息。通过多次调试与观察可以得知,大多数情况下FEATURE_NAME均存储于PE文件的data段内,并且其格式通常表现为类似“name version epxxxx”的字符串形式。因此,在OD工具中可通过按下ALT+M键打开内存窗口,定位至PE文件的data段,随后双击进入数据窗体,在其中搜索“ep2”、“ep3”、“ep4”等相似字符,查看是否以“name version epxxxx”的方式存储,从而能够完整地识别出所有 FEATURE 信息。

这里写图片描述

对其他文件实施相同处理方式,所提取到的特征信息详见下表

filename feature version unkonw
enginer.exe emc_server 25.0 ep4416
emc_front_loaded 25.0 ep4418
dc_analysis 25.0 ep4454
sysutils.dll cadstar_gold 19.0 ep2553
cadstar_silver 19.0 ep2554
cadstar_bronze 19.0 ep2555
emcrules_auth 4.0 ep2698
cadstar_eval 19.0 ep2998
cadstar_beta 19.0 ep2999
cadstar_field_solver 19.0 ep3085
cadstar_library_editor 19.0 ep3099
cadstar_schematics 19.0 ep3103
freedom 9.0 ep3314
cstar_viewer_plus 19.0 ep3675
cadstar_des_view_ppr 19.0 ep3690
cadstar_des_view_rep_gen 19.0 ep3691
embedded_router 19.0 ep3876
emd_2dcheck 4.0 ep3942
cadstar_variants 19.0 ep3953
pred_ibase 25.0 ep4191
pred_cbase 25.0 ep4194
pred_interactive 25.0 ep4195
pred_2000 25.0 ep4196
pred_5000 25.0 ep4197
pred_single_pass_batch 25.0 ep4205
pred_multi_pass_batch 25.0 ep4206
pred_memory_batch 25.0 ep4209
pred_mitre_batch 25.0 ep4210
cadstar_ds1_interface 3.0 ep4372
pred_pattern_batch 25.0 ep4211
hs_route 25.0 ep4213
hs_place_and_route 25.0 ep4214
cadstar_scm_variants 19.0 ep4263
hotstage_verify 25.0 ep4297
pred_2000_s 25.0 ep4304
pred_2000_hs 25.0 ep4305
cadstar_datasheet_pub 19.0 ep4323
cadstar_shape_trim 19.0 ep4324
pred_six_layer_enh 25.0 ep4336
pred_max_layer_enh 25.0 ep4337
viewer_cadif_import 19.0 ep4377
lightning_spice_gen 25.0 ep4463
cadstar_rules_by_area 19.0 ep4492
cadstar_migration_link 1.0 ep4543
cstar_idf_link 4.0 ep4569
cstar_constraint_browser 25.0 ep4577
analysis_results_viewer 2.0 ep4593
cadstar_copper 19.0 ep4599
cadstar_scm_copper 19.0 ep4600
impulse.exe idem_model_import 6.0 ep4534
sim_lib_manager 6.0 ep4222
scs.exe si_interactive_simulation 25.0 ep4221
si_batch_simulation 25.0 ep4417
lightning_spice_gen 25.0 ep4463
pred.dll pred_ibase 25.0 ep4191
pred_vbase 14.0 ep4192
pred_bbase 25.0 ep4193
pred_cbase 25.0 ep4194
pred_interactive 25.0 ep4195
pred_2000 25.0 ep4196
pred_5000 25.0 ep4197
pred_floorplanner 25.0 ep4198
pred_assembly 25.0 ep4199
pred_rules_by_area 25.0 ep4200
pred_radial_router 25.0 ep4201
pred_thermal 25.0 ep4202
pred_widis 14.0 ep4203
pred_batch_upgrade 25.0 ep4204
pred_single_pass_batch 25.0 ep4205
pred_multi_pass_batch 25.0 ep4206
pred_smooth_batch 25.0 ep4207
pred_optimum_batch 25.0 ep4208
pred_memory_batch 25.0 ep4209
pred_mitre_batch 25.0 ep4210
pred_pattern_batch 25.0 ep4211
preditor11_adv_plc_tools 14.0 ep4212
hs_route 25.0 ep4213
hs_place_and_route 25.0 ep4214
hs_realize 25.0 ep4215
hs_prototype 25.0 ep4216
hs_scenario 25.0 ep4217
hotstage_verify 25.0 ep4297
hotstage_verify_plus 25.0 ep4298
hotstage_verify_elite 25.0 ep4299
pred_rbase 25.0 ep4300
pred_2000_s 25.0 ep4304
pred_2000_hs 25.0 ep4305
pred_2000_floorplanner 25.0 ep4312
pred_beta 25.0 ep4329
hs_scenario_plus 25.0 ep4332
pred_six_layer_enh 25.0 ep4336
pred_max_layer_enh 25.0 ep4337
pred_conc_placement 25.0 ep4343
multi_board 25.0 ep4415
emc_server 25.0 ep4416
lightning_spice_gen 25.0 ep4463
cp_heavy_cluster 25.0 ep4469
zx0301 13.0 ep4511
pred_classic_autorouter 25.0 ep4512
pred_dragon_autorouter 25.0 ep4513
pred_dragon_strategy 25.0 ep4514
pred_dragon_consultant 25.0 ep4515
pred_intelligent_obj 25.0 ep4516
zx0501 15.0 ep4526
dragon_smart_fanout 25.0 ep4532
dragon_escape_routing 25.0 ep4533
zx1601 10.0 ep4561
pred_smart_fanout 21.0 ep4574
cstar_constraint_browser 25.0 ep4577
pred_netless_router 25.0 ep4584
zx3201 2013.0 ep4585
gradian.exe gradian 2.0 ep4420
rdr2adv.exe emcrules_auth 4.0 ep2698
adviser_dfm_rules 4.0 ep3020
fastrule_auth 4.0 ep3073
senario.exe

3.3 找SEED1和SEED2
依据以上找到的feature,伪造一个enginer.exe文件的license文件如下:

INCREMENT emc_server zuken 25.0 1-jan-2100 uncounted HOSTID=ANY SIGN=0
INCREMENT emc_front_loaded zuken 25.0 1-jan-2100 uncounted HOSTID=ANY SIGN=0
INCREMENT dc_analysis zuken 25.0 1-jan-2100 uncounted HOSTID=ANY SIGN=0

保存为license.dat至C:\flexlm\目录下.OD重新加载enginer.exe文件。根据第一步找VENDOR_NAME的方式找到的关键CALL,在该函数内部第一个跳转的位置下断点,未跳转的第一个CALL下断点,F9运行直至断在未跳转的第一个CALL的位置。F8运行该CALL结束,如下图
这里写图片描述
然后在命令分别输入以下命令,数据窗口分别得到以下数据

命令 数据

| dd [esp+8]| 013DECC8 00000004
013DECCC B745B072 data[0]
013DECD0 B75B6161 data[1]
013DECD4 5CD988E0
013DECD8 946F3B1E
013DECDC 9BB0D61F
013DECE0 08B17561
013DECE4 000B000B ver 11.11
013DECE8 31310000 ver 11
||

| dd [esp]| 01707100 00000000
01707104 00FBFFF9
01707108 014D20FE job+08
0170710C ED9CB784 job+0c
01707110 AE36D371 job+10
||

运行calcseed.exe程序,输入相关数据后,可获取seed1的值为0x00089003,以及seed2的值为0x00164110,具体示例如下图所示。

这里写图片描述

3.4 Patch ECC校验

通过采用FlexNet ECC Patch工具,可以移除对补丁文件实施ECC校验的步骤,具体操作示例如下图所示。

这里写图片描述

Patch的完整Log如下:

在gradian.EXE文件中检测到ECC 32位签名
文件大小为2396160字节
补丁位置位于00135050h
补丁验证地址为00135050h
文件已被修改。
在engineer.exe文件中检测到ECC 32位签名
文件大小为9965056字节
补丁位置位于006F64E0h
补丁验证地址为006F64E0h
文件已被修改。
在impulse.exe文件中检测到ECC 32位签名
文件大小为3153920字节
补丁位置位于0020C0E0h
补丁验证地址为0020C0E0h
文件已被修改。
在pred.dll文件中检测到ECC 32位签名
文件大小为2117376字节
补丁位置位于00EF48E8h(注意:此处可能原文存在排版或格式问题,已根据上下文进行合理调整)
验证补丁的地址是同上所述位置。
此文件同样被实施了补丁操作。
在rdr2adv.exe文件中发现有ECC类型的32位数字标识符存在
当前该程序的总容量显示为2577448个字节单位
已在偏移量处完成相应的代码改动,具体位置是起始点从零开始计数至第十六进制数值对应的位置值
对于该补丁内容的真实性校验,也采用相同的内存区域作为参考依据
综合判断后确认此软件组件确实经历了人为干预处理过程
类似地,在scs.exe这个可执行程序里也发现了类似的EC C编码结构特征
其存储空间占用量达到约13,884,776个基本单元尺寸
修改发生在特定内存段内的指定偏移点上,并且使用相同区域进行有效性检查
明确表明该二进制文件已经过非授权变更操作
同样,在senario.exe这个运行时组件中也识别出具有EC C标准定义的认证标记信息
它所占有的磁盘空间大约是15,749,888个数据单元数量
所有改动均集中在某个固定偏移量处完成,并通过相同区域来确保其完整性
检测结果清楚地显示出该软件模块已经被非法篡改过
最后,在sysutils.dll动态链接库中同样出现了符合EC C规范的认证信息
此库文件的总体尺寸约为1,557,994个数据块长度
修改工作在特定偏移点完成,且利用相同内存区域进行真实性检验

复制代码
  最终结论指出此系统组件已遭受未经授权的修改行为。

3.5 计算SIGN

此前提及了一个名为License.dat的数据文档,其中SIGN字段的内容设定为了零值,这种设置无法满足授权验证的要求。因此需要借助编译FlexNET SDK版本号为11.9.1所提供的工具链来生成符合规范的SIGN与HOSTID参数。

通过使用lmkg3命令行工具并输入VENDOR_NAME作为输入参数,可以计算得出对应的VENDOR_KEY和TRL_KEY的具体数值,相关结果如图所示:

这里写图片描述

通过调用SDK所提供的lmrand1.exe程序,在命令行界面中执行lmrand1 -seed指令,即可生成对应的LM_SEED数值,具体操作示例如下图所示:

这里写图片描述

在lm_code.h文件中,需对sdk内的相关内容进行替换操作:

复制代码
    #define VENDOR_KEY1 0xd4c8bbc2
    #define VENDOR_KEY2 0xc592f46a
    #define VENDOR_KEY3 0x753a8c1c
    #define VENDOR_KEY4 0x2a195ac8
    #define VENDOR_KEY5 0x7b065bc0
    #define TRL_KEY1 0x9f1896c6
    #define TRL_KEY2 0x789f90a0
    #define VENDOR_NAME "zuken"
    #define ENCRYPTION_SEED1 0x00089003
    #define ENCRYPTION_SEED2 0x00164110
    #define LM_SEED1 0xcb469f78
    #define LM_SEED2 0x60610e5a
    #define LM_SEED3 0x5c576721
    #define LM_STRENGTH LM_STRENGTH_239BIT
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    

将makefile文件中VENDORNAME对应的参数值由demo更改为zuken,借助VS2013平台提供的命令行工具,执行build.bat脚本,完成整个编译流程。

这里写图片描述

利用SDK所提供的lmhostid.exe工具,可以提取当前设备的hostid信息。随后,在Excel表格中参照前述位置所展示的license格式,借助相关公式将所有feature进行整合连接,具体示例如下图所示。

这里写图片描述

将license列的内容复制到文本文件中,并将其保存为license.txt。随后,在命令行界面中执行由sdk编译生成的lmcrypt.exe程序,输入命令lmcrypt -i license.txt -o license.dat,此时系统将生成名为license.dat的输出文件。使用记事本打开该文件,若内容无误,则已成功计算出正确的SIGN值。接下来,将此license.dat文件复制到CADSTAR的Programs目录中,启动程序后即可获得所有功能的授权。
3.6 编写KEYGEN
这一部分的实现相对简单,主要是在sdk提供的lmcrypt.c文件基础上,增加用于获取主机标识符hostid的功能。以下为相关的核心代码实现。

复制代码
    #include "stdafx.h"
    #include "lm_code.h"
    #include "lmclient.h"
    #include "lm_attr.h"
    #include "lmprikey.h"
    #include <string.h>
    
    LM_CODE_NEW(site_code, ENCRYPTION_SEED1, ENCRYPTION_SEED2,
    VENDOR_KEY1, VENDOR_KEY2, VENDOR_KEY3,
    VENDOR_KEY4, VENDOR_KEY5,
    FLEXLM_VERSION, FLEXLM_REVISION, FLEXLM_PATCH, LM_VER_BEHAVIOR,
    TRL_KEY1, TRL_KEY2, LM_STRENGTH);
    
    #define FEATURE_COUNT 93
    char feature[FEATURE_COUNT][255] = { "cadstar_gold", "cadstar_silver", "cadstar_bronze", "emcrules_auth", "cadstar_eval", "cadstar_beta", "adviser_dfm_rules", "fastrule_auth", "cadstar_field_solver", "cadstar_library_editor", "cadstar_schematics", "freedom", "cstar_viewer_plus", "cadstar_des_view_ppr", "cadstar_des_view_rep_gen", "embedded_router", "emd_2dcheck", "cadstar_variants", "pred_ibase", "pred_vbase", "pred_bbase", "pred_cbase", "pred_interactive", "pred_2000", "pred_5000", "pred_floorplanner", "pred_assembly", "pred_rules_by_area", "pred_radial_router", "pred_thermal", "pred_widis", "pred_batch_upgrade", "pred_single_pass_batch", "pred_multi_pass_batch", "pred_smooth_batch", "pred_optimum_batch", "pred_memory_batch", "pred_mitre_batch", "pred_pattern_batch", "preditor11_adv_plc_tools", "hs_route", "hs_place_and_route", "hs_realize", "hs_prototype", "hs_scenario", "si_interactive_simulation", "sim_lib_manager", "cadstar_scm_variants", "hotstage_verify", "hotstage_verify_plus", "hotstage_verify_elite", "pred_rbase", "pred_2000_s", "pred_2000_hs", "pred_2000_floorplanner", "cadstar_datasheet_pub", "cadstar_shape_trim", "pred_beta", "hs_scenario_plus", "pred_six_layer_enh", "pred_max_layer_enh", "pred_conc_placement", "cadstar_ds1_interface", "viewer_cadif_import", "multi_board", "emc_server", "si_batch_simulation", "emc_front_loaded", "gradian", "dc_analysis", "lightning_spice_gen", "cp_heavy_cluster", "cadstar_rules_by_area", "zx0301", "pred_classic_autorouter", "pred_dragon_autorouter", "pred_dragon_strategy", "pred_dragon_consultant", "pred_intelligent_obj", "zx0501", "dragon_smart_fanout", "dragon_escape_routing", "idem_model_import", "cadstar_migration_link", "zx1601", "cstar_idf_link", "pred_smart_fanout", "cstar_constraint_browser", "pred_netless_router", "zx3201", "analysis_results_viewer", "cadstar_copper", "cadstar_scm_copper" };
    int _tmain(int argc, _TCHAR* argv[])
    {
    LM_CODE_GEN_INIT_NEW(&site_code, ENCRYPTION_SEED1, ENCRYPTION_SEED2,
        l_priseedcnt, lm_prikey, lm_prisize);
    
    VENDORCODE *code = &site_code;
    LM_HANDLE *lm_job = (LM_HANDLE *)NULL;
    if (lc_init((LM_HANDLE *)0, VENDOR_NAME, code, &lm_job))
    {
        lc_perror(lm_job, "lc_init failed");
        printf("1");
        exit(-1);
    }
    
    char hostid[MAX_CONFIG_LINE] = { 0 };
    if (0 != lc_hostid(lm_job, HOSTID_DEFAULT, hostid))
    {
        lc_get_errno(lm_job);
        printf("2");
        exit(-1);
    }
    else
    {
        if (strlen(hostid) > 0)
        {
            if (*hostid == '"') memmove(hostid, hostid + 1, MAX_CONFIG_LINE - 1);
            for (size_t i = 0; i < strlen(hostid); i++)
            {
                if ((hostid[i] == 0x20) || (hostid[i] == 0x00))
                {
                    hostid[i] = 0x00;
                    break;
                }
            }
        }
    }
    char lic_txt[1024 * 512] = {};
    char tmp[512] = { 0 };
    for (size_t i = 0; i < FEATURE_COUNT; i++)
    {
        sprintf(tmp, "INCREMENT %s %s 25.0 1-jan-2100 uncounted HOSTID=%s TS_OK SIGN=0\n", feature[i], VENDOR_NAME, hostid);
        strcat(lic_txt, tmp);
    }
    char *lic_data = NULL, *err = NULL;
    if (0 != lc_cryptstr(lm_job, lic_txt, &lic_data, code, LM_CRYPT_FORCE, "", &err))
    {
        lc_get_errno(lm_job);
        printf("3");
        exit(-1);
    }
    else
    {
        printf(lic_data);
        lc_free_mem(lm_job, lic_data);
    }
    return 0;
    }
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    

3.7 附件
Zuken CADSTAR 16 安装相关文件:<>
Zuken CADSTAR 16 裂解文件:<>
FlexLM SDK:FlexLM-SDK-11-9-1 网络链接:https://pan.baidu.com/s/1geULxWR 提取码:pjqq
FlexLM SDK 11.11.1 SIG:https://pan.baidu.com/s/1bpKu10j 提取码:k8na
lmkg3:http://www.woodmann.com/crackz/FLEXlm/Flexvkg3.rar
calcseed:http://www.woodmann.com/crackz/Tutorials/Nolflex3.zip
ECCPatcher-v2015.04.10:引自 网络链接:https://pan.baidu.com/s/1bpKu10j 提取码:k8na

全部评论 (0)

还没有任何评论哟~