【软件简介】:这个壳的anti一般,使用了多线程(首次在壳中出现?)。it处理还可以,但强度不够。 http://www.lockless.com 注意: 长时间不更新,稳定性兼容性不是很好,不推荐商业软件采用。<出自看雪描述>
【作者声明】:初学Crack,只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
【调试环境】:WinXP、Ollydbg1.09、PEiD、LordPE、ImportREC V1.6
前言:留一篇文章记录自己的成长,通过调试该软件使你彻底了解加密壳的世界,是如此复杂繁琐的一件事。同时崇拜Patch Code高手,写脚本调试就简单多了。但本
人因为很没有耐心,所以锻炼一下。<如果你有更好锻炼耐心的方法,请PM我,谢谢!>
本文主要讲解除了K-Protect on Api之外,其他选项全部扣上<英文不懂,翻译不准,O(∩_∩)O哈哈~>,因为K-Protect on API强度很弱。K-Protect on API 主要采用
flags - 0xff 来判断是否加密IAT,只要在中断处理Iat哪里找到该跳转并patch重定向代码即可。
快速到达OEP方法:
在VirtualAlloc F2断下三次,直接在Code段F2直接到达OEP<软件只添加K-Protect on API>的情况下使用。如果勾选K-Execution直接中断在该选项处理代码。
K-Execution一共有五种模拟代码处理方式<其实只有四种,但是通过asm编译程序的对比,主程序将FF25类型API也定向到FF15,所以也Patch相关代码进行处理>。因为
只处理FF15代码,导致不兼容其他编译程序,默认支持asm程序。<其他程序除了不勾选K-Execution选项才可以加壳成功>
第一种模拟方式:flags:0x5 模拟:API
第二种模拟方式:flags:0x0 模拟:push [Addr]
第三种模拟方式:flags:0x1 模拟:模拟一段代码,0xff之内字节。
第四种模拟方式:flags:0x2 模拟:mov [Addr],0x?
第五种模拟方式:flags:0x3 模拟:cmp [Addr],0x?
要还原还必须找到这些Addr处理代码的<偏移值>和处理<代码地址类型>判断,然后通过原程序的解码操作进行Patch。工作量有点大,研究数天,因为找了脱文,似乎都
只讲解API处理。主程序也只有fly发过,但是脱文提到Oep处Dump即可运行。<fly脱文往下拉,有解释(*^__^*) 嘻嘻……>
OD载入:
004A4000 > 54 push esp
004A4001 E8 00000000 call Krypton.004A4006
004A4006 5D pop ebp
004A4007 8BC5 mov eax,ebp
004A4009 81ED 71444000 sub ebp,Krypton.00404471
004A400F 2B85 64604000 sub eax,dword ptr ss:[ebp+0x406064]
//我们主要需要找处理FF15类型填充代码类型和模拟方式如:[0xBF0000],和Jump到OEP的Addr、哪里属于最佳Patch点,也可以再OEP>Patch.该Addr要经过壳销毁自身代
码之后才能找到。
在VirtualAlloc断下三次,代码已经解密了。此时在Code段下内存访问断点直接中断在K-Execution处理流程。<代码已经去花指令>
004FEFFD 66:8138 FF15 cmp word ptr ds:[eax],0x15FF ; 判断是否未15FF
004FF026 /0F85 C7000000 jnz 004FF0F3 ; 找不到就 Addr + 1 Size - 1
004FF054 8378 02 05 cmp dword ptr ds:[eax+0x2],0x5 ; 判断是否[FF15+0x2]是否为5 壳作的Flags <这个也要记住的>
004FF07D /75 74 jnz short 004FF0F3 ; 判断是否不为5则跳
004FF0C9 8970 02 mov dword ptr ds:[eax+0x2],esi ; 取ESI填充 <这个我们要记录的>
004FF11B 40 inc eax ; Addr + 1
004FF13F 49 dec ecx ; Size - 1
004FF161 85C9 test ecx,ecx ; 测试SIZE是否为零
004FF18A ^\0F85 4EFEFFFF jnz 004FEFDE ; 如果相等则填充完毕
主程序总共处理五个0x15FF类型,其他asm加壳,API没有变形,每个类型填充完后都会以cmp [Addr],0xff来判断用户是否勾选加密选项来处理。<IAT也是这样判断,也
有Magic JUMP了,但是壳API地址已经重定向,需要Patch代码恢复。>
代码没有优化,也没时间优化,分析该主程序太多需要记录了。
Patch代码如下:
00B60000 60 pushad
00B60001 9C pushfd
00B60002 BE 00104000 mov esi,0x401000 ; Code
00B60007 BF 00404000 mov edi,0x404000 ; Code Size
00B6000C 66:813E FF15 cmp word ptr ds:[esi],0x15FF
00B60011 0F85 63020000 jnz 00B6027A
00B60017 807E 02 76 cmp byte ptr ds:[esi+0x2],0x76
00B6001B 74 48 je short 00B60065 ; 对
00B6001D 807E 04 BF cmp byte ptr ds:[esi+0x4],0xBF
00B60021 0F84 B2000000 je 00B600D9 ; 对
00B60027 807E 04 ED cmp byte ptr ds:[esi+0x4],0xED
00B6002B 0F84 69010000 je 00B6019A ; 对
00B60031 807E 04 F5 cmp byte ptr ds:[esi+0x4],0xF5
00B60035 0F84 9F010000 je 00B601DA
00B6003B 807E 02 7A cmp byte ptr ds:[esi+0x2],0x7A
00B6003F 0F84 D3010000 je 00B60218
00B60045 E9 30020000 jmp 00B6027A
00B60065 BD B5860E00 mov ebp,0xE86B5
00B6009F 8D85 09C54100 lea eax,dword ptr ss:[ebp+0x41C509]
00B600A5 BB C0C44100 mov ebx,0x41C4C0
00B600AA 03DD add ebx,ebp
00B600AC 8B10 mov edx,dword ptr ds:[eax]
00B600AE 3313 xor edx,dword ptr ds:[ebx]
00B600B0 2BD6 sub edx,esi
00B600B2 85D2 test edx,edx
00B600B4 75 16 jnz short 00B600CC
00B600B6 8B50 04 mov edx,dword ptr ds:[eax+0x4]
00B600B9 3313 xor edx,dword ptr ds:[ebx]
00B600BB 8916 mov dword ptr ds:[esi],edx
00B600BD 66:8B50 08 mov dx,word ptr ds:[eax+0x8]
00B600C1 3313 xor edx,dword ptr ds:[ebx]
00B600C3 66:8956 04 mov word ptr ds:[esi+0x4],dx
00B600C7 ^ E9 40FFFFFF jmp 00B6000C
00B600CC 83C0 0A add eax,0xA
00B600CF ^ EB DB jmp short 00B600AC
00B600D1 E9 A4010000 jmp 00B6027A
00B600D9 56 push esi
00B600DA 57 push edi
00B600DB 56 push esi
00B600DC BD D9947D00 mov ebp,0x7D94D9
00B600E1 8B4E 02 mov ecx,dword ptr ds:[esi+0x2]
00B600E4 81E9 0000BF00 sub ecx,0xBF0000
00B600EA 03E9 add ebp,ecx
00B600EC 56 push esi
00B600ED 8B46 F7 mov eax,dword ptr ds:[esi-0x9]
00B600F0 A3 00054500 mov dword ptr ds:[0x450500],eax
00B600F5 8B46 FC mov eax,dword ptr ds:[esi-0x4]
00B600F8 A3 08054500 mov dword ptr ds:[0x450508],eax
00B60101 8BB5 1F6E4100 mov esi,dword ptr ss:[ebp+0x416E1F]
00B60107 36:3135 0805450>xor dword ptr ss:[0x450508],esi
00B6010E 66:36:3135 0005>xor word ptr ss:[0x450500],si
00B60116 36:8B0D 0005450>mov ecx,dword ptr ss:[0x450500]
00B6011D 36:8B1D 0805450>mov ebx,dword ptr ss:[0x450508]
00B60124 8DBD 48724100 lea edi,dword ptr ss:[ebp+0x417248]
00B6012A 58 pop eax
00B6012B 83C0 06 add eax,0x6
00B6012E 8BF0 mov esi,eax
00B60130 F3:A4 rep movs byte ptr es:[edi],byte ptr ds:[>
00B60132 8BCF mov ecx,edi
00B60134 36:8B1D 0005450>mov ebx,dword ptr ss:[0x450500]
00B6013B 81E3 0000FFFF and ebx,0xFFFF0000
00B60141 36:8B0D 0805450>mov ecx,dword ptr ss:[0x450508]
00B60148 8BF0 mov esi,eax
00B6014A 4E dec esi
00B6014B 46 inc esi
00B6014C C606 90 mov byte ptr ds:[esi],0x90
00B6014F ^ E0 FA loopdne short 00B6014B
00B60151 36:8B1D 0005450>mov ebx,dword ptr ss:[0x450500]
00B60158 36:8B0D 0805450>mov ecx,dword ptr ss:[0x450508]
00B6015F 8DBD 48724100 lea edi,dword ptr ss:[ebp+0x417248]
00B60165 57 push edi
00B60166 51 push ecx
00B60167 33C0 xor eax,eax
00B60169 66:8BC3 mov ax,bx
00B6016C F6D9 neg cl
00B6016E 000F add byte ptr ds:[edi],cl
00B60170 300F xor byte ptr ds:[edi],cl
00B60172 D207 rol byte ptr ds:[edi],cl
00B60174 F6D9 neg cl
00B60176 2807 sub byte ptr ds:[edi],al
00B60178 0027 add byte ptr ds:[edi],ah
00B6017A 3007 xor byte ptr ds:[edi],al
00B6017C D207 rol byte ptr ds:[edi],cl
00B6017E 3027 xor byte ptr ds:[edi],ah
00B60180 47 inc edi
00B60181 ^ E0 E9 loopdne short 00B6016C
00B60183 59 pop ecx
00B60184 5E pop esi
00B60185 5F pop edi
00B60186 83E9 10 sub ecx,0x10
00B60189 F3:A4 rep movs byte ptr es:[edi],byte ptr ds:[>
00B6018B 5F pop edi
00B6018C 5E pop esi
00B6018D 3BF7 cmp esi,edi
00B6018F ^ 0F82 77FEFFFF jb 00B6000C
00B60195 E9 E0000000 jmp 00B6027A
00B6019A BD 7348AB00 mov ebp,0xAB4873
00B6019F 8B4E 02 mov ecx,dword ptr ds:[esi+0x2]
00B601A2 81E9 0000ED00 sub ecx,0xED0000
00B601A8 03E9 add ebp,ecx
00B601AA 8D85 CDB74100 lea eax,dword ptr ss:[ebp+0x41B7CD]
00B601B0 8B18 mov ebx,dword ptr ds:[eax]
00B601B2 8B40 04 mov eax,dword ptr ds:[eax+0x4]
00B601B5 33D8 xor ebx,eax
00B601B7 03C3 add eax,ebx
00B601B9 C746 FE C705000>mov dword ptr ds:[esi-0x2],0x5C7
00B601C0 891E mov dword ptr ds:[esi],ebx
00B601C2 8D9D C9B74100 lea ebx,dword ptr ss:[ebp+0x41B7C9]
00B601C8 8B1B mov ebx,dword ptr ds:[ebx]
00B601CA 895E 04 mov dword ptr ds:[esi+0x4],ebx
00B601CD 3BF7 cmp esi,edi
00B601CF ^ 0F82 37FEFFFF jb 00B6000C
00B601D5 E9 A0000000 jmp 00B6027A
00B601DA 56 push esi
00B601DB BD 2748B300 mov ebp,0xB34827
00B601E0 8B4E 02 mov ecx,dword ptr ds:[esi+0x2]
00B601E3 81E9 0000F500 sub ecx,0xF50000
00B601E9 03E9 add ebp,ecx
00B601EB 8D85 F7B74100 lea eax,dword ptr ss:[ebp+0x41B7F7]
00B601F1 8B18 mov ebx,dword ptr ds:[eax]
00B601F3 8B40 04 mov eax,dword ptr ds:[eax+0x4]
00B601F6 33D8 xor ebx,eax
00B601F8 03C3 add eax,ebx
00B601FA 25 0000FFFF and eax,0xFFFF0000
00B601FF C1E8 18 shr eax,0x18
00B60202 5E pop esi ; [eax] --> API
00B60203 66:C706 833D mov word ptr ds:[esi],0x3D83
00B60208 895E 02 mov dword ptr ds:[esi+0x2],ebx
00B6020B 8846 06 mov byte ptr ds:[esi+0x6],al
00B6020E 3BF7 cmp esi,edi
00B60210 ^ 0F82 F6FDFFFF jb 00B6000C
00B60216 EB 62 jmp short 00B6027A
00B60218 56 push esi
00B60219 57 push edi
00B6021A BD B5860E00 mov ebp,0xE86B5
00B6021F 8B16 mov edx,dword ptr ds:[esi]
00B60221 56 push esi
00B60222 8D85 7D614200 lea eax,dword ptr ss:[ebp+0x42617D]
00B60228 BB 4D614200 mov ebx,0x42614D
00B6022D 03DD add ebx,ebp
00B6022F 8B10 mov edx,dword ptr ds:[eax]
00B60231 3313 xor edx,dword ptr ds:[ebx]
00B60233 2BD6 sub edx,esi
00B60235 85D2 test edx,edx
00B60237 75 4F jnz short 00B60288
00B60239 8B50 04 mov edx,dword ptr ds:[eax+0x4]
00B6023C 3313 xor edx,dword ptr ds:[ebx]
00B6023E 84D2 test dl,dl
00B60240 75 32 jnz short 00B60274
00B60242 BF 01000000 mov edi,0x1
00B60247 C1EA 10 shr edx,0x10
00B6024A 8BCA mov ecx,edx
00B6024C 66:8B50 08 mov dx,word ptr ds:[eax+0x8]
00B60250 3313 xor edx,dword ptr ds:[ebx]
00B60252 81E2 FFFF0000 and edx,0xFFFF
00B60258 C1E2 10 shl edx,0x10
00B6025B 09CA or edx,ecx
00B6025D 59 pop ecx
00B6025E 66:C701 FF25 mov word ptr ds:[ecx],0x25FF
00B60265 8951 02 mov dword ptr ds:[ecx+0x2],edx
00B60268 5F pop edi
00B60269 5E pop esi
00B6026A 3BF7 cmp esi,edi
00B6026C ^ 0F82 9AFDFFFF jb 00B6000C
00B60272 EB 11 jmp short 00B60285
00B60274 33FF xor edi,edi
00B60276 90 nop
00B60277 90 nop
00B60278 ^ EB CD jmp short 00B60247
00B6027A 83C6 01 add esi,0x1
00B6027D 3BF7 cmp esi,edi
00B6027F ^ 0F82 87FDFFFF jb 00B6000C
00B60285 9D popfd
00B60286 61 popad
00B60287 C3 retn
00B60288 83C0 0A add eax,0xA
00B6028B ^ EB A2 jmp short 00B6022F
二进制代码:
60 9C BE 00 10 40 00 BF 00 40 40 00 66 81 3E FF 15 0F 85 63 02 00 00 80 7E 02 76 74 48 80 7E 04
BF 0F 84 B2 00 00 00 80 7E 04 ED 0F 84 69 01 00 00 80 7E 04 F5 0F 84 9F 01 00 00 80 7E 02 7A 0F
84 D3 01 00 00 E9 30 02 00 00 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 BD B5 86 0E 00 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 8D
85 09 C5 41 00 BB C0 C4 41 00 03 DD 8B 10 33 13 2B D6 85 D2 75 16 8B 50 04 33 13 89 16 66 8B 50
08 33 13 66 89 56 04 E9 40 FF FF FF 83 C0 0A EB DB E9 A4 01 00 00 90 90 90 56 57 56 BD D9 94 7D
00 8B 4E 02 81 E9 00 00 BF 00 03 E9 56 8B 46 F7 A3 00 05 45 00 8B 46 FC A3 08 05 45 00 90 90 90
90 8B B5 1F 6E 41 00 36 31 35 08 05 45 00 66 36 31 35 00 05 45 00 36 8B 0D 00 05 45 00 36 8B 1D
08 05 45 00 8D BD 48 72 41 00 58 83 C0 06 8B F0 F3 A4 8B CF 36 8B 1D 00 05 45 00 81 E3 00 00 FF
FF 36 8B 0D 08 05 45 00 8B F0 4E 46 C6 06 90 E0 FA 36 8B 1D 00 05 45 00 36 8B 0D 08 05 45 00 8D
BD 48 72 41 00 57 51 33 C0 66 8B C3 F6 D9 00 0F 30 0F D2 07 F6 D9 28 07 00 27 30 07 D2 07 30 27
47 E0 E9 59 5E 5F 83 E9 10 F3 A4 5F 5E 3B F7 0F 82 77 FE FF FF E9 E0 00 00 00 BD 73 48 AB 00 8B
4E 02 81 E9 00 00 ED 00 03 E9 8D 85 CD B7 41 00 8B 18 8B 40 04 33 D8 03 C3 C7 46 FE C7 05 00 00
89 1E 8D 9D C9 B7 41 00 8B 1B 89 5E 04 3B F7 0F 82 37 FE FF FF E9 A0 00 00 00 56 BD 27 48 B3 00
8B 4E 02 81 E9 00 00 F5 00 03 E9 8D 85 F7 B7 41 00 8B 18 8B 40 04 33 D8 03 C3 25 00 00 FF FF C1
E8 18 5E 66 C7 06 83 3D 89 5E 02 88 46 06 3B F7 0F 82 F6 FD FF FF EB 62 56 57 BD B5 86 0E 00 8B
16 56 8D 85 7D 61 42 00 BB 4D 61 42 00 03 DD 8B 10 33 13 2B D6 85 D2 75 4F 8B 50 04 33 13 84 D2
75 32 BF 01 00 00 00 C1 EA 10 8B CA 66 8B 50 08 33 13 81 E2 FF FF 00 00 C1 E2 10 09 CA 59 66 C7
01 FF 25 90 90 89 51 02 5F 5E 3B F7 0F 82 9A FD FF FF EB 11 33 FF 90 90 EB CD 83 C6 01 3B F7 0F
82 87 FD FF FF 9D 61 C3 83 C0 0A EB A2
执行完代码后在OEP Dump使用IR修复输入表,<输入表也可以不用IR修复,具体自己分析看脱文吧!>
注:壳在模拟类型1中将壳的Browse/Info/K-Protecton API 三个特殊处理,主要处理方法,添加一个乱序跳转执行垃圾指令,和一个执行垃圾指令Call后一句pop eax,使得上面的代码还原无法识别导致出错,请手动Nop异常三处代码即可<jz xxx Call xxx pop eax> 完美加壳。
Thank you :
loveboom,fly,CCDebuger . . .一些前辈,脱文好精彩、收益不浅
[ATTACH]主程序已脱壳[ATTACH]
[课程]Linux pwn 探索篇!
上传的附件: