能力值:
( LV3,RANK:30 )
|
-
-
2 楼
为了大家能够理解其中使用的原理(即快速定位函数l_n36_buf,直接反编译来快速实现ECC定位),现把原来写的学习心得再次附上供大家参考。这个续篇算是对11.11以上的版本有个交代吧,原楼主已多年没更新了。当然新方法也适用于老版本的FlexLM文件。
最后于 2018-11-21 16:14
被yangmyron编辑
,原因: 添加说明
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
请问下如果license文件加密了有没什么好办法?
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
收藏,进行学习,谢谢楼主提供
最后于 2018-11-21 18:45
被jgs编辑
,原因:
|
能力值:
( LV3,RANK:30 )
|
-
-
5 楼
对于x64守护神文件的特征码我没有过多提醒,这里做些补充: 1)为什么是“arg_28 = qword ptr 30h”?因为我们知道我们要定位的函数有6个传递参数,形如“signed __int64 __fastcall sub_140071280(_BYTE *a1, _WORD *a2, int a3, unsigned __int8 *a4, unsigned int a5, _DWORD *a6)”,在64位程序里正好对应“arg_28 = qword ptr 30h”,当然在32位程序里对应“var_4C
= dword ptr -4Ch”。如果紧跟此特征码的后面还有其它参数变量,肯定不是我们要找的函数。 2)如何确定它前面的特征码?因为该函数代码较长,需要的中间变量很多,所以此段会较长,程序会超过50个变量。如果你没有找到特征码“var_C8 = dword ptr -0C8h”,可以试试找“var_A8 = dword ptr -0A8h”。这可能与其使用一组ECC还是两组ECC公钥有关。另外该函数F5反编译时的耗时较长,这也是特征之一。 下面给个某11.15版的例子,大家可以感受一下(该程序只用1组ECC公钥)。这个文件用参考资料3的工具是查不出来的:) .text:0000000140071280 .text:0000000140071280 ; =============== S U B R O U T I N E ======================================= .text:0000000140071280 .text:0000000140071280 .text:0000000140071280 sub_140071280 proc near ; DATA XREF: .data:off_1402611A8↓o .text:0000000140071280 ; .pdata:000000014029B664↓o .text:0000000140071280 .text:0000000140071280 var_A8 = dword ptr -0A8h .text:0000000140071280 var_A4 = byte ptr -0A4h .text:0000000140071280 var_A3 = byte ptr -0A3h .text:0000000140071280 var_A2 = byte ptr -0A2h .text:0000000140071280 var_A1 = byte ptr -0A1h .text:0000000140071280 var_A0 = byte ptr -0A0h .text:0000000140071280 var_9F = byte ptr -9Fh .text:0000000140071280 var_9E = byte ptr -9Eh .text:0000000140071280 var_9D = byte ptr -9Dh .text:0000000140071280 var_9C = byte ptr -9Ch .text:0000000140071280 var_9B = byte ptr -9Bh .text:0000000140071280 var_9A = byte ptr -9Ah .text:0000000140071280 var_99 = byte ptr -99h .text:0000000140071280 var_98 = byte ptr -98h .text:0000000140071280 var_97 = byte ptr -97h .text:0000000140071280 var_96 = byte ptr -96h .text:0000000140071280 var_95 = byte ptr -95h .text:0000000140071280 var_94 = byte ptr -94h .text:0000000140071280 var_93 = byte ptr -93h .text:0000000140071280 var_92 = byte ptr -92h .text:0000000140071280 var_91 = byte ptr -91h .text:0000000140071280 var_90 = byte ptr -90h .text:0000000140071280 var_8F = byte ptr -8Fh .text:0000000140071280 var_8E = byte ptr -8Eh .text:0000000140071280 var_8D = byte ptr -8Dh .text:0000000140071280 var_8C = byte ptr -8Ch .text:0000000140071280 var_8B = byte ptr -8Bh .text:0000000140071280 var_8A = byte ptr -8Ah .text:0000000140071280 var_89 = byte ptr -89h .text:0000000140071280 var_88 = byte ptr -88h .text:0000000140071280 var_87 = byte ptr -87h .text:0000000140071280 var_86 = byte ptr -86h .text:0000000140071280 var_85 = byte ptr -85h .text:0000000140071280 var_84 = byte ptr -84h .text:0000000140071280 var_83 = byte ptr -83h .text:0000000140071280 var_82 = byte ptr -82h .text:0000000140071280 var_80 = dword ptr -80h .text:0000000140071280 var_7C = dword ptr -7Ch .text:0000000140071280 var_78 = dword ptr -78h .text:0000000140071280 var_74 = dword ptr -74h .text:0000000140071280 var_70 = dword ptr -70h .text:0000000140071280 var_6C = dword ptr -6Ch .text:0000000140071280 var_68 = dword ptr -68h .text:0000000140071280 var_64 = dword ptr -64h .text:0000000140071280 var_60 = dword ptr -60h .text:0000000140071280 var_5C = dword ptr -5Ch .text:0000000140071280 var_58 = dword ptr -58h .text:0000000140071280 Dst = byte ptr -50h .text:0000000140071280 var_30 = byte ptr -30h .text:0000000140071280 var_10 = qword ptr -10h .text:0000000140071280 arg_0 = qword ptr 8 .text:0000000140071280 arg_8 = qword ptr 10h .text:0000000140071280 arg_10 = dword ptr 18h .text:0000000140071280 arg_18 = qword ptr 20h .text:0000000140071280 arg_20 = dword ptr 28h .text:0000000140071280 arg_28 = qword ptr 30h
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
其实找到这里就能找到关键的ECC patch的地方了 不需要替换 直接patch 然后license随便填
|
能力值:
( LV3,RANK:30 )
|
-
-
7 楼
修改原来一些不正确的说法: 如果现在我说你根本不用去记特征码找函数,对于x86的exe文件,FlexLM几乎所有版本的守护神文件用IDA反汇编后Length最长、Arguments为18(Locals为A8或A4等可变,位于.text节内,不能在.textidx节内)的那个函数就是我们需要的东东,你会不会打我?对于x64的守护神exe文件,也存在几乎所有版本的守护神文件用IDA反汇编后该函数Length最长、Arguments为30(Locals为C8、D8或E8等可变,位于.text节内,不能在.textidx节内)。只要我们在IDA的Function窗口内点击头上的Length排序,就会轻松找到该函数。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
对于非ECC加密的12位短sign大家有什么好的patch方法吗?不想动态找seed,很麻烦。
|
能力值:
( LV3,RANK:30 )
|
-
-
9 楼
xj无敌
对于非ECC加密的12位短sign大家有什么好的patch方法吗?不想动态找seed,很麻烦。
我记得可以直接爆破,就修改一个字节
|
能力值:
(RANK:135 )
|
-
-
10 楼
感谢分享!
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
yangmyron
我记得可以直接爆破,就修改一个字节
可以show下吗 学习下。 另外怎么调试daemon啊,我用的x64dbg 调试的时候说can't initialize。
|
能力值:
(RANK:350 )
|
-
-
12 楼
测试
最后于 2018-11-23 17:56
被kanxue编辑
,原因:
|
能力值:
( LV3,RANK:30 )
|
-
-
13 楼
最后于 2018-11-24 11:16
被yangmyron编辑
,原因:
|
能力值:
( LV3,RANK:30 )
|
-
-
14 楼
xj无敌
可以show下吗 学习下。
另外怎么调试daemon啊,我用的x64dbg 调试的时候说can't initialize。
改变命令行:" xxxx.exe" -T your-machine-name 11.9 -c license.dat 传的图片没显示
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
现在对有Trusted Stroage的验证有什么好办法么?比如SSQ已有破解的Lumerical,但是他们破解还是通过传统方式,(自己做了daemon?)
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
现在有用所谓SDT的,hook都不好办。
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
邱zr
现在对有Trusted Stroage的验证有什么好办法么?比如SSQ已有破解的Lumerical,但是他们破解还是通过传统方式,(自己做了daemon?)
Trusted stroage指的是什么?狗吗?SSQ破解的软件是通过patch ecc的,daemon都是原文件,只patch了ecc然后加了个壳
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
xj无敌
Trusted stroage指的是什么?狗吗?SSQ破解的软件是通过patch ecc的,daemon都是原文件,只patch了ecc然后加了个壳
你以Trusted stroage FlexNet为关键词搜索一下。 lumerical如果想不用license server激活,应该是必须要通过Trusted Stroage授权,SSQ的做法像是绕了过去。这样有一个麻烦,有些软件的试用版或者买的单机版根本没有提供daemon,除非设法伪造daemon(我不知道是否可能)再爆破ECC,只能设法搞定这个。
|
能力值:
( LV2,RANK:10 )
|
-
-
19 楼
邱zr
你以Trusted stroage FlexNet为关键词搜索一下。
lumerical如果想不用license server激活,应该是必须要通过Trusted Stroage授权,SSQ的做法像 ...
你说的这个软件SSQ只patch了exe和daemon的ecc, 当然这个软件还有自校验,我和SSQ有过一些讨论。你说的Trusted stroage不太了解,我个人偏爱licesen server,主要是可以floating license。
|
能力值:
( LV2,RANK:10 )
|
-
-
20 楼
感谢分享!
|
能力值:
( LV3,RANK:30 )
|
-
-
21 楼
这个文件出的是ECC公钥的值(十进制,-=为补码)而不是虚拟地址??? 有大神明白为啥吗? *((_BYTE *)Dst + 072) += 118; *((_BYTE *)Dst + 073) -= 107; *((_BYTE *)Dst + 074) -= 17; *((_BYTE *)Dst + 075) += 87; *((_BYTE *)Dst + 076) -= 52; *((_BYTE *)Dst + 077) += 15; *((_BYTE *)Dst + 078) -= 53; *((_BYTE *)Dst + 079) -= 63; *((_BYTE *)Dst + 080) -= 120; *((_BYTE *)Dst + 081) -= 20; *((_BYTE *)Dst + 082) -= 105; *((_BYTE *)Dst + 083) -= 9; *((_BYTE *)Dst + 084) -= 80; *((_BYTE *)Dst + 085) += 32; *((_BYTE *)Dst + 086) -= 3; *((_BYTE *)Dst + 087) += 126; *((_BYTE *)Dst + 112) += 118; *((_BYTE *)Dst + 113) -= 101; *((_BYTE *)Dst + 114) += 59; *((_BYTE *)Dst + 115) -= 101; *((_BYTE *)Dst + 116) -= 21; *((_BYTE *)Dst + 117) += 66; *((_BYTE *)Dst + 118) -= 48; *((_BYTE *)Dst + 119) += 83; *((_BYTE *)Dst + 120) += 59; *((_BYTE *)Dst + 121) -= 87; *((_BYTE *)Dst + 122) += 121; *((_BYTE *)Dst + 123) += 5; *((_BYTE *)Dst + 124) -= 96; *((_BYTE *)Dst + 125) -= 79; *((_BYTE *)Dst + 126) += 86; *((_BYTE *)Dst + 127) -= 125; *((_BYTE *)Dst + 128) += 51; *((_BYTE *)Dst + 129) += 76; *((_BYTE *)Dst + 130) -= 41; *((_BYTE *)Dst + 131) -= 72; *((_BYTE *)Dst + 132) -= 66; *((_BYTE *)Dst + 133) -= 125; *((_BYTE *)Dst + 152) += 117; *((_BYTE *)Dst + 153) -= 33; *((_BYTE *)Dst + 154) -= 56; *((_BYTE *)Dst + 155) += 51; *((_BYTE *)Dst + 156) += 39; *((_BYTE *)Dst + 157) += 10; *((_BYTE *)Dst + 158) += 118; *((_BYTE *)Dst + 159) += 14; *((_BYTE *)Dst + 160) -= 37; *((_BYTE *)Dst + 161) += 34; *((_BYTE *)Dst + 162) -= 82; *((_BYTE *)Dst + 163) += 110; *((_BYTE *)Dst + 164) += 126; *((_BYTE *)Dst + 165) -= 10; *((_BYTE *)Dst + 166) -= 21; *((_BYTE *)Dst + 167) += 113; *((_BYTE *)Dst + 168) += 116; *((_BYTE *)Dst + 169) += 76; *((_BYTE *)Dst + 170) -= 52; *((_BYTE *)Dst + 171) -= 2; *((_BYTE *)Dst + 172) -= 13; *((_BYTE *)Dst + 173) += 51; *((_BYTE *)Dst + 174) += 46; *((_BYTE *)Dst + 175) -= 79; *((_BYTE *)Dst + 176) -= 114; *((_BYTE *)Dst + 177) -= 35; *((_BYTE *)Dst + 178) += 34; *((_BYTE *)Dst + 179) -= 11; *((_BYTE *)Dst + 180) -= 114; *((_BYTE *)Dst + 182) += 41;
最后于 2018-11-26 17:00
被yangmyron编辑
,原因:
|
能力值:
( LV2,RANK:10 )
|
-
-
22 楼
yangmyron
改变命令行:" xxxx.exe" -T your-machine-name 11.9 -c license.dat
传的图片没显示
试了下 还是不行
最后于 2018-11-30 22:31
被xj无敌编辑
,原因:
|
能力值:
( LV2,RANK:10 )
|
-
-
23 楼
大神,在线激活那种flexnet publisher有什么办法吗?
|
能力值:
( LV1,RANK:0 )
|
-
-
24 楼
xj无敌
其实找到这里就能找到关键的ECC patch的地方了 不需要替换 直接patch 然后license随便填
请问这里应该如何修改?
|
能力值:
( LV3,RANK:20 )
|
-
-
25 楼
用楼主定位的方法,很容易找到l_pubkey_verify(),在函数开头或结尾 xor eax, eax ; ret 如果清楚修改的地方,可以用ida反汇编后的图表流程查看,patch方法更是n种。祝你好运~
|
|
|