CodeCharge Studio 5 破解笔记
YesSoftware出品的CodeCharge Studio是一个可视化的网络应用开发工具软件,可以生成ASP(C#或VB)、PHP、Java、Perl等语言的源代码。 可以从YesSoftware的官网下载CodeCharge Studio 5.1.1.18992的20天试用版,安装启动后先显示该软件的Splash窗口: 单击“Activation”按钮,弹出以下对话框: 在对话框中填入基础信息,在“Serial Number”文本框中随便输入一些东西,然后单击“OK”按钮,就会弹出提示框,提示“Invalid Serial Number.”。 于是,我们用OllyICE载入主程序CodeChargeStudio5.exe,在MessageBoxA的入口处下断,然后让程序跑起来。出现Splash窗口后重复以上的工作,发现程序执行中断于MessageBoxA的入口处。 从MessageBoxA返回,就会来到CCProject.dll的10007ADF处。再一次返回,会回到CCProject.dll的1000A1C7处,该地址落在始于10007AF0的子程序中。再向上返回,就会去到User32的代码空间,所以我们把目光瞄向CCProject.dll开始于10007AF0的子程序。 鉴于本文的目的,同时为了节约篇幅,我们只关注关键算法和技巧。
我把这个校验操作取名为“AndCmp”,类似的还有OrCmp和XorCmp。对序列号的校验操作共有28次,整理后如表一(“S.0.9”表示序列号第一节的D9位,依此类推)。 下面让我们继续。校验操作进行完毕,会来到100086B7处。
由此可见,序列号必须符合“05XX-XXXX-XXXX-XXXX-XXXX”的形式,其中的X全部为十六进制数字,并且第一节的低字节不能是11h到1Eh的值。重要的是,序列号必须能通过校验。 从1000A207开始,先是取得对话框中Install Code、Version和Activation Key的值,把Name、Company、Address、Zip、Country、Email和Reseller的值记录到注册表里,接着对“Auto-activation though the Internet”检查框的设置情况进行检查。如被勾选,就用字符串“http://www.yessoftware.com/activation/activation.php”再加上Serial Number、Install Code、Name、Company、Zip、Country、Email、Reseller、Version和Address的值生成一个URL,创建始于1000CCC0的线程进行在线激活。如果在线激活时出错,就扫尾退出。
无论是在线激活时返回的,还是非在线激活时手工输入的Activation Key,都要进行校验。激活码的校验与序列号校验类似,不过序列号的校验相当于自校验,而激活码则是用Install Code和Serial Number来校验的,看如下代码片段:
我把上边的校验操作标记为AndCmp(H.3.6, S.3.11, A.0.1)。之所以用“H”来标记Install Code,是因为它在注册表里的值名称是“HardwareKey”。而“S”就表示“Serial Number”,“A”就表示“Activation Key”。 在始于10007AF0的子程序中,对激活码的校验操作共有33次,整理后见表二。 激活码校验操作进行完毕后,要判断校验是否通过,不通过时会弹出消息框提示“激活码无效”;通过时还要判断注册表里是不是已经记录有激活信息,现在的激活信息和原有的激活信息是否一致等,还要把通过校验的序列号和激活码写入注册表,这里不再一一赘述。 至此我们可以看出,只要序列号和激活码通过了校验,那么一切就都OK了。 这样,我们还需要弄清楚两个问题,一个是序列号的构成规律,另一个是序列号和激活码的其它位还有什么作用。 因为程序要读取两个注册表值,一个名称是“SerialNumber”,对应序列号;另一个名称是“ActivationKey”,对应激活码。所以,我所采取的方法就是“地毯式搜索”。用PowerGREP在CodeCharge Studio的安装目录及其子目录下对所有文件进行二进制搜索,查找包含有这两个名称字符串的二进制文件,其结果如表八。然后,用IDA Pro对找到的文件一一反汇编,阅读反汇编后的代码,查看对两个名称的引用,分析序列号和激活码的作用。 在阅读分析期间,我们还会发现有使用自解码技术的现象。用自解码代码的特征码进行二进制搜索,发现使用自解码技术的文件共有7个,分别是、CCProjectExplorer.ocx、CCPropertiesU.dll、CCSchema.dll、CCShell.dll、CCToolBox.ocx和IEScriptHelper.dll。经过仔细分析,可以编写一段程序将加密过的代码予以还原。还原后,还发现有二次加密的地方,也都一一予以还原。还原后,再对其反汇编,然后阅读、分析。 经过大量的阅读、分析,我们会得出以下几点信息: 1、 序列号必须符合“05XX-XXXX-XXXX-XXXX-XXXX”的格式,第一节的低字节不能是11h到1Eh的值,必须能通过序列号校验; 2、 序列号第一节的低字节与软件版本有关。经过分析可知,注册表中没有记录序列号和激活码,或记录的序列号和激活码为空的话,软件就是试用版(Trial)的;如果第一节的低字节是04h~09h、0Bh~10h、12h~17h或19h~1Eh那么软件就是个人版(Personal)的;如果第一节的低字节是0Ah~10h或18h~1Eh,那么软件就是教学版(Academic)的;非这些范围,可能就是全功能版(Full)的。这可以从CCProject.dll的反汇编结果中看出,尤其是始于101DFB40的子程序。 试用版、个人版和教学版在使用上是有限制的; 3、 序列号第一节的低字节还决定着创建工程时所能使用的编程语言。在Schema.dll中,可以清晰地看到这一点。序列号第一节低字节的值和编程语言的关系如表九; 4、 在CCProject.dll始于1003E650的子程序中,除了要对序列号进行与前所述相同的校验外,还要对激活码进行校验。对激活码的校验与前所述有所不同。校验操作共42次,整理后见表三; 5、 CCGenerator.dll始于10024580的子程序中,对激活码有5次校验操作。这是有关XSL样式表的,整理后见表四; 6、 CCPropertiesU.dll中,始于31249B0和3138DD0的子程序对对激活码各有3次校验操作。这是有关工程属性的“Events”和“Format”标签的,整理后见表五; 7、 CCLang.dll始于432D390的子程序对激活码有5次校验操作,整理后见表六。顺便说的是,该子程序还使用了非顺序执行的方式来干扰阅读者。同时,该子程序还将激活码的A.2.12与A.0.0、A.3.8与A.1.2以及A.4.12与A.1.13相比较; 8、 CCProject.dll始于1003E650、10064AD0、10214E60的子程序还按从低位到高位的顺序,依次用A.0.0、A.0.4、A.0.7、A.0.9、A.0.13、A.1.0、A.1.1、A.1.2、A.1.3、A.1.4、A.1.5、A.1.8、A.1.9、A.1.10、A.1.13、A.2.2组成一个16位的整数,该整数表示许可期限的天数。经过试验,该值非零,Splash窗口就会有显示。 综上所述,我们把所有的校验规则综合起来,就成了激活码的完整校验规则(见表七)。让序列号符合“0503-XXXX-XXXX-XXXX-XXXX”的格式,且满足序列号校验规则,然后根据激活码校验规则生成激活码,就可以正确激活CodeCharge Studio 5了。
表一、序列号校验操作
表二、CCProject.dll始于10007AF0的子程序对激活码的校验操作
表三、CCProject.dll始于1003E650的子程序对激活码的校验操作
表四、CCGenerator.dll对激活码的校验操作
表五、CCPropertiesU.dll对激活码的校验操作
表六、CCLang.dll对激活码的校验操作
表七、综合后的校验操作
表八、搜索“SerialNumber”和“ActivationKey”的出现次数
表九、序列号第一节低字节值与编程语言
附录一、自解码代码示例
注:自解码代码不完全相同,但原理一样。
10007AF0
; ……
; 取上个对话框中Name、Company、Address、
Zip
、Country、Email、
; Serial Number的输入值
; ……
10007BF5
mov [ebp
+
FlagWord],
0
10007BFC
lea ecx, [ebp
+
HexSN]
10007C02
push ecx
10007C03
lea edx, [ebp
+
StrSN]
10007C09
push edx
; 按照
"%hx-%hx-%hx-%hx-%hx"
的格式将序列号转换成数值
10007C0A
call sub_1001B380
10007C0F
add esp,
8
10007C12
movzx eax, [ebp
+
HexSN]
10007C19
and
eax,
0FF00h
10007C1E
cmp
eax,
500h
10007C23
jnz loc_100086B7 ; 序列号首节非
05XX
的形式则转
10007C29
movsx ecx, byte ptr [ebp
+
HexSN]
10007C30
cmp
ecx,
11h
10007C33
jl short loc_10007C45
10007C35
movsx edx, byte ptr [ebp
+
HexSN]
10007C3C
cmp
edx,
1Eh
10007C3F
jle loc_100086B7 ; 序列号首节为
0511h
到
051Eh
也转
; 以下开始校验序列号
10007C45
mov [ebp
+
FlagWord],
1
10007C4C
cmp
[ebp
+
FlagWord],
0
10007C50
jz short loc_10007C97
10007C52
movzx eax, [ebp
+
HexSN
+
2
]
10007C59
and
eax,
1
; 取序列号第二节D0位
10007C5C
neg eax
10007C5E
sbb eax, eax
10007C60
neg eax ; 非零则eax
=
1
,否则eax
=
0
10007C62
movzx ecx, [ebp
+
HexSN
+
4
]
10007C69
and
ecx,
20h
; 取序列号第三节D5位
10007C6C
neg ecx
10007C6E
sbb ecx, ecx
10007C70
neg ecx ; 非零则ecx
=
1
,否则ecx
=
0
10007C72
movzx edx, [ebp
+
HexSN]
10007C79
and
edx,
200h
; 取序列号第一节D9位
10007C7F
neg edx
10007C81
sbb edx, edx
10007C83
neg edx ; 非零则edx
=
1
,否则edx
=
0
10007C85
and
ecx, edx ; ecx和edx相与
10007C87
cmp
eax, ecx ; 再与eax比较
10007C89
jnz short loc_10007C97
10007C8B
mov [ebp
+
var_1610],
1
10007C95
jmp short loc_10007CA1
10007C97
mov [ebp
+
var_1610],
0
10007CA1
mov eax, [ebp
+
var_1610]
10007CA7
mov [ebp
+
FlagWord], eax ;相等则标志为
1
,否则为
0
10007CAA
cmp
[ebp
+
FlagWord],
0
10007CAE
jz short loc_10007CF5 ; 标志为
0
则跳过下次校验
10007CB0
;……
10007AF0
; ……
; 取上个对话框中Name、Company、Address、
Zip
、Country、Email、
; Serial Number的输入值
; ……
10007BF5
mov [ebp
+
FlagWord],
0
10007BFC
lea ecx, [ebp
+
HexSN]
10007C02
push ecx
10007C03
lea edx, [ebp
+
StrSN]
10007C09
push edx
; 按照
"%hx-%hx-%hx-%hx-%hx"
的格式将序列号转换成数值
10007C0A
call sub_1001B380
10007C0F
add esp,
8
10007C12
movzx eax, [ebp
+
HexSN]
10007C19
and
eax,
0FF00h
10007C1E
cmp
eax,
500h
10007C23
jnz loc_100086B7 ; 序列号首节非
05XX
的形式则转
10007C29
movsx ecx, byte ptr [ebp
+
HexSN]
10007C30
cmp
ecx,
11h
10007C33
jl short loc_10007C45
10007C35
movsx edx, byte ptr [ebp
+
HexSN]
10007C3C
cmp
edx,
1Eh
10007C3F
jle loc_100086B7 ; 序列号首节为
0511h
到
051Eh
也转
; 以下开始校验序列号
10007C45
mov [ebp
+
FlagWord],
1
10007C4C
cmp
[ebp
+
FlagWord],
0
10007C50
jz short loc_10007C97
10007C52
movzx eax, [ebp
+
HexSN
+
2
]
10007C59
and
eax,
1
; 取序列号第二节D0位
10007C5C
neg eax
10007C5E
sbb eax, eax
10007C60
neg eax ; 非零则eax
=
1
,否则eax
=
0
10007C62
movzx ecx, [ebp
+
HexSN
+
4
]
10007C69
and
ecx,
20h
; 取序列号第三节D5位
10007C6C
neg ecx
10007C6E
sbb ecx, ecx
10007C70
neg ecx ; 非零则ecx
=
1
,否则ecx
=
0
10007C72
movzx edx, [ebp
+
HexSN]
10007C79
and
edx,
200h
; 取序列号第一节D9位
10007C7F
neg edx
10007C81
sbb edx, edx
10007C83
neg edx ; 非零则edx
=
1
,否则edx
=
0
10007C85
and
ecx, edx ; ecx和edx相与
10007C87
cmp
eax, ecx ; 再与eax比较
10007C89
jnz short loc_10007C97
10007C8B
mov [ebp
+
var_1610],
1
10007C95
jmp short loc_10007CA1
10007C97
mov [ebp
+
var_1610],
0
10007CA1
mov eax, [ebp
+
var_1610]
10007CA7
mov [ebp
+
FlagWord], eax ;相等则标志为
1
,否则为
0
10007CAA
cmp
[ebp
+
FlagWord],
0
10007CAE
jz short loc_10007CF5 ; 标志为
0
则跳过下次校验
10007CB0
;……
100086B7
; ……
; 取Reseller的输入值
; ……
100086D1
cmp
[ebp
+
FlagWord],
0
100086D5
jnz loc_1000A207 ; 通过校验则转
1000A207
100086DB
lea edx, [ebp
+
StrInpSN]
100086E1
push edx ; char
*
100086E2
call _strlen
100086E7
add esp,
4
100086EA
cmp
eax,
18h
; 未通过校验,且序列号不少于
24
字符则转
1000A124
100086ED
jnb loc_1000A124
100086F3
; ……
; 假定序列号形如“XXXX
-
XXXX
-
XXXX
-
XXXX”,并对其进行校验,
; 如果第一节的高字节是
03h
到
10h
的数值,且序列号通过校验,
; 则提示“序列号对CodeCharge Studio
5
无效”,然后退出子程序。
; 否则直接退出。
; ……
1000A124
; ……
; 提示“序列号无效”,退出子程序
; ……
100086B7
; ……
; 取Reseller的输入值
; ……
100086D1
cmp
[ebp
+
FlagWord],
0
100086D5
jnz loc_1000A207 ; 通过校验则转
1000A207
100086DB
lea edx, [ebp
+
StrInpSN]
100086E1
push edx ; char
*
100086E2
call _strlen
100086E7
add esp,
4
100086EA
cmp
eax,
18h
; 未通过校验,且序列号不少于
24
字符则转
1000A124
100086ED
jnb loc_1000A124
100086F3
; ……
; 假定序列号形如“XXXX
-
XXXX
-
XXXX
-
XXXX”,并对其进行校验,
; 如果第一节的高字节是
03h
到
10h
的数值,且序列号通过校验,
; 则提示“序列号对CodeCharge Studio
5
无效”,然后退出子程序。
; 否则直接退出。
; ……
1000A124
; ……
; 提示“序列号无效”,退出子程序
; ……
; ……
1000A704
push eax ; lpParameter
1000A705
push offset sub_1000CCC0 ; lpStartAddress
1000A70A
push
0
; dwStackSize
1000A70C
push
0
; lpThreadAttributes
1000A70E
call ds:CreateThread
; ……
; ……
1000A704
push eax ; lpParameter
1000A705
push offset sub_1000CCC0 ; lpStartAddress
1000A70A
push
0
; dwStackSize
1000A70C
push
0
; lpThreadAttributes
1000A70E
call ds:CreateThread
; ……
; ……
1000A7FE
mov [ebp
+
FlagWord],
1
1000A805
lea eax, [ebp
+
HexInAK2]
1000A80B
push eax
1000A80C
lea ecx, [ebp
+
StrInAK]
1000A812
push ecx
; Scan string with
"%hx-%hx-%hx-%hx-%hx"
format
1000A813
call sub_1001B380
1000A818
add esp,
8
1000A81B
lea edx, [ebp
+
HexInSN2]
1000A821
push edx
1000A822
lea eax, [ebp
+
StrInSN]
1000A828
push eax
; Scan string with
"%hx-%hx-%hx-%hx-%hx"
format
1000A829
call sub_1001B380
1000A82E
add esp,
8
1000A831
lea ecx, [ebp
+
HexInstCode]
1000A837
push ecx
1000A838
lea edx, [ebp
+
StrInstallCode]
1000A83E
push edx
; Scan string with
"%hx-%hx-%hx-%hx-%hx"
format
1000A83F
call sub_1001B380
1000A844
add esp,
8
1000A847
mov [ebp
+
FlagWord],
1
1000A84E
cmp
[ebp
+
FlagWord],
0
1000A852
jz short loc_1000A899
1000A854
movzx eax, [ebp
+
HexInAK2]
1000A85B
and
eax,
2
; 取激活码第一节D1位
1000A85E
neg eax
1000A860
sbb eax, eax
1000A862
neg eax ; 非零则eax
=
1
,否则eax
=
0
1000A864
movzx ecx, [ebp
+
HexInSN2
+
4
]
1000A86B
and
ecx,
400h
; 取序列号第三节D11位
1000A871
neg ecx
1000A873
sbb ecx, ecx
1000A875
neg ecx ; 非零则ecx
=
1
,否则ecx
=
0
1000A877
movzx edx, [ebp
+
HexInstCode
+
4
]
1000A87E
and
edx,
40h
; 取序列号第三节D6位
1000A881
neg edx
1000A883
sbb edx, edx
1000A885
neg edx ; 非零则edx
=
1
,否则edx
=
0
1000A887
and
ecx, edx ; ecx和edx相与
1000A889
cmp
eax, ecx ; 再与eax比较
1000A88B
jnz short loc_1000A899
1000A88D
mov [ebp
+
var_1788],
1
1000A897
jmp short loc_1000A8A3
1000A899
mov [ebp
+
var_1788],
0
1000A8A3
mov eax, [ebp
+
var_1788]
1000A8A9
mov [ebp
+
FlagWord], eax ;相等则标志为
1
,否则为
0
1000A8AC
cmp
[ebp
+
FlagWord],
0
1000A8B0
jz short loc_1000A8F4 ; 标志为
0
则跳过下次校验
; ……
; ……
1000A7FE
mov [ebp
+
FlagWord],
1
1000A805
lea eax, [ebp
+
HexInAK2]
1000A80B
push eax
1000A80C
lea ecx, [ebp
+
StrInAK]
1000A812
push ecx
; Scan string with
"%hx-%hx-%hx-%hx-%hx"
format
1000A813
call sub_1001B380
1000A818
add esp,
8
1000A81B
lea edx, [ebp
+
HexInSN2]
1000A821
push edx
1000A822
lea eax, [ebp
+
StrInSN]
1000A828
push eax
; Scan string with
"%hx-%hx-%hx-%hx-%hx"
format
1000A829
call sub_1001B380
1000A82E
add esp,
8
1000A831
lea ecx, [ebp
+
HexInstCode]
1000A837
push ecx
1000A838
lea edx, [ebp
+
StrInstallCode]
1000A83E
push edx
; Scan string with
"%hx-%hx-%hx-%hx-%hx"
format
1000A83F
call sub_1001B380
1000A844
add esp,
8
1000A847
mov [ebp
+
FlagWord],
1
1000A84E
cmp
[ebp
+
FlagWord],
0
1000A852
jz short loc_1000A899
1000A854
movzx eax, [ebp
+
HexInAK2]
1000A85B
and
eax,
2
; 取激活码第一节D1位
1000A85E
neg eax
1000A860
sbb eax, eax
1000A862
neg eax ; 非零则eax
=
1
,否则eax
=
0
1000A864
movzx ecx, [ebp
+
HexInSN2
+
4
]
1000A86B
and
ecx,
400h
; 取序列号第三节D11位
1000A871
neg ecx
1000A873
sbb ecx, ecx
1000A875
neg ecx ; 非零则ecx
=
1
,否则ecx
=
0
1000A877
movzx edx, [ebp
+
HexInstCode
+
4
]
1000A87E
and
edx,
40h
; 取序列号第三节D6位
1000A881
neg edx
1000A883
sbb edx, edx
1000A885
neg edx ; 非零则edx
=
1
,否则edx
=
0
1000A887
and
ecx, edx ; ecx和edx相与
1000A889
cmp
eax, ecx ; 再与eax比较
1000A88B
jnz short loc_1000A899
1000A88D
mov [ebp
+
var_1788],
1
1000A897
jmp short loc_1000A8A3
1000A899
mov [ebp
+
var_1788],
0
1000A8A3
mov eax, [ebp
+
var_1788]
1000A8A9
mov [ebp
+
FlagWord], eax ;相等则标志为
1
,否则为
0
1000A8AC
cmp
[ebp
+
FlagWord],
0
1000A8B0
jz short loc_1000A8F4 ; 标志为
0
则跳过下次校验
; ……
序号 操作 源
1
源
2
比较目标
1
AndCmp S.
0.9
S.
2.5
S.
1.0
2
XorCmp S.
0.2
S.
4.7
S.
1.1
3
AndCmp S.
4.14
S.
0.12
S.
1.4
4
XorCmp S.
3.9
S.
4.2
S.
1.5
5
OrCmp S.
3.15
S.
2.13
S.
1.6
6
OrCmp S.
4.6
S.
4.13
S.
1.9
7
XorCmp S.
0.6
S.
2.3
S.
1.10
8
OrCmp S.
1.12
S.
3.4
S.
1.11
9
XorCmp S.
2.11
S.
4.12
S.
1.14
10
OrCmp S.
3.10
S.
0.13
S.
1.15
11
OrCmp S.
1.7
S.
4.15
S.
2.2
12
XorCmp S.
3.0
S.
0.11
S.
2.6
13
AndCmp S.
2.0
S.
1.2
S.
2.9
14
XorCmp S.
0.3
S.
0.14
S.
2.10
15
AndCmp S.
4.1
S.
0.10
S.
2.15
16
OrCmp S.
3.13
S.
0.7
S.
3.3
17
AndCmp S.
4.11
S.
0.2
S.
3.5
18
XorCmp S.
0.3
S.
0.15
S.
3.6
19
XorCmp S.
4.4
S.
2.14
S.
3.7
20
OrCmp S.
2.8
S.
0.4
S.
3.8
21
OrCmp S.
2.4
S.
0.8
S.
3.11
22
AndCmp S.
0.5
S.
4.6
S.
3.12
23
AndCmp S.
1.8
S.
2.1
S.
3.14
24
OrCmp S.
2.7
S.
0.0
S.
4.0
25
OrCmp S.
4.3
S.
0.15
S.
4.5
26
XorCmp S.
3.1
S.
1.13
S.
4.8
27
AndCmp S.
1.3
S.
0.6
S.
4.9
28
AndCmp S.
2.12
S.
0.1
S.
4.10
序号 操作 源
1
源
2
比较目标
1
AndCmp S.
0.9
S.
2.5
S.
1.0
2
XorCmp S.
0.2
S.
4.7
S.
1.1
3
AndCmp S.
4.14
S.
0.12
S.
1.4
4
XorCmp S.
3.9
S.
4.2
S.
1.5
5
OrCmp S.
3.15
S.
2.13
S.
1.6
6
OrCmp S.
4.6
S.
4.13
S.
1.9
7
XorCmp S.
0.6
S.
2.3
S.
1.10
8
OrCmp S.
1.12
S.
3.4
S.
1.11
9
XorCmp S.
2.11
S.
4.12
S.
1.14
10
OrCmp S.
3.10
S.
0.13
S.
1.15
11
OrCmp S.
1.7
S.
4.15
S.
2.2
12
XorCmp S.
3.0
S.
0.11
S.
2.6
13
AndCmp S.
2.0
S.
1.2
S.
2.9
14
XorCmp S.
0.3
S.
0.14
S.
2.10
15
AndCmp S.
4.1
S.
0.10
S.
2.15
16
OrCmp S.
3.13
S.
0.7
S.
3.3
17
AndCmp S.
4.11
S.
0.2
S.
3.5
18
XorCmp S.
0.3
S.
0.15
S.
3.6
19
XorCmp S.
4.4
S.
2.14
S.
3.7
20
OrCmp S.
2.8
S.
0.4
S.
3.8
21
OrCmp S.
2.4
S.
0.8
S.
3.11
22
AndCmp S.
0.5
S.
4.6
S.
3.12
23
AndCmp S.
1.8
S.
2.1
S.
3.14
24
OrCmp S.
2.7
S.
0.0
S.
4.0
25
OrCmp S.
4.3
S.
0.15
S.
4.5
26
XorCmp S.
3.1
S.
1.13
S.
4.8
27
AndCmp S.
1.3
S.
0.6
S.
4.9
28
AndCmp S.
2.12
S.
0.1
S.
4.10
序号 操作 源
1
源
2
比较目标
1
AndCmp H.
2.6
S.
2.10
A.
0.1
2
OrCmp H.
3.2
S.
4.2
A.
0.2
3
OrCmp H.
1.13
S.
1.15
A.
0.5
4
AndCmp H.
1.12
S.
3.9
A.
0.6
5
XorCmp H.
4.3
S.
3.3
A.
0.8
6
XorCmp H.
0.15
S.
3.12
A.
0.11
7
OrCmp H.
0.7
S.
3.2
A.
0.12
8
OrCmp H.
4.0
S.
3.4
A.
0.14
9
AndCmp H.
4.14
S.
2.13
A.
1.6
10
XorCmp H.
1.11
S.
0.9
A.
1.7
11
XorCmp H.
2.11
S.
3.14
A.
1.11
12
OrCmp H.
0.2
S.
4.0
A.
1.14
13
XorCmp H.
1.6
S.
3.11
A.
2.1
14
OrCmp H.
1.1
S.
1.7
A.
2.3
15
XorCmp H.
1.0
S.
2.2
A.
2.4
16
XorCmp H.
2.10
S.
0.2
A.
2.7
17
OrCmp H.
4.12
S.
4.7
A.
2.8
18
AndCmp H.
2.4
S.
4.11
A.
2.9
19
XorCmp H.
3.10
S.
1.14
A.
2.11
20
XorCmp H.
1.3
S.
3.10
A.
3.1
21
AndCmp H.
0.1
S.
0.14
A.
3.2
22
XorCmp H.
0.5
S.
2.8
A.
3.7
23
OrCmp H.
0.9
S.
1.6
A.
3.11
24
AndCmp H.
4.9
S.
0.6
A.
3.13
25
AndCmp H.
2.1
S.
1.8
A.
3.14
26
OrCmp H.
2.3
S.
2.9
A.
4.0
27
XorCmp H.
2.12
S.
0.13
A.
4.1
28
AndCmp H.
4.5
S.
1.4
A.
4.3
29
XorCmp H.
3.0
S.
1.1
A.
4.5
30
OrCmp H.
2.0
S.
0.7
A.
4.6
31
XorCmp H.
1.9
S.
1.10
A.
4.8
32
XorCmp H.
4.4
S.
1.5
A.
4.10
33
AndCmp H.
2.14
S.
2.4
A.
4.13
序号 操作 源
1
源
2
比较目标
1
AndCmp H.
2.6
S.
2.10
A.
0.1
2
OrCmp H.
3.2
S.
4.2
A.
0.2
3
OrCmp H.
1.13
S.
1.15
A.
0.5
4
AndCmp H.
1.12
S.
3.9
A.
0.6
5
XorCmp H.
4.3
S.
3.3
A.
0.8
6
XorCmp H.
0.15
S.
3.12
A.
0.11
7
OrCmp H.
0.7
S.
3.2
A.
0.12
8
OrCmp H.
4.0
S.
3.4
A.
0.14
9
AndCmp H.
4.14
S.
2.13
A.
1.6
10
XorCmp H.
1.11
S.
0.9
A.
1.7
11
XorCmp H.
2.11
S.
3.14
A.
1.11
12
OrCmp H.
0.2
S.
4.0
A.
1.14
13
XorCmp H.
1.6
S.
3.11
A.
2.1
14
OrCmp H.
1.1
S.
1.7
A.
2.3
15
XorCmp H.
1.0
S.
2.2
A.
2.4
16
XorCmp H.
2.10
S.
0.2
A.
2.7
17
OrCmp H.
4.12
S.
4.7
A.
2.8
18
AndCmp H.
2.4
S.
4.11
A.
2.9
19
XorCmp H.
3.10
S.
1.14
A.
2.11
20
XorCmp H.
1.3
S.
3.10
A.
3.1
21
AndCmp H.
0.1
S.
0.14
A.
3.2
22
XorCmp H.
0.5
S.
2.8
A.
3.7
23
OrCmp H.
0.9
S.
1.6
A.
3.11
24
AndCmp H.
4.9
S.
0.6
A.
3.13
25
AndCmp H.
2.1
S.
1.8
A.
3.14
26
OrCmp H.
2.3
S.
2.9
A.
4.0
27
XorCmp H.
2.12
S.
0.13
A.
4.1
28
AndCmp H.
4.5
S.
1.4
A.
4.3
29
XorCmp H.
3.0
S.
1.1
A.
4.5
30
OrCmp H.
2.0
S.
0.7
A.
4.6
31
XorCmp H.
1.9
S.
1.10
A.
4.8
32
XorCmp H.
4.4
S.
1.5
A.
4.10
33
AndCmp H.
2.14
S.
2.4
A.
4.13
序号 操作 源
1
源
2
比较目标
1
AndCmp H.
2.6
S.
2.10
A.
0.1
2
OrCmp H.
3.2
S.
4.2
A.
0.2
3
OrCmp H.
4.1
S.
1.0
A.
0.3
4
OrCmp H.
1.13
S.
1.15
A.
0.5
5
XorCmp H.
4.3
S.
3.3
A.
0.8
6
AndCmp H.
0.0
S.
0.4
A.
0.10
7
XorCmp H.
0.15
S.
3.12
A.
0.11
8
OrCmp H.
0.7
S.
3.2
A.
0.12
9
OrCmp H.
4.0
S.
3.4
A.
0.14
10
AndCmp H.
3.14
S.
4.12
A.
0.15
11
AndCmp H.
4.14
S.
2.13
A.
1.6
12
XorCmp H.
1.11
S.
0.9
A.
1.7
13
XorCmp H.
2.11
S.
3.14
A.
1.11
14
OrCmp H.
0.2
S.
4.0
A.
1.14
15
AndCmp H.
0.4
S.
3.13
A.
1.15
16
AndCmp H.
0.8
S.
3.6
A.
2.0
17
XorCmp H.
1.6
S.
3.11
A.
2.1
18
OrCmp H.
1.1
S.
1.7
A.
2.3
19
XorCmp H.
1.0
S.
2.2
A.
2.4
20
XorCmp H.
4.10
S.
4.5
A.
2.5
21
XorCmp H.
1.5
S.
1.12
A.
2.6
22
XorCmp H.
2.10
S.
0.2
A.
2.7
23
OrCmp H.
4.12
S.
4.7
A.
2.8
24
AndCmp H.
0.10
S.
4.1
A.
2.10
25
XorCmp H.
3.10
S.
1.14
A.
2.11
26
OrCmp H.
1.10
S.
2.11
A.
2.15
27
XorCmp H.
1.3
S.
3.10
A.
3.1
28
XorCmp H.
3.1
S.
2.5
A.
3.4
29
XorCmp H.
0.5
S.
2.8
A.
3.7
30
AndCmp H.
3.12
S.
4.8
A.
3.9
31
OrCmp H.
0.9
S.
1.6
A.
3.11
32
AndCmp H.
4.9
S.
0.6
A.
3.13
33
AndCmp H.
2.1
S.
1.8
A.
3.14
34
XorCmp h.
2.12
S.
0.13
A.
4.1
35
AndCmp H.
4.5
S.
1.4
A.
4.3
36
OrCmp H.
2.2
S.
2.1
A.
4.4
37
XorCmp H.
3.0
S.
1.1
A.
4.5
38
OrCmp H.
2.0
S.
0.7
A.
4.6
39
XorCmp H.
1.9
S.
1.10
A.
4.8
40
XorCmp H.
4.4
S.
1.5
A.
4.10
41
AndCmp H.
2.14
S.
2.4
A.
4.13
42
AndCmp H.
3.8
S.
3.8
A.
4.15
序号 操作 源
1
源
2
比较目标
1
AndCmp H.
2.6
S.
2.10
A.
0.1
2
OrCmp H.
3.2
S.
4.2
A.
0.2
3
OrCmp H.
4.1
S.
1.0
A.
0.3
4
OrCmp H.
1.13
S.
1.15
A.
0.5
5
XorCmp H.
4.3
S.
3.3
A.
0.8
6
AndCmp H.
0.0
S.
0.4
A.
0.10
7
XorCmp H.
0.15
S.
3.12
A.
0.11
8
OrCmp H.
0.7
S.
3.2
A.
0.12
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2021-4-3 19:43
被chywan编辑
,原因: