ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:325.85KB ,
资源ID:4065724      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4065724.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(一类代码迷惑的反解复杂性.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

一类代码迷惑的反解复杂性.docx

1、一类代码迷惑的反解复杂性一类代码迷惑的反解复杂性问题摘要 证明了借助函数指针数组的混淆的反解复杂度是NP-Hard的。本文重点介绍该结论。关键词 代码迷惑 复杂度 函数指针数组1借助函数指针数组的混淆技术简介1.1 函数指针在软件混淆中的使用基于函数指针的混淆技术包含3个阶段:1、函数的分解:首先我们随机挑选一个函数并把它分解为更小的函数,然后在保持原函数语义的情况下用这几个小函数重新构造原函数。2、函数指针的使用:函数和随机选择的分解函数可以凭借函数指针调用。例如,图中2右侧的程序可以被转换为图3中的程序。两个新的if模块被引入了,这两个新的if模块的条件值恒为1,而源程序的语义被保留了。然

2、而,静态分析很难评估这些模块从而很难确定在这些if模块存在下的可执行路径。所以,if模块使确定函数指针指向的函数地址变得困难了。3、函数指针数组的引入:这里我们引入函数指针数组,然后把函数地址随机地存在数组中并做出表达式用一些(直接或非直接的)函数调用来计算每个索引。现在一些函数调用被替换为通过这种数组的调用。例如,图3的程序可以转换为图4的程序。现在对于fp的分配取决于凭借fp先前的值的函数调用和A的相关元素。它们一起有效地抵御了静态分析。1.2 增加不可实现路径的数量跨函数分析很困难的原因之一就是它必须遵循可执行路径,基于这个事实,我们提出两种软件混淆技术来阻止跨函数分析:1、合并多个函数

3、调用为一个:这个技术把多个函数调用合并为一个新创建的函数,如图5所示,随机选取两个函数调用func1()和func2(),函数func3()是新创建的,最后两个调用以某个混淆的方式嵌入到了func3()中。经过这样的混淆处理,调用图的变化如图6所示,转换后比转换前多了两个不可实现路径。如果跨函数分析忽略了不可实现路径,它只会失败或产生不精确的分析结果。即使跨函数分析努力地要遵循可实现路径也会非常困难。2、加入大量的return模块:加入大量的return模块的混淆技术也可以使调用图变得复杂并且阻止跨函数分析,如图7所示,相应的调用图如图8所示。不难看出调用图变得更复杂了并且不可实现路径的数量从

4、2个增加到4个。所以同理这个混淆技术也很有效。2 借助函数指针数组的混淆技术反解复杂度定理1:在从具有函数指针或通过函数指针进行函数调用的数组中分配函数指针的情况下(函数返回整数),确定程序中是否存在可执行路径是NP困难的。证明 我们通过证明3-SAT问题(NP完全的)在多项式时间内可归约为定理1的问题来证明定理1。现在,假设给定3-SAT问题,定义值为true或false的变量,以及公式:其中的值为或,然后我们构造一个如图1的C程序,假设所有路径都是可执行的,所有if模块的条件部分没有影响,这样用标志“-”来代替所有if模块的条件。在代码L1部分,被定义为函数指针并与3-SAT问题中的命题变

5、量相关联。L2分别把true和false赋给A0和A1。在L3中的任意的经过if模块的可执行路径都与3-SAT问题的真假值指派相对应。所以如果3-SAT问题有答案,我们也就有相应的可执行路径,函数指针fp指向L5上的函数true。而且,如果3-SAT问题没有答案,至少存在一个子句它的三个变元都是假的,在这种情况下,fp指向函数false。另一方面,如果函数指针指向在一个可执行路径上的L5上的函数true,那么有相同真假赋值的3-SAT问题也有解。根据上面陈述的理由,3-SAT问题有解当且仅当我们能确定是否有可执行路径,在这个路径上函数fp指向L5上的函数地址true。第3节 我们的实验为了验证

6、定理1中的问题是否真是NP-HARD,我们将文章中未作任何处理的程序和经过混淆处理的程序分别运行并列出相应的汇编代码,然后进行比较。3.1 未作处理的程序代码3: int a,b;4:5: if (a b)00401028 8B 45 FC mov eax,dword ptr ebp-40040102B 3B 45 F8 cmp eax,dword ptr ebp-80040102E 7E 06 jle main+26h (00401036)6: 7: a = b;00401030 8B 4D F8 mov ecx,dword ptr ebp-800401033 89 4D FC mov dw

7、ord ptr ebp-4,ecx8: 9:10: b = a + 1;00401036 8B 55 FC mov edx,dword ptr ebp-400401039 83 C2 01 add edx,13.2 应用函数指针数组混淆处理过的程序代码3.2.1 源程序int a,b,c;int (*fp1)(),(*fp2)();int (*A10)();int func0() if (a * (a + 1) * (a + 2) % 6) return (a * (a + 2); else return (a - 1) * a); int func1() a = b; return 0;in

8、t func2() b = a + 1; return 0;int func3() switch (c) case 0: fp1 = func1;break; case 1: fp1 = func2;break; (fp1)(); return 0;void main() A0 = A1 = func0; A2 = A3 = func3; A4 = A6 = func0; A5 = A9 = func1; A7 = A8 = func2; fp2 = A(func0() % 2) * a * b; if (a b) if (a * (a + 1) % 2 = 0) fp2 = A(fp2)()

9、 % 2) + 2; else fp2 = A(fp2)() % 2) + 4; (fp2)(); fp2 = Ab & 1; if (b - 2) * (b - 1) * b % 6 != 0) fp2 = A(fp2)() % 2) + 5; else fp2 = A(fp2)() % 2) + 3; c = c * c * (c + 1) * (c + 1) % 4 + 1; (fp2)();3.2.2 汇编代码1: int a,b,c;2:3: int (*fp1)(),(*fp2)();4: int (*A10)();5:6: int func0()7: 0040B550 55 pu

10、sh ebp0040B551 8B EC mov ebp,esp0040B553 83 EC 40 sub esp,40h0040B556 53 push ebx0040B557 56 push esi0040B558 57 push edi0040B559 8D 7D C0 lea edi,ebp-40h0040B55C B9 10 00 00 00 mov ecx,10h0040B561 B8 CC CC CC CC mov eax,0CCCCCCCCh0040B566 F3 AB rep stos dword ptr edi8: if (a * (a + 1) * (a + 2) % 6

11、)0040B568 A1 D8 27 42 00 mov eax,a (004227d8)0040B56D 83 C0 01 add eax,10040B570 8B 0D D8 27 42 00 mov ecx,dword ptr a (004227d8)0040B576 0F AF C8 imul ecx,eax0040B579 8B 15 D8 27 42 00 mov edx,dword ptr a (004227d8)0040B57F 83 C2 02 add edx,20040B582 0F AF CA imul ecx,edx0040B585 8B C1 mov eax,ecx0

12、040B587 99 cdq0040B588 B9 06 00 00 00 mov ecx,60040B58D F7 F9 idiv eax,ecx0040B58F 85 D2 test edx,edx0040B591 74 13 je func0+56h (0040b5a6)9: 10: return (a * (a + 2);0040B593 8B 15 D8 27 42 00 mov edx,dword ptr a (004227d8)0040B599 83 C2 02 add edx,20040B59C A1 D8 27 42 00 mov eax,a (004227d8)0040B5

13、A1 0F AF C2 imul eax,edx0040B5A4 EB 0F jmp func0+65h (0040b5b5)11: 12:13: else14: 15: return (a - 1) * a);0040B5A6 A1 D8 27 42 00 mov eax,a (004227d8)0040B5AB 83 E8 01 sub eax,10040B5AE 0F AF 05 D8 27 42 00 imul eax,dword ptr a (004227d8)16: 17: 0040B5B5 5F pop edi0040B5B6 5E pop esi0040B5B7 5B pop

14、ebx0040B5B8 8B E5 mov esp,ebp0040B5BA 5D pop ebp0040B5BB C3 ret32:33: int func3()34: 0040B5C0 55 push ebp0040B5C1 8B EC mov ebp,esp0040B5C3 83 EC 44 sub esp,44h0040B5C6 53 push ebx0040B5C7 56 push esi0040B5C8 57 push edi0040B5C9 8D 7D BC lea edi,ebp-44h0040B5CC B9 11 00 00 00 mov ecx,11h0040B5D1 B8

