手脱Krypton 0.2 -> Yado/Lockless的壳(代码修复IAT)[网络技术]
本文“手脱Krypton 0.2 -> Yado/Lockless的壳(代码修复IAT)[网络技术]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
看了一篇对IAT加密处理的文章,学习到达OEP后修复IAT,练下手,假若有误,还请指教.
版权全部:evilangel
试炼壳是Krypton The Krypter [v.0.2]这个原程序
1、查壳:
PEiD查壳显示:
Krypton 0.2 -> Yado/Lockless
2、到达OEP
首先OD载入,忽视全部非常,停在
00434000 > 8B0C24 mov ecx, [esp] ;
kernel32.7C817027
00434003 E9 0A7C0100 jmp 0044BC12
00434008 AD lods dword ptr [esi]
00434009 42 inc edx
0043400A 40 inc eax
0043400B BD BE9D7A04 mov ebp, 47A9DBE
翻开内存(alt+m),在
Memory map, 条目 19
地址=0041F000
大小=00015000 (86016.)
属主=KRYPTON 00400000
区段=YADO
包含=资源
范例=Imag 01001002
拜候=R
初始拜候=RWE
F2下断,F9运行
7C932315 66:8B50 0C mov dx, [eax+C]
7C932319 66:8955 B4 mov [ebp-4C], dx
7C93231D 8D70 10 lea esi, [eax+10]
7C932320 8975 94 mov [ebp-6C], esi
7C932323 8B55 0C mov edx, [ebp+C]
7C932326 66:F742 02 FFFF test word ptr [edx+2], 0FFFF
7C93232C 75 11 jnz short 7C93233F
接着翻开内存,在
Memory map, 条目 20
地址=00401000
大小=00002000 (8192.)
属主=KRYPTON 00400000
区段=YADO
包含=代码
范例=Imag 01001002
拜候=R
初始拜候=RWE
F2下断,F9运行
003A3A39 66:8138 FF15 cmp word ptr [eax], 15FF ; //来到这
儿
003A3A3E 75 09 jnz short 003A3A49
003A3A40 8378 02 00 cmp dword ptr [eax+2], 0
003A3A44 75 03 jnz short 003A3A49
003A3A46 8958 02 mov [eax+2], ebx
003A3A49 40 inc eax
003A3A4A 49 dec ecx
003A3A4B 85C9 test ecx, ecx
003A3A4D ^ 75 EA jnz short 003A3A39
003A3A4F 8B8D AFBB4100 mov ecx, [ebp+41BBAF]
003A3A55 890C24 mov [esp], ecx
003A3A58 8B95 B6BB4100 mov edx, [ebp+41BBB6] ;
KRYPTON.00401000
003A3A5E FFE2 jmp edx ; //上面把
OEP的地址给edx,然后跳向OEP
到达OEP看看,MASM32 / TASM32编写的
00401000 6A 00 push 0 ; //OEP
00401002 E8 C1100000 call 004020C8 ; //ENTER回
车跟入
00401007 A3 583B4000 mov [403B58], eax
0040100C 6A 00 push 0
0040100E 68 29104000 push 00401029
00401013 6A 00 push 0
00401015 6A 67 push 67
00401017 FF35 583B4000 push dword ptr [403B58]
0040101D E8 DC100000 call 004020FE
00401022 6A 00 push 0
00401024 E8 45100000 call 0040206E
3、解析IAT加密方法
在00401002 E8 C1100000 call 004020C8 这一行回车后可以看到
0040206E - FF25 C8D04100 jmp [41D0C8] ; //可以看
到被加密了
00402074 - FF25 CCD04100 jmp [41D0CC]
0040207A - FF25 D0D04100 jmp [41D0D0]
00402080 - FF25 D4D04100 jmp [41D0D4]
00402086 - FF25 D8D04100 jmp [41D0D8]
0040208C - FF25 DCD04100 jmp [41D0DC]
00402092 - FF25 E0D04100 jmp [41D0E0]
00402098 - FF25 E4D04100 jmp [41D0E4]
0040209E - FF25 E8D04100 jmp [41D0E8]
004020A4 - FF25 ECD04100 jmp [41D0EC]
004020AA - FF25 F0D04100 jmp [41D0F0]
004020B0 - FF25 F4D04100 jmp [41D0F4]
004020B6 - FF25 F8D04100 jmp [41D0F8]
004020BC - FF25 FCD04100 jmp [41D0FC]
004020C2 - FF25 00D14100 jmp [41D100]
004020C8 - FF25 04D14100 jmp [41D104] ; //enter到
这行
004020CE - FF25 0CD14100 jmp [41D10C]
004020D4 - FF25 10D14100 jmp [41D110]
004020DA - FF25 14D14100 jmp [41D114]
004020E0 - FF25 18D14100 jmp [41D118]
004020E6 - FF25 1CD14100 jmp [41D11C]
004020EC - FF25 20D14100 jmp [41D120]
004020F2 - FF25 24D14100 jmp [41D124]
004020F8 - FF25 28D14100 jmp [41D128]
004020FE - FF25 2CD14100 jmp [41D12C]
00402104 - FF25 30D14100 jmp [41D130]
0040210A - FF25 38D14100 jmp [41D138]
在数据窗口可以看到
0041D0C8 0038001F
0041D0CC 0038003E
0041D0D0 0038005D
0041D0D4 0038007C
0041D0D8 0038009B
0041D0DC 003800BA
0041D0E0 003800D9
0041D0E4 003800F8
0041D0E8 00380117
0041D0EC 00380136
0041D0F0 00380155
0041D0F4 00380174
0041D0F8 00380193
0041D0FC 003801B2
0041D100 003801D1
0041D104 003801F0
0041D108 00000000
0041D10C 0038020F
0041D110 0038022E
0041D114 0038024D
0041D118 0038026C
0041D11C 0038028B
0041D120 003802AA
0041D124 003802C9
0041D128 003802E8
0041D12C 00380307
0041D130 00380326
0041D134 00000000
0041D138 00380345
0041D13C 00000000
通过enter回车进入几个jmp[],可以看到加密方法有两种,
一种是:
00380193 8135 AE013800 D933C233 xor dword ptr [3801AE], 33C233D9
0038019D A1 AE013800 mov eax, [3801AE]
003801A2 8135 AE013800 D933C233 xor dword ptr [3801AE], 33C233D9
003801AC FFE0 jmp eax
另一种是:
0038009B 8105 B6003800 A>add dword ptr [3800B6], 4C6DF1A1
003800A5 A1 B6003800 mov eax, [3800B6]
003800AA 812D B6003800 A>sub dword ptr [3800B6], 4C6DF1A1
003800B4 FFE0 jmp eax
通过解析,关于这个壳,大约得出结论,假如[xxxxxxxx],xxxxxxxx背面的当即数大于40000000的话,就
举行add运算,不然就运行xor运算,也可以通过[xxxxxxxx]的值来判断,这个就不说了.
以上是“手脱Krypton 0.2 -> Yado/Lockless的壳(代码修复IAT)[网络技术]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |