首页
社区
课程
招聘
[原创]Krypton0.5主程序脱壳
发表于: 2012-6-15 19:30 6420

[原创]Krypton0.5主程序脱壳

2012-6-15 19:30
6420
【软件简介】:这个壳的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]

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 6
支持
分享
最新回复 (4)
雪    币: 292
活跃值: (153)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
哥哥 新的一集 你死了 。。。好想你啊。。。。临死前 还想摸一下我的头。
2012-6-15 19:36
0
雪    币: 154
活跃值: (40)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
3
打开按钮和信息按钮以及保护API按钮有点问题,晚点修复,刚还没测试呢,有兴趣的朋友,欢迎来讨论。
2012-6-15 19:44
0
雪    币: 154
活跃值: (40)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
4
? ? ?
2012-6-15 19:45
0
雪    币: 154
活跃值: (40)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
5
壳不知道还加了什么代码,在第一种类型处理代码中,打开按钮,信息按钮,API-Prote勾选,都加了 空的跳转和Call eax pop eax Call[内容都是无关紧要的],直接NOP掉,就可以完美运行加壳了。!~
2012-6-15 20:38
0
游客
登录 | 注册 方可回帖
返回
//