首页
论坛
课程
招聘
[原创]【新年献礼】一招爆掉FlexLM签名验证
2018-12-28 15:01 14524

[原创]【新年献礼】一招爆掉FlexLM签名验证

2018-12-28 15:01
14524

       本人在帖子 https://bbs.pediy.com/thread-248200.htm 中提出了爆破高版本ECC的方法,有坛友觉得不易掌握。作为新年献礼,现提供一种超简单、无论是否含有ECC、适合目前能见到的几乎所有版本的爆破方法:)


        将要爆破的文件拖进IDA Pro;全局查找字符串“SIGN%s=”,共有两个,且在同一函数内; 找到该函数尾部的call语句,把call语句修改为“mov     eax, 1”;你就拥有了全世界:)


        只要伪license文件的格式正确,5字节的修改一定童叟无欺(加壳的除外)






[公告]请完善个人简历信息,招聘企业等你来!

最后于 2018-12-28 17:52 被yangmyron编辑 ,原因:
上传的附件:
收藏
点赞1
打赏
分享
最新回复 (50)
雪    币: 16
活跃值: 活跃值 (15)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
slan 活跃值 1 2018-12-28 15:44
2
0
SIGN%s=
是这样吗?
雪    币: 553
活跃值: 活跃值 (411)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
yangmyron 活跃值 2018-12-28 17:35
3
0
是的,搜索时最好带上双引号
最后于 2018-12-28 17:40 被yangmyron编辑 ,原因:
上传的附件:
雪    币: 276
活跃值: 活跃值 (37)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xj无敌 活跃值 2018-12-28 21:27
4
0
Vendor string checksum楼主遇到过吗?最近遇到一个搞不定
雪    币: 68
活跃值: 活跃值 (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
fawcgzmg 活跃值 2018-12-30 23:02
5
0
看不懂,能否做个视频
雪    币: 17
活跃值: 活跃值 (67)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
张炜 活跃值 2019-1-26 20:18
6
0
找到该函数尾部的call语句,这句话不是很明白,该函数尾部的call语句难道不是_security_check_cookie吗?

雪    币: 325
活跃值: 活跃值 (51)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
luzhmu 活跃值 2019-1-26 21:09
7
0
差点一个字节搞定了
雪    币: 503
活跃值: 活跃值 (133)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
考拉 活跃值 2019-1-28 12:22
8
0
有空试试看      
雪    币: 553
活跃值: 活跃值 (411)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
yangmyron 活跃值 2019-1-31 09:15
9
0
张炜 找到该函数尾部的call语句,这句话不是很明白,该函数尾部的call语句难道不是_security_check_cookie吗?
是的,就是修改它!修改 “call    @__security_check_cookie@4 " (x86版)或“call    __security_check_cookie”(x64版)为“mov     eax, 1”
最后于 2019-2-1 11:17 被yangmyron编辑 ,原因:
雪    币: 553
活跃值: 活跃值 (411)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
yangmyron 活跃值 2019-2-1 11:20
10
0
luzhmu 差点一个字节搞定了
嗯,可惜没找到合适的位置
雪    币: 135
活跃值: 活跃值 (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
carlitos 活跃值 2019-2-5 20:28
11
0
patching this call the software should work with a fake license file?
雪    币: 55
活跃值: 活跃值 (142)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
killpy 活跃值 2 2019-2-11 08:09
12
0
FlexLM签名是啥玩意 
雪    币: 144
活跃值: 活跃值 (21)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lion张 活跃值 2019-3-4 23:39
13
0
雪    币: 26
活跃值: 活跃值 (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jackchentw 活跃值 2019-3-8 23:57
14
0
請問vendor daemon要一起爆破嗎? 我的目標有一個DLL檔跟一個vendor daemon檔,我把vendor daemon用您的方式爆破後,使用lmtools做 server diags結果lmgrd debug log 出現 Invalid license key (inconsistent authentication code) 錯誤,這是甚麼問題呢? PS: 目標是使用flexlm 11.15


目前問題解決了一半"
daemon的部份,我把 l_pubkey_verify  patch掉,lmtools就可以得到正確的server_diags回應,所有features可以checkout
但是把主程式的dll照樣patch,卻反而使主程式一開起就閃閉。如果DLL不做patch則會出現找不到license 的錯誤。
DLL patch後,主程式視窗會出現然 後立刻關閉,沒有錯誤訊息,目前正在解決這個問題,或許是case 46的部份還是需要patch 也可能。

我自己搞定了。這個目標是用flexlm 11.15, vendor daemon與主程式附帶的一個DLL檔需要爆破。
爆破只要用到樓主上面的方法,再加上之前另一篇文章提到的l_pubkey_verify 兩處爆破即可。
但是我這個目標的主要執行檔對DLL檔有做HASH防止竄改,所以又追蹤了主程式把檢查HASH的地方爆破,可是這樣改完居然還是不行,最後進一步追蹤才發現主程式針對license file中的feature version必須是一個特定值 1.0,我原本用11.4結果不行,這個保護很婊,完全沒有任何錯誤訊息,加上我手邊沒有既有的license.dat, 只能從逆向工程中去一步一步找尋feature name,但是沒想到還是敗在version number, 還好有追出來。
最后于 2019-3-9 19:00 被jackchentw编辑 ,原因: 補充說明
雪    币: 29
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
nmtr 活跃值 2019-4-6 19:39
15
0
谢谢,初步验证成功,目标程序版本11.14,32位。 
雪    币: 2
活跃值: 活跃值 (33)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hrfhrf 活跃值 2019-5-23 22:45
16
0
很好,膜拜,期待更好的作品
雪    币: 233
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
周癫 活跃值 2019-5-28 10:45
17
0
确实可行
雪    币: 0
活跃值: 活跃值 (63)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
tkschip 活跃值 2019-5-30 17:16
18
0
yangmyron 张炜 找到该函数尾部的call语句,这句话不是很明白,该函数尾部的call语句难道不是_security_check_cookie吗? 是的,就 ...
 大侠,我在用这个方法在linux 64的daemon找不到此特征,11.14
雪    币: 2
活跃值: 活跃值 (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
huzuyi 活跃值 2019-7-15 23:32
19
0

linux下面,可以将函数返回前的xor eax, eax指令改成nop,即31 c0改为90 90



修改前:



修改后:


另外这里或上的值最好是由8改为1,参考源码中L_CONF_FL_VERIFIED define的值是1,


最后于 2019-7-15 23:33 被huzuyi编辑 ,原因:
雪    币: 218
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
zwpcloudy 活跃值 2019-7-16 13:13
20
0
@huzuyi  谢谢,用您的方法在Linux下确实可以用,但有个cvd类型的出现vendor端可以启动license文件,客户端软件能check license,但提示License error.
雪    币: 289
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
矽阳 活跃值 2019-8-18 09:46
21
0
zwpcloudy @huzuyi 谢谢,用您的方法在Linux下确实可以用,但有个cvd类型的出现vendor端可以启动license文件,客户端软件能check license,但提示License error.
还有其它校验
雪    币: 254
活跃值: 活跃值 (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
mb_nxxnhzzc 活跃值 2019-12-14 00:53
22
0
jackchentw 請問vendor daemon要一起爆破嗎? 我的目標有一個DLL檔跟一個vendor daemon檔,我把vendor dae ...
请教下具体流程,我也遇到了一样的问题。能否告知具体的DLL爆破方法,十分感谢。
雪    币: 45
活跃值: 活跃值 (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
istigatore 活跃值 2019-12-16 03:30
23
0
upload the vendor somewhere.. MEGA is prefered... With SIGN & SIGN2 only way is patch or inject your pubkeys...
雪    币: 233
活跃值: 活跃值 (38)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Ames_Bond 活跃值 2020-1-20 10:30
24
0
使用论坛扫地僧们的方法全部试过了,ECC也patch了;还是有其他验证。搞不定了...不知大家有遇到过相同的问题吗?可以确定的是,license的格式是没有问题的,用的正版license改、加了几个字节而已。




已解决!!!


最后于 2020-1-21 10:57 被Ames_Bond编辑 ,原因:
雪    币: 233
活跃值: 活跃值 (38)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Ames_Bond 活跃值 2020-1-20 11:30
25
0
再更新一件神奇的事情,把安装目录下涉及到Flexlm的dll,jar文件删除后使用正版license启动,依然可以正常使用。软件启动正常,license Checkout正常。可以看到版本信息,授权信息等。

已解决!!!


最后于 2020-1-21 10:39 被Ames_Bond编辑 ,原因:
雪    币: 175
活跃值: 活跃值 (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
phoenixson 活跃值 2020-2-14 15:03
26
0
请问大家是怎么解决这个问题的,利用huzuyi 修改xor  eax,eax的方法在实际应用时还是会报错误,根据楼主所说的方式也仍然会check error
最后于 2020-2-14 15:04 被phoenixson编辑 ,原因:
雪    币: 10
活跃值: 活跃值 (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
prospect 活跃值 2020-3-29 22:57
27
0
谢谢,高明!楼主可以出一个替换pubkey的教程吗?
最后于 2020-3-29 23:28 被prospect编辑 ,原因:
雪    币: 216
活跃值: 活跃值 (13)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
ruyi 活跃值 1 2020-3-29 23:15
28
0
。。。
最后于 2020-3-29 23:16 被ruyi编辑 ,原因: 发错帖子了。。。
雪    币: 60
活跃值: 活跃值 (261)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ericyudatou 活跃值 2020-4-4 23:32
29
0
楼主,java flexlm需要修改哪里?
雪    币: 299
活跃值: 活跃值 (84)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wangzhehyd 活跃值 2020-5-27 14:20
30
0

Windows下License administrator GUI里面 License Test无法通过,但Diagonostics正常识别


Linux下正常使用

雪    币: 5
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
whucode 活跃值 2020-6-5 07:20
31
0

大佬,已经按照方法,在11.16上搜索了该字符串,修改了最后的调用的语句“call    @__security_check_cookie@4 " (x86版),模仿旧版license文件修改了其中的过期时间和版本声明,服务能正常启动。但是打开应用软件报错,怎么处理呢?

最后于 2020-6-5 21:20 被whucode编辑 ,原因:
雪    币: 0
活跃值: 活跃值 (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
swphere 活跃值 2020-7-1 14:42
32
0
用大神这方法成功破解11.16

loc_18080D60C:
mov     rcx, [rbp+500h+var_38]
xor     rcx, rsp
call    sub_1807B29E0
mov     rbx, [rsp+5D0h+arg_18]
add     rsp, 5D0h
pop     r15
pop     r14
pop     r13
pop     r12
pop     rdi
pop     rsi
pop     rbp
retn
sub_18080CEF0 endp
雪    币: 160
活跃值: 活跃值 (93)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
tcy027 活跃值 2020-7-3 20:04
33
0
谢谢分享!mark
雪    币: 553
活跃值: 活跃值 (411)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
yangmyron 活跃值 2020-7-17 17:16
34
0
whucode 大佬,已经按照方法,在11.16上搜索了该字符串,修改了最后的调用的语句“call    @__security_check_c ...
应用程序端FlexLM保护的文件也要做相应的Patch
雪    币: 223
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
wx_ray_724 活跃值 2020-7-18 11:20
35
0
swphere [em_63][em_63][em_63]用大神这方法成功破解11.16 loc_18080D60C: mov rcx, [rbp+500h+var_38] xor rcx, ...
能请教一下是怎么修改的吗?
雪    币: 223
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
wx_ray_724 活跃值 2020-7-22 17:26
36
0
yangmyron 张炜 找到该函数尾部的call语句,这句话不是很明白,该函数尾部的call语句难道不是_security_check_cookie吗? 是的,就 ...

大佬,这样改吗?

雪    币: 254
活跃值: 活跃值 (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
mb_nxxnhzzc 活跃值 2020-7-26 17:53
37
0
IDA改完了 怎么保存?
雪    币: 553
活跃值: 活跃值 (411)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
yangmyron 活跃值 2020-7-26 20:02
38
0
mb_nxxnhzzc IDA改完了 怎么保存?
File==》Production File==》Create DIF File,存完之后按照文件提供的Raw位置用UltraEdit或CFF-Explorer等二进制修改工作修改原文件并保存即可
雪    币: 254
活跃值: 活跃值 (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
mb_nxxnhzzc 活跃值 2020-7-27 10:20
39
0
yangmyron File==》Production File==》Create DIF File,存完之后按照文件提供的Raw位置用UltraEdit或CFF-Explorer等二进制修改工作修改原文件并保存即可
感谢大神的回复,关键是插件...... 我弄出来了。改完二进制保存后,守护进程启动不了。大神能否帮忙看看。
雪    币: 254
活跃值: 活跃值 (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
mb_nxxnhzzc 活跃值 2020-7-27 10:29
40
0
jackchentw 請問vendor daemon要一起爆破嗎? 我的目標有一個DLL檔跟一個vendor daemon檔,我把vendor dae ...
能否详细说明下,dll 怎么找么?
雪    币: 553
活跃值: 活跃值 (411)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
yangmyron 活跃值 2020-7-27 17:18
41
0
mb_nxxnhzzc 能否详细说明下,dll 怎么找么?
DLL方法也是一样的
雪    币: 254
活跃值: 活跃值 (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
mb_nxxnhzzc 活跃值 2020-7-28 09:53
42
0
jackchentw 請問vendor daemon要一起爆破嗎? 我的目標有一個DLL檔跟一個vendor daemon檔,我把vendor dae ...
能否详细的说明一下
雪    币: 254
活跃值: 活跃值 (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
mb_nxxnhzzc 活跃值 2020-7-28 09:54
43
0
yangmyron DLL方法也是一样的
大神 我的问题是怎么找到需要爆破的DLL
雪    币: 553
活跃值: 活跃值 (411)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
yangmyron 活跃值 2020-7-28 11:37
44
0
用“Detect-it-Easy”软件就可以
上传的附件:
雪    币: 553
活跃值: 活跃值 (411)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
yangmyron 活跃值 2020-7-28 11:38
45
0
用“Detect-it-Easy”软件就可以
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
Cannyhor 活跃值 2020-8-2 12:07
46
0
老大,Linux下有没有类似Detect-it-Easy的软件?
雪    币: 553
活跃值: 活跃值 (411)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
yangmyron 活跃值 2020-8-6 16:57
47
0
Cannyhor 老大,Linux下有没有类似Detect-it-Easy的软件?
这个理论上也支持ELF文件吧?你可以copy到Windows下试试
雪    币: 553
活跃值: 活跃值 (411)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
yangmyron 活跃值 2020-8-19 14:57
48
0

huzuyi linux下面,可以将函数返回前的xor eax, eax指令改成nop,即31 c0改为90 90 修改前: 修改后:另外这里或上的值最好是由8改为1,参考源码中L_CONF_FL_V ...

是的,这个函数的原名就叫“l_good_lic_key”,可以对ECC及常规形式的签名进行比较(不一定是明文比较),返回值为1是签名通过,函数最后强制返回1即为任何签名都可通过验证。早期,大神们已经注意到该函数并有过分析,只是后来ECC的出现大神们焦点转移了。V9.2 SDK源码如下(高版本已经有修改过):


-----------------------------------------------------------------------------------------------------------

/*
 *    return 1 if good, 0 if bad
 */
#ifndef NO_ENCRYPTION_CHECK
int
l_good_lic_key(
    LM_HANDLE *        job,
    CONFIG *        conf,
    VENDORCODE *    key)
{
    VENDORCODE    vc;
    int            ok = 0;
    char *        code = NULL;
    int            str_res = 0;
    char *        sdate = NULL;
    L_KEY_FILTER *kf = 0;

    if ((!job->flags & LM_FLAG_SLOW_VERIFY)
        && (conf->L_CONF_FLAGS & L_CONF_FL_VERIFIED))
    {
        return 1;
    }
    memcpy(&vc, key, sizeof(vc));
    if (! (job->flags & LM_FLAG_CLEAR_VKEYS))
        l_xorname(job->vendor, &vc);
    l_sg(job, job->vendor, &vc);
#if 1
    if ((job->L_SIGN_LEVEL) && !conf->lc_keylist)
    {
        char context[50];
        char num[2];
        num[1] = 0; /* null terminator */
#ifdef MONTAVISTA
        num[0] = (char)((char)job->L_SIGN_LEVEL + '0');
#else
        num[0] = (char)((char)job->L_SIGN_LEVEL + '0');
#endif /* MONTAVISTA */

        sprintf(context, "SIGN%s=", num);
        LM_SET_ERROR(job, LM_SIGN_REQ, 582, 0, context, LM_ERRMASK_ALL);
        goto  exit_good_lic_key;
    }
#endif
    if (conf->lc_keylist && job->L_SIGN_LEVEL)
    {
        LM_KEYLIST *kl;

        for (kf = (L_KEY_FILTER *)job->key_filters;
            kf && (kf->sign_level != (int)job->L_SIGN_LEVEL);
            kf = kf->next)
            ;
/*
 *        Find the last KEY_FILTER for this job
 */
        if (kf)
        {
            int foundkl = 0;

            for (kl = conf->lc_keylist; kl; kl = kl->next)
            {
                char *    stdate = NULL;

                if ((kf->sign_level != kl->sign_level))
                    continue;
                foundkl = 1;
                job->lc_this_keylist = kl;

                code = l_crypt_private(job, conf, stdate, &vc);
                job->lc_this_keylist = 0;
                if (code && *code)
                {
                    ok = 1;
                    break;
                }
            }
            if (!ok)
            {
                if (!kl && !foundkl)
                {
                    char context[50] = {'\0'};
                    char num[2] = {'\0'};

                    num[1] = 0; /* null terminator */
                    num[0] = kf->sign_level > 1 ?
                        kf->sign_level + '0': 0;
                    sprintf(context, "SIGN%s=", num);
                    LM_SET_ERROR(job, LM_SIGN_REQ, 526, 0,
                        context, LM_ERRMASK_ALL);

                }
                else
                {
                    LM_SET_ERRNO(job, LM_BADCODE, 523, 0);
                }
            }
        }
#if 0
        else
            ok = 1;
#endif
    }
    if (!kf)
    {
        if (!(conf->lc_keylist && job->L_SIGN_LEVEL))
        {
            job->flags |= LM_FLAG_MAKE_OLD_KEY;
        }
        sdate = l_extract_date(job, conf->code);
        code = l_crypt_private(job, conf, sdate, &vc);
        if (!(conf->lc_keylist && job->L_SIGN_LEVEL))
        {
            job->flags &= ~LM_FLAG_MAKE_OLD_KEY;
        }
        if (job->user_crypt_filter)
        {
            if (!code || !*code)
                str_res = 1;
        }
        else
        {
            if (conf->lc_keylist && job->L_SIGN_LEVEL)
            {
                if (!code || !*code || !*conf->code)  /*P5552 */
                    str_res = 1;
                else
                    STRNCMP(code, conf->lc_sign, MAX_CRYPT_LEN,
                    str_res);
            }
            else
            {
                if (!code || !*code || !*conf->code)  /*P5552 */
                    str_res = 1;
                else
                    STRNCMP(code, conf->code, MAX_CRYPT_LEN,
                                str_res);
            }
        }
        if (str_res)
        {
    /*
     *    If user has set alternate encryption seeds,
     *    try those also.
     */
            if (job->options->alt_vendorcode.data[0] ||
                job->options->alt_vendorcode.data[1])
            {
                VENDORCODE altvc;
                VENDORCODE *v = &job->options->alt_vendorcode;
                memcpy((char *)&altvc, (char *)v, sizeof(altvc));
                l_sg(job, job->vendor, &altvc);
                code = l_crypt_private(job, conf, sdate, &altvc);
                ok = 1; /* assume success */
                if (!code || !*code || !*conf->code) /*P5552*/
                    ok = 0;
                else
                {
                    STRNCMP(code, conf->code, MAX_CRYPT_LEN, str_res);
                    if (str_res)
                        ok = 0; /* failed */
                }
            }

            if (!ok)
            {
                if (l_keyword_eq(job, job->vendor, conf->daemon))
                {
                    LM_SET_ERRNO(job, LM_BADCODE, 130, 0);
                }
            }
        }
        else
            ok = 1;
    }

exit_good_lic_key:

    if (!ok && conf->lc_future_minor)
        LM_SET_ERRNO(job, LM_FUTURE_FILE, conf->lc_future_minor, 0);


    if (ok)
        conf->L_CONF_FLAGS |= L_CONF_FL_VERIFIED;
    else
        conf->L_CONF_FLAGS |= L_CONF_FL_REJECT;
    return ok;
}


--------------------------------------------------------------------------------------------------

最后于 2020-8-19 15:05 被yangmyron编辑 ,原因:
雪    币: 176
活跃值: 活跃值 (65)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
LiamLi 活跃值 2020-8-24 14:05
49
0
楼主您好!试着用这个方法改了$ynop$y$家的守护神文件和所有执行程序,但是改完后守护神完全启动不起来,exit code 255,即便加载正版license也启动不起来,这是哪里有文件校验还要改吗?
雪    币: 223
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
wx_ray_724 活跃值 2020-8-26 12:01
50
0
fawcgzmg 看不懂,能否做个视频

请问该方法使用v11.16吗?按照楼主的方式弄了一下,许可程序能通过,但登录时还是报找不到许可

最后于 2020-8-26 12:02 被wx_ray_724编辑 ,原因:
游客
登录 | 注册 方可回帖
返回