15、CC CC CC CC mov eax,0CCCCCCCCh0040B5D6 F3 AB rep stos dword ptr edi35: switch (c)36: 0040B5D8 A1 E0 27 42 00 mov eax,c (004227e0)0040B5DD 89 45 FC mov dword ptr ebp-4,eax0040B5E0 83 7D FC 00 cmp dword ptr ebp-4,00040B5E4 74 08 je func3+2Eh (0040b5ee)0040B5E6 83 7D FC 01 cmp dword ptr ebp-4,10040B5EA

16、 74 0E je func3+3Ah (0040b5fa)0040B5EC EB 16 jmp func3+44h (0040b604)37: case 0: fp1 = func1;break;0040B5EE C7 05 E4 27 42 00 1E mov dword ptr fp1 (004227e4),offset ILT+25(func1) (0040101e)0040B5F8 EB 0A jmp func3+44h (0040b604)38: case 1: fp1 = func2;break;0040B5FA C7 05 E4 27 42 00 19 mov dword pt

17、r fp1 (004227e4),offset ILT+20(func2) (00401019)39: 40: (fp1)();0040B604 8B F4 mov esi,esp0040B606 FF 15 E4 27 42 00 call dword ptr fp1 (004227e4)0040B60C 3B F4 cmp esi,esp0040B60E E8 ED 5A FF FF call _chkesp (00401100)41:42: return 0;0040B613 33 C0 xor eax,eax43: 0040B615 5F pop edi0040B616 5E pop

18、esi0040B617 5B pop ebx0040B618 83 C4 44 add esp,44h0040B61B 3B EC cmp ebp,esp0040B61D E8 DE 5A FF FF call _chkesp (00401100)0040B622 8B E5 mov esp,ebp0040B624 5D pop ebp0040B625 C3 ret44:45: void main()46: 0040B630 55 push ebp0040B631 8B EC mov ebp,esp0040B633 83 EC 40 sub esp,40h0040B636 53 push eb

19、x0040B637 56 push esi0040B638 57 push edi0040B639 8D 7D C0 lea edi,ebp-40h0040B63C B9 10 00 00 00 mov ecx,10h0040B641 B8 CC CC CC CC mov eax,0CCCCCCCCh0040B646 F3 AB rep stos dword ptr edi47: A0 = A1 = func0;0040B648 C7 05 B4 27 42 00 14 mov dword ptr A+4 (004227b4),offset ILT+15(func0) (00401014)00

20、40B652 A1 B4 27 42 00 mov eax,A+4 (004227b4)0040B657 A3 B0 27 42 00 mov A (004227b0),eax48: A2 = A3 = func3;0040B65C C7 05 BC 27 42 00 23 mov dword ptr A+0Ch (004227bc),offset ILT+30(func3) (00401023)0040B666 8B 0D BC 27 42 00 mov ecx,dword ptr A+0Ch (004227bc)0040B66C 89 0D B8 27 42 00 mov dword pt

21、r A+8 (004227b8),ecx49: A4 = A6 = func0;0040B672 C7 05 C8 27 42 00 14 mov dword ptr A+18h (004227c8),offset ILT+15(func0) (00401014)0040B67C 8B 15 C8 27 42 00 mov edx,dword ptr A+18h (004227c8)0040B682 89 15 C0 27 42 00 mov dword ptr A+10h (004227c0),edx50: A5 = A9 = func1;0040B688 C7 05 D4 27 42 00

22、 1E mov dword ptr A+24h (004227d4),offset ILT+25(func1) (0040101e)0040B692 A1 D4 27 42 00 mov eax,A+24h (004227d4)0040B697 A3 C4 27 42 00 mov A+14h (004227c4),eax51: A7 = A8 = func2;0040B69C C7 05 D0 27 42 00 19 mov dword ptr A+20h (004227d0),offset ILT+20(func2) (00401019)0040B6A6 8B 0D D0 27 42 00

23、 mov ecx,dword ptr A+20h (004227d0)0040B6AC 89 0D CC 27 42 00 mov dword ptr A+1Ch (004227cc),ecx52:53: fp2 = A(func0() % 2) * a * b;0040B6B2 E8 5D 59 FF FF call ILT+15(func0) (00401014)0040B6B7 25 01 00 00 80 and eax,80000001h0040B6BC 79 05 jns main+93h (0040b6c3)0040B6BE 48 dec eax0040B6BF 83 C8 FE

24、 or eax,0FEh0040B6C2 40 inc eax0040B6C3 0F AF 05 D8 27 42 00 imul eax,dword ptr a (004227d8)0040B6CA 0F AF 05 DC 27 42 00 imul eax,dword ptr b (004227dc)0040B6D1 8B 14 85 B0 27 42 00 mov edx,dword ptr eax*4+4227B0h0040B6D8 89 15 E8 27 42 00 mov dword ptr fp2 (004227e8),edx54:55: if (a b)0040B6DE A1

25、D8 27 42 00 mov eax,a (004227d8)0040B6E3 3B 05 DC 27 42 00 cmp eax,dword ptr b (004227dc)0040B6E9 0F 8E 83 00 00 00 jle main+142h (0040b772)56: 57: if (a * (a + 1) % 2 = 0)0040B6EF 8B 0D D8 27 42 00 mov ecx,dword ptr a (004227d8)0040B6F5 83 C1 01 add ecx,10040B6F8 8B 15 D8 27 42 00 mov edx,dword ptr

26、 a (004227d8)0040B6FE 0F AF D1 imul edx,ecx0040B701 81 E2 01 00 00 80 and edx,80000001h0040B707 79 05 jns main+0DEh (0040b70e)0040B709 4A dec edx0040B70A 83 CA FE or edx,0FEh0040B70D 42 inc edx0040B70E 85 D2 test edx,edx0040B710 75 29 jne main+10Bh (0040b73b)58: 59: fp2 = A(fp2)() % 2) + 2;0040B712

27、8B F4 mov esi,esp0040B714 FF 15 E8 27 42 00 call dword ptr fp2 (004227e8)0040B71A 3B F4 cmp esi,esp0040B71C E8 DF 59 FF FF call _chkesp (00401100)0040B721 25 01 00 00 80 and eax,80000001h0040B726 79 05 jns main+0FDh (0040b72d)0040B728 48 dec eax0040B729 83 C8 FE or eax,0FEh0040B72C 40 inc eax0040B72

28、D 8B 04 85 B8 27 42 00 mov eax,dword ptr eax*4+4227B8h0040B734 A3 E8 27 42 00 mov fp2 (004227e8),eax60: 61:62: else0040B739 EB 28 jmp main+133h (0040b763)63: 64: fp2 = A(fp2)() % 2) + 4;0040B73B 8B F4 mov esi,esp0040B73D FF 15 E8 27 42 00 call dword ptr fp2 (004227e8)0040B743 3B F4 cmp esi,esp0040B7

29、45 E8 B6 59 FF FF call _chkesp (00401100)0040B74A 25 01 00 00 80 and eax,80000001h0040B74F 79 05 jns main+126h (0040b756)0040B751 48 dec eax0040B752 83 C8 FE or eax,0FEh0040B755 40 inc eax0040B756 8B 0C 85 C0 27 42 00 mov ecx,dword ptr eax*4+4227C0h0040B75D 89 0D E8 27 42 00 mov dword ptr fp2 (00422

30、7e8),ecx65: 66: (fp2)();0040B763 8B F4 mov esi,esp0040B765 FF 15 E8 27 42 00 call dword ptr fp2 (004227e8)0040B76B 3B F4 cmp esi,esp0040B76D E8 8E 59 FF FF call _chkesp (00401100)67: 68:69: fp2 = Ab & 1;0040B772 8B 15 DC 27 42 00 mov edx,dword ptr b (004227dc)0040B778 83 E2 01 and edx,10040B77B 8B 04 95 B0 27 42 00 mov eax,dword ptr

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1