加密pe导入表
作者:admin 日期:2009-08-29
学习了pe结构和加载器的原理之后我们知道加载器加载可执行文件的时候会自动加载需要的dll文件和改写导入表函数地址。要是纯粹加密了导入表导致的结果就是执行文件无法被加载。而这次我要讲的就是加密导入表,而且要保证文件正常执行。怎么做呢?
当然这只是我的一个设想,有时间我会做一下试验。
首先要做的就是找到文件中的导入表并把他整个移动到别的地方,有必要的话也可以加密一下。,然后在原来的导入表的位置构造一个新的导入表,这个导入表里面只有kernel32.dll一个dll和LoadLibraryA,GetProcAddress两个函数,这样pe应该是可以正常加载的。
然后我们要做的就是添加一段代码,并设置为程序的入口点。这段代码的作用就是到我们保存真正导入表的地方把导入表数据全部抄回到原来的地方,并修改每个函数的地址(地址可以用LoadliabrarA和GetProcAddress得到)。最后跳转到真正的程序入口点。
手动实现起来比较麻烦,如果可以的话,过几天我会把代码贴出来。
欢迎各位大牛指正
8.30
经过我的尝试是可以的
我尝试修改了一下windows计数器程序成功
我增加了一个节在新节里写入回复导入表代码
0101F015 > 68 802B0101 PUSH g17.01012B80
0101F01A 68 00000001 PUSH g17.01000000
0101F01F 68 01010101 PUSH g17.01010101
0101F024 68 01010101 PUSH g17.01010101
0101F029 68 10370101 PUSH g17.01013710
0101F02E 68 8C000000 PUSH 8C
0101F033 68 01010101 PUSH g17.01010101
0101F038 60 PUSHAD
0101F039 55 PUSH EBP
0101F03A 8BEC MOV EBP,ESP
0101F03C 8B45 38 MOV EAX,DWORD PTR SS:[EBP+38]
0101F03F 8B58 3C MOV EBX,DWORD PTR DS:[EAX+3C]
0101F042 8B8418 80000000 MOV EAX,DWORD PTR DS:[EAX+EBX+80]
0101F049 0345 38 ADD EAX,DWORD PTR SS:[EBP+38]
0101F04C 8B40 10 MOV EAX,DWORD PTR DS:[EAX+10]
0101F04F 0345 38 ADD EAX,DWORD PTR SS:[EBP+38]
0101F052 8B18 MOV EBX,DWORD PTR DS:[EAX]
0101F054 895D 34 MOV DWORD PTR SS:[EBP+34],EBX
0101F057 83C0 04 ADD EAX,4
0101F05A 8B18 MOV EBX,DWORD PTR DS:[EAX]
0101F05C 895D 30 MOV DWORD PTR SS:[EBP+30],EBX
0101F05F 8B45 2C MOV EAX,DWORD PTR SS:[EBP+2C]
0101F062 8B4D 28 MOV ECX,DWORD PTR SS:[EBP+28]
0101F065 8B55 3C MOV EDX,DWORD PTR SS:[EBP+3C]
0101F068 8B18 MOV EBX,DWORD PTR DS:[EAX]
0101F06A 891A MOV DWORD PTR DS:[EDX],EBX
0101F06C 83E9 03 SUB ECX,3
0101F06F 83C0 04 ADD EAX,4
0101F072 83C2 04 ADD EDX,4
0101F075 ^ E2 F1 LOOPD SHORT g17.0101F068
0101F077 8B5D 3C MOV EBX,DWORD PTR SS:[EBP+3C]
0101F07A 8B13 MOV EDX,DWORD PTR DS:[EBX]
0101F07C 83FA 00 CMP EDX,0
0101F07F 74 3E JE SHORT g17.0101F0BF
0101F081 8B53 0C MOV EDX,DWORD PTR DS:[EBX+C]
0101F084 0355 38 ADD EDX,DWORD PTR SS:[EBP+38]
0101F087 52 PUSH EDX
0101F088 FF55 30 CALL DWORD PTR SS:[EBP+30]
0101F08B 8945 24 MOV DWORD PTR SS:[EBP+24],EAX
0101F08E 8B33 MOV ESI,DWORD PTR DS:[EBX]
0101F090 0375 38 ADD ESI,DWORD PTR SS:[EBP+38]
0101F093 8B7B 10 MOV EDI,DWORD PTR DS:[EBX+10]
0101F096 037D 38 ADD EDI,DWORD PTR SS:[EBP+38]
0101F099 8B17 MOV EDX,DWORD PTR DS:[EDI]
0101F09B 83FA 00 CMP EDX,0
0101F09E 74 1A JE SHORT g17.0101F0BA
0101F0A0 8B16 MOV EDX,DWORD PTR DS:[ESI]
0101F0A2 0355 38 ADD EDX,DWORD PTR SS:[EBP+38]
0101F0A5 83C2 02 ADD EDX,2
0101F0A8 8B45 24 MOV EAX,DWORD PTR SS:[EBP+24]
0101F0AB 52 PUSH EDX
0101F0AC 50 PUSH EAX
0101F0AD FF55 34 CALL DWORD PTR SS:[EBP+34]
0101F0B0 8907 MOV DWORD PTR DS:[EDI],EAX
0101F0B2 83C6 04 ADD ESI,4
0101F0B5 83C7 04 ADD EDI,4
0101F0B8 ^ EB DF JMP SHORT g17.0101F099
0101F0BA 83C3 14 ADD EBX,14
0101F0BD ^ EB BB JMP SHORT g17.0101F07A
0101F0BF 8BE5 MOV ESP,EBP
0101F0C1 5D POP EBP
0101F0C2 61 POPAD
0101F0C3 83C4 1C ADD ESP,1C
0101F0C6 - E9 AA33FFFF JMP g17.01012475
0101F0CB 90 NOP
相应的16进制代码
68 80 2B 01 01 68 00 00 00 01 68 01 01 01 01 68 01 01 01 01 68 10 37 01 01 68 8C 00 00 00 68 01
01 01 01 60 55 8B EC 8B 45 38 8B 58 3C 8B 84 18 80 00 00 00 03 45 38 8B 40 10 03 45 38 8B 18 89
5D 34 83 C0 04 8B 18 89 5D 30 8B 45 2C 8B 4D 28 8B 55 3C 8B 18 89 1A 83 E9 03 83 C0 04 83 C2 04
E2 F1 8B 5D 3C 8B 13 83 FA 00 74 3E 8B 53 0C 03 55 38 52 FF 55 30 89 45 24 8B 33 03 75 38 8B 7B
10 03 7D 38 8B 17 83 FA 00 74 1A 8B 16 03 55 38 83 C2 02 8B 45 24 52 50 FF 55 34 89 07 83 C6 04
83 C7 04 EB DF 83 C3 14 EB BB 8B E5 5D 61 83 C4 1C E9 AA 33 FF FF 90
以下为修改过的计算器程序,有兴趣的朋友可以下载去看看
点击下载此文件
接下来我会着手写一个加密程序方便使用
当然这只是我的一个设想,有时间我会做一下试验。
首先要做的就是找到文件中的导入表并把他整个移动到别的地方,有必要的话也可以加密一下。,然后在原来的导入表的位置构造一个新的导入表,这个导入表里面只有kernel32.dll一个dll和LoadLibraryA,GetProcAddress两个函数,这样pe应该是可以正常加载的。
然后我们要做的就是添加一段代码,并设置为程序的入口点。这段代码的作用就是到我们保存真正导入表的地方把导入表数据全部抄回到原来的地方,并修改每个函数的地址(地址可以用LoadliabrarA和GetProcAddress得到)。最后跳转到真正的程序入口点。
手动实现起来比较麻烦,如果可以的话,过几天我会把代码贴出来。
欢迎各位大牛指正
8.30
经过我的尝试是可以的
我尝试修改了一下windows计数器程序成功
我增加了一个节在新节里写入回复导入表代码
0101F015 > 68 802B0101 PUSH g17.01012B80
0101F01A 68 00000001 PUSH g17.01000000
0101F01F 68 01010101 PUSH g17.01010101
0101F024 68 01010101 PUSH g17.01010101
0101F029 68 10370101 PUSH g17.01013710
0101F02E 68 8C000000 PUSH 8C
0101F033 68 01010101 PUSH g17.01010101
0101F038 60 PUSHAD
0101F039 55 PUSH EBP
0101F03A 8BEC MOV EBP,ESP
0101F03C 8B45 38 MOV EAX,DWORD PTR SS:[EBP+38]
0101F03F 8B58 3C MOV EBX,DWORD PTR DS:[EAX+3C]
0101F042 8B8418 80000000 MOV EAX,DWORD PTR DS:[EAX+EBX+80]
0101F049 0345 38 ADD EAX,DWORD PTR SS:[EBP+38]
0101F04C 8B40 10 MOV EAX,DWORD PTR DS:[EAX+10]
0101F04F 0345 38 ADD EAX,DWORD PTR SS:[EBP+38]
0101F052 8B18 MOV EBX,DWORD PTR DS:[EAX]
0101F054 895D 34 MOV DWORD PTR SS:[EBP+34],EBX
0101F057 83C0 04 ADD EAX,4
0101F05A 8B18 MOV EBX,DWORD PTR DS:[EAX]
0101F05C 895D 30 MOV DWORD PTR SS:[EBP+30],EBX
0101F05F 8B45 2C MOV EAX,DWORD PTR SS:[EBP+2C]
0101F062 8B4D 28 MOV ECX,DWORD PTR SS:[EBP+28]
0101F065 8B55 3C MOV EDX,DWORD PTR SS:[EBP+3C]
0101F068 8B18 MOV EBX,DWORD PTR DS:[EAX]
0101F06A 891A MOV DWORD PTR DS:[EDX],EBX
0101F06C 83E9 03 SUB ECX,3
0101F06F 83C0 04 ADD EAX,4
0101F072 83C2 04 ADD EDX,4
0101F075 ^ E2 F1 LOOPD SHORT g17.0101F068
0101F077 8B5D 3C MOV EBX,DWORD PTR SS:[EBP+3C]
0101F07A 8B13 MOV EDX,DWORD PTR DS:[EBX]
0101F07C 83FA 00 CMP EDX,0
0101F07F 74 3E JE SHORT g17.0101F0BF
0101F081 8B53 0C MOV EDX,DWORD PTR DS:[EBX+C]
0101F084 0355 38 ADD EDX,DWORD PTR SS:[EBP+38]
0101F087 52 PUSH EDX
0101F088 FF55 30 CALL DWORD PTR SS:[EBP+30]
0101F08B 8945 24 MOV DWORD PTR SS:[EBP+24],EAX
0101F08E 8B33 MOV ESI,DWORD PTR DS:[EBX]
0101F090 0375 38 ADD ESI,DWORD PTR SS:[EBP+38]
0101F093 8B7B 10 MOV EDI,DWORD PTR DS:[EBX+10]
0101F096 037D 38 ADD EDI,DWORD PTR SS:[EBP+38]
0101F099 8B17 MOV EDX,DWORD PTR DS:[EDI]
0101F09B 83FA 00 CMP EDX,0
0101F09E 74 1A JE SHORT g17.0101F0BA
0101F0A0 8B16 MOV EDX,DWORD PTR DS:[ESI]
0101F0A2 0355 38 ADD EDX,DWORD PTR SS:[EBP+38]
0101F0A5 83C2 02 ADD EDX,2
0101F0A8 8B45 24 MOV EAX,DWORD PTR SS:[EBP+24]
0101F0AB 52 PUSH EDX
0101F0AC 50 PUSH EAX
0101F0AD FF55 34 CALL DWORD PTR SS:[EBP+34]
0101F0B0 8907 MOV DWORD PTR DS:[EDI],EAX
0101F0B2 83C6 04 ADD ESI,4
0101F0B5 83C7 04 ADD EDI,4
0101F0B8 ^ EB DF JMP SHORT g17.0101F099
0101F0BA 83C3 14 ADD EBX,14
0101F0BD ^ EB BB JMP SHORT g17.0101F07A
0101F0BF 8BE5 MOV ESP,EBP
0101F0C1 5D POP EBP
0101F0C2 61 POPAD
0101F0C3 83C4 1C ADD ESP,1C
0101F0C6 - E9 AA33FFFF JMP g17.01012475
0101F0CB 90 NOP
相应的16进制代码
68 80 2B 01 01 68 00 00 00 01 68 01 01 01 01 68 01 01 01 01 68 10 37 01 01 68 8C 00 00 00 68 01
01 01 01 60 55 8B EC 8B 45 38 8B 58 3C 8B 84 18 80 00 00 00 03 45 38 8B 40 10 03 45 38 8B 18 89
5D 34 83 C0 04 8B 18 89 5D 30 8B 45 2C 8B 4D 28 8B 55 3C 8B 18 89 1A 83 E9 03 83 C0 04 83 C2 04
E2 F1 8B 5D 3C 8B 13 83 FA 00 74 3E 8B 53 0C 03 55 38 52 FF 55 30 89 45 24 8B 33 03 75 38 8B 7B
10 03 7D 38 8B 17 83 FA 00 74 1A 8B 16 03 55 38 83 C2 02 8B 45 24 52 50 FF 55 34 89 07 83 C6 04
83 C7 04 EB DF 83 C3 14 EB BB 8B E5 5D 61 83 C4 1C E9 AA 33 FF FF 90
以下为修改过的计算器程序,有兴趣的朋友可以下载去看看
点击下载此文件
接下来我会着手写一个加密程序方便使用
评论: 1 | 查看次数: 12078