一类代码迷惑的反解复杂性Word文件下载.docx
- 文档编号:16981754
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:18
- 大小:325.85KB
一类代码迷惑的反解复杂性Word文件下载.docx
《一类代码迷惑的反解复杂性Word文件下载.docx》由会员分享,可在线阅读,更多相关《一类代码迷惑的反解复杂性Word文件下载.docx(18页珍藏版)》请在冰豆网上搜索。
所以同理这个混淆技术也很有效。
2借助函数指针数组的混淆技术反解复杂度
定理1
:
在从具有函数指针或通过函数指针进行函数调用的数组中分配函数指针的情况下(函数返回整数),确定程序中是否存在可执行路径是NP困难的。
证明我们通过证明3-SAT问题(NP完全的)在多项式时间内可归约为定理1的问题来证明定理1。
现在,假设给定3-SAT问题,定义值为true或false的变量
,以及公式:
其中
的值为
或
,
,然后我们构造一个如图1的C程序,假设所有路径都是可执行的,所有if模块的条件部分没有影响,这样用标志“-”来代替所有if模块的条件。
在代码L1部分,
被定义为函数指针并与3-SAT问题中的命题变量
相关联。
L2分别把true和false赋给A[0]和A[1]。
在L3中的任意的经过if模块的可执行路径都与3-SAT问题的真假值指派相对应。
所以如果3-SAT问题有答案,我们也就有相应的可执行路径,函数指针fp指向L5上的函数true。
而且,如果3-SAT问题没有答案,至少存在一个子句它的三个变元都是假的,在这种情况下,fp指向函数false。
另一方面,如果函数指针指向在一个可执行路径上的L5上的函数true,那么有相同真假赋值的3-SAT问题也有解。
根据上面陈述的理由,3-SAT问题有解当且仅当我们能确定是否有可执行路径,在这个路径上函数fp指向L5上的函数地址true。
第3节我们的实验
为了验证定理1中的问题是否真是NP-HARD,我们将文章中未作任何处理的程序和经过混淆处理的程序分别运行并列出相应的汇编代码,然后进行比较。
3.1未作处理的程序代码
3:
inta,b;
4:
5:
if(a>
b)
004010288B45FCmoveax,dwordptr[ebp-4]
0040102B3B45F8cmpeax,dwordptr[ebp-8]
0040102E7E06jlemain+26h(00401036)
6:
{
7:
a=b;
004010308B4DF8movecx,dwordptr[ebp-8]
00401033894DFCmovdwordptr[ebp-4],ecx
8:
}
9:
10:
b=a+1;
004010368B55FCmovedx,dwordptr[ebp-4]
0040103983C201addedx,1
3.2应用函数指针数组混淆处理过的程序代码
3.2.1源程序
inta,b,c;
int(*fp1)(),(*fp2)();
int(*A[10])();
intfunc0()
{
if(a*(a+1)*(a+2)%6)
return(a*(a+2));
else
return((a-1)*a);
}
intfunc1()
return0;
intfunc2()
intfunc3()
switch(c)
case0:
fp1=func1;
break;
case1:
fp1=func2;
(fp1)();
voidmain()
A[0]=A[1]=func0;
A[2]=A[3]=func3;
A[4]=A[6]=func0;
A[5]=A[9]=func1;
A[7]=A[8]=func2;
fp2=A[(func0()%2)*a*b];
if(a*(a+1)%2==0)
{
fp2=A[((fp2)()%2)+2];
}
else
fp2=A[((fp2)()%2)+4];
(fp2)();
fp2=A[b&
1];
if((b-2)*(b-1)*b%6!
=0)
fp2=A[((fp2)()%2)+5];
fp2=A[((fp2)()%2)+3];
c=c*c*(c+1)*(c+1)%4+1;
(fp2)();
3.2.2汇编代码
1:
inta,b,c;
2:
int(*fp1)(),(*fp2)();
int(*A[10])();
intfunc0()
0040B55055pushebp
0040B5518BECmovebp,esp
0040B55383EC40subesp,40h
0040B55653pushebx
0040B55756pushesi
0040B55857pushedi
0040B5598D7DC0leaedi,[ebp-40h]
0040B55CB910000000movecx,10h
0040B561B8CCCCCCCCmoveax,0CCCCCCCCh
0040B566F3ABrepstosdwordptr[edi]
0040B568A1D8274200moveax,[a(004227d8)]
0040B56D83C001addeax,1
0040B5708B0DD8274200movecx,dwordptr[a(004227d8)]
0040B5760FAFC8imulecx,eax
0040B5798B15D8274200movedx,dwordptr[a(004227d8)]
0040B57F83C202addedx,2
0040B5820FAFCAimulecx,edx
0040B5858BC1moveax,ecx
0040B58799cdq
0040B588B906000000movecx,6
0040B58DF7F9idiveax,ecx
0040B58F85D2testedx,edx
0040B5917413jefunc0+56h(0040b5a6)
return(a*(a+2));
0040B5938B15D8274200movedx,dwordptr[a(004227d8)]
0040B59983C202addedx,2
0040B59CA1D8274200moveax,[a(004227d8)]
0040B5A10FAFC2imuleax,edx
0040B5A4EB0Fjmpfunc0+65h(0040b5b5)
11:
12:
13:
14:
15:
return((a-1)*a);
0040B5A6A1D8274200moveax,[a(004227d8)]
0040B5AB83E801subeax,1
0040B5AE0FAF05D8274200imuleax,dwordptr[a(004227d8)]
16:
17:
0040B5B55Fpopedi
0040B5B65Epopesi
0040B5B75Bpopebx
0040B5B88BE5movesp,ebp
0040B5BA5Dpopebp
0040B5BBC3ret
32:
33:
intfunc3()
34:
0040B5C055pushebp
0040B5C18BECmovebp,esp
0040B5C383EC44subesp,44h
0040B5C653pushebx
0040B5C756pushesi
0040B5C857pushedi
0040B5C98D7DBCleaedi,[ebp-44h]
0040B5CCB911000000movecx,11h
0040B5D1B8CCCCCCCCmoveax,0CCCCCCCCh
0040B5D6F3ABrepstosdwordptr[edi]
35:
36:
0040B5D8A1E0274200moveax,[c(004227e0)]
0040B5DD8945FCmovdwordptr[ebp-4],eax
0040B5E0837DFC00cmpdwordptr[ebp-4],0
0040B5E47408jefunc3+2Eh(0040b5ee)
0040B5E6837DFC01cmpdwordptr[ebp-4],1
0040B5EA740Ejefunc3+3Ah(0040b5fa)
0040B5ECEB16jmpfunc3+44h(0040b604)
37:
0040B5EEC705E42742001Emovdwordptr[fp1(004227e4)],offset@ILT+25(func1)(0040101e)
0040B5F8EB0Ajmpfunc3+44h(0040b604)
38:
0040B5FAC705E427420019movdwordptr[fp1(004227e4)],offset@ILT+20(func2)(00401019)
39:
40:
0040B6048BF4movesi,esp
0040B606FF15E4274200calldwordptr[fp1(004227e4)]
0040B60C3BF4cmpesi,esp
0040B60EE8ED5AFFFFcall__chkesp(00401100)
41:
42:
0040B61333C0xoreax,eax
43:
0040B6155Fpopedi
0040B6165Epopesi
0040B6175Bpopebx
0040B61883C444addesp,44h
0040B61B3BECcmpebp,esp
0040B61DE8DE5AFFFFcall__chkesp(00401100)
0040B6228BE5movesp,ebp
0040B6245Dpopebp
0040B625C3ret
44:
45:
voidmain()
46:
0040B63055pushebp
0040B6318BECmovebp,esp
0040B63383EC40subesp,40h
0040B63653pushebx
0040B63756pushesi
0040B63857pushedi
0040B6398D7DC0leaedi,[ebp-40h]
0040B63CB910000000movecx,10h
0040B641B8CCCCCCCCmoveax,0CCCCCCCCh
0040B646F3ABrepstosdwordptr[edi]
47:
0040B648C705B427420014movdwordptr[A+4(004227b4)],offset@ILT+15(func0)(00401014)
0040B652A1B4274200moveax,[A+4(004227b4)]
0040B657A3B0274200mov[A(004227b0)],eax
48:
0040B65CC705BC27420023movdwordptr[A+0Ch(004227bc)],offset@ILT+30(func3)(00401023)
0040B6668B0DBC274200movecx,dwordptr[A+0Ch(004227bc)]
0040B66C890DB8274200movdwordptr[A+8(004227b8)],ecx
49:
0040B672C705C827420014movdwordptr[A+18h(004227c8)],offset@ILT+15(func0)(00401014)
0040B67C8B15C8274200movedx,dwordptr[A+18h(004227c8)]
0040B6828915C0274200movdwordptr[A+10h(004227c0)],edx
50:
0040B688C705D42742001Emovdwordptr[A+24h(004227d4)],offset@ILT+25(func1)(0040101e)
0040B692A1D4274200moveax,[A+24h(004227d4)]
0040B697A3C4274200mov[A+14h(004227c4)],eax
51:
0040B69CC705D027420019movdwordptr[A+20h(004227d0)],offset@ILT+20(func2)(00401019)
0040B6A68B0DD0274200movecx,dwordptr[A+20h(004227d0)]
0040B6AC890DCC274200movdwordptr[A+1Ch(004227cc)],ecx
52:
53:
0040B6B2E85D59FFFFcall@ILT+15(func0)(00401014)
0040B6B72501000080andeax,80000001h
0040B6BC7905jnsmain+93h(0040b6c3)
0040B6BE48deceax
0040B6BF83C8FEoreax,0FEh
0040B6C240inceax
0040B6C30FAF05D8274200imuleax,dwordptr[a(004227d8)]
0040B6CA0FAF05DC274200imuleax,dwordptr[b(004227dc)]
0040B6D18B1485B0274200movedx,dwordptr[eax*4+4227B0h]
0040B6D88915E8274200movdwordptr[fp2(004227e8)],edx
54:
55:
0040B6DEA1D8274200moveax,[a(004227d8)]
0040B6E33B05DC274200cmpeax,dwordptr[b(004227dc)]
0040B6E90F8E83000000jlemain+142h(0040b772)
56:
57:
if(a*(a+1)%2==0)
0040B6EF8B0DD8274200movecx,dwordptr[a(004227d8)]
0040B6F583C101addecx,1
0040B6F88B15D8274200movedx,dwordptr[a(004227d8)]
0040B6FE0FAFD1imuledx,ecx
0040B70181E201000080andedx,80000001h
0040B7077905jnsmain+0DEh(0040b70e)
0040B7094Adecedx
0040B70A83CAFEoredx,0FEh
0040B70D42incedx
0040B70E85D2testedx,edx
0040B7107529jnemain+10Bh(0040b73b)
58:
59:
fp2=A[((fp2)()%2)+2];
0040B7128BF4movesi,esp
0040B714FF15E8274200calldwordptr[fp2(004227e8)]
0040B71A3BF4cmpesi,esp
0040B71CE8DF59FFFFcall__chkesp(00401100)
0040B7212501000080andeax,80000001h
0040B7267905jnsmain+0FDh(0040b72d)
0040B72848deceax
0040B72983C8FEoreax,0FEh
0040B72C40inceax
0040B72D8B0485B8274200moveax,dwordptr[eax*4+4227B8h]
0040B734A3E8274200mov[fp2(004227e8)],eax
60:
61:
62:
0040B739EB28jmpmain+133h(0040b763)
63:
64:
fp2=A[((fp2)()%2)+4];
0040B73B8BF4movesi,esp
0040B73DFF15E8274200calldwordptr[fp2(004227e8)]
0040B7433BF4cmpesi,esp
0040B745E8B659FFFFcall__chkesp(00401100)
0040B74A2501000080andeax,80000001h
0040B74F7905jnsmain+126h(0040b756)
0040B75148deceax
0040B75283C8FEoreax,0FEh
0040B75540inceax
0040B7568B0C85C0274200movecx,dwordptr[eax*4+4227C0h]
0040B75D890DE8274200movdwordptr[fp2(004227e8)],ecx
65:
66:
0040B7638BF4movesi,esp
0040B765FF15E8274200calldwordptr[fp2(004227e8)]
0040B76B3BF4cmpesi,esp
0040B76DE88E59FFFFcall__chkesp(00401100)
67:
68:
69:
0040B7728B15DC274200movedx,dwordptr[b(004227dc)]
0040B77883E201andedx,1
0040B77B8B0495B0274200moveax,dwordptr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一类 代码 迷惑 复杂性