首页
社区
课程
招聘
[原创]说说THEMIDA新版的DIY
发表于: 2009-9-24 00:22 6952

[原创]说说THEMIDA新版的DIY

2009-9-24 00:22
6952
THEMIDA新版默认都会伪装EP,在加壳完毕后还添加了一个段,然后写了一段异或然后加常数的解码过程,处理原来的典型EP---"MOV EAX,0".大小为1000字节.

   以下这一段是STANDARD方式加壳后的EP对应在主程序中的代码
  
005F3652 83EC 04 sub esp,4
005F3655 50 push eax
005F3656 53 push ebx
005F3657 E8 01000000 call 005F365D ; 005F365D
005F365C CC int3
005F365D 58 pop eax
005F365E 8BD8 mov ebx,eax
005F3660 40 inc eax
005F3661 2D 07B20100 sub eax,1B207 ----
005F3666 2D 5D365F00 sub eax,5F365D ----
005F366B 05 52365F00 add eax,5F3652 ----这3部计算真实EP
005F3670 803B CC cmp byte ptr ds:[ebx],0CC
005F3673 75 19 jnz short 005F368E ; 005F368E
005F3675 C603 00 mov byte ptr ds:[ebx],0
005F3678 BB 07B20100 mov ebx,1B207 ----大小
005F367D 68 C78AA900 push 0A98AC7 ---异或KEY
005F3682 68 C78AA900 push 0A98AC7 ---加KEY
005F3687 53 push ebx
005F3688 50 push eax
005F3689 E8 0A000000 call 005F3698 ; 005F3698
005F368E 83C0 14 add eax,14
005F3691 894424 08 mov dword ptr ss:[esp+8],eax
005F3695 5B pop ebx
005F3696 58 pop eax
005F3697 C3 retn
005F3698 55 push ebp
005F3699 8BEC mov ebp,esp
005F369B 60 pushad
005F369C 8B75 08 mov esi,dword ptr ss:[ebp+8]
005F369F 8B4D 0C mov ecx,dword ptr ss:[ebp+C]
005F36A2 C1E9 02 shr ecx,2
005F36A5 8B45 10 mov eax,dword ptr ss:[ebp+10]
005F36A8 8B5D 14 mov ebx,dword ptr ss:[ebp+14]
005F36AB EB 08 jmp short 005F36B5 ; 005F36B5
005F36AD 3106 xor dword ptr ds:[esi],eax ---异或解码
005F36AF 011E add dword ptr ds:[esi],ebx ---加法解码
005F36B1 83C6 04 add esi,4
005F36B4 49 dec ecx
005F36B5 0BC9 or ecx,ecx
005F36B7 ^ 75 F4 jnz short 005F36AD ; 005F36AD
005F36B9 61 popad
005F36BA C9 leave
005F36BB C2 1000 retn 10

以上这段中的KEY通过以下过程控制.实际上上面这部分代码有2处,我们在下面的处理流程中也可以看出来.计算了真实EP并写入到上面的代码中.生成2个随机数,分别是XOR KEY,和ADD KEY.


  
005F38A0 55 push ebp
005F38A1 8BEC mov ebp,esp
005F38A3 83C4 F4 add esp,-0C
005F38A6 60 pushad
005F38A7 E8 8DBE0800 call 0067F739 ; 0067F739
005F38AC 8945 F8 mov dword ptr ss:[ebp-8],eax
005F38AF E8 85BE0800 call 0067F739 ; 0067F739
005F38B4 8945 F4 mov dword ptr ss:[ebp-C],eax
005F38B7 8B45 10 mov eax,dword ptr ss:[ebp+10]
005F38BA A3 62365F00 mov dword ptr ds:[5F3662],eax
005F38BF A3 44385F00 mov dword ptr ds:[5F3844],eax
005F38C4 C705 79365F00 0>mov dword ptr ds:[5F3679],1000 ---大小
005F38CE C705 5B385F00 0>mov dword ptr ds:[5F385B],1000 ---大小
005F38D8 8B45 F4 mov eax,dword ptr ss:[ebp-C]
005F38DB A3 7E365F00 mov dword ptr ds:[5F367E],eax
005F38E0 A3 60385F00 mov dword ptr ds:[5F3860],eax
005F38E5 8B45 F8 mov eax,dword ptr ss:[ebp-8]
005F38E8 A3 83365F00 mov dword ptr ds:[5F3683],eax
005F38ED A3 65385F00 mov dword ptr ds:[5F3865],eax
005F38F2 833D E03A7900 0>cmp dword ptr ds:[793AE0],0
005F38F9 74 0E je short 005F3909 ; 005F3909
005F38FB C605 90365F00 0>mov byte ptr ds:[5F3690],0
005F3902 C605 72385F00 0>mov byte ptr ds:[5F3872],0
005F3909 8B7D 18 mov edi,dword ptr ss:[ebp+18]



然后通过以下过程给PE头增加个区段,并005F3ED7    F3:A4           rep movs byte ptr es:[edi],byte ptr ds:[esi]
把计算好的第一段写到新的EP中
005F3E3D 55 push ebp
005F3E3E 8BEC mov ebp,esp
005F3E40 83C4 F4 add esp,-0C
005F3E43 60 pushad
005F3E44 8B7D 08 mov edi,dword ptr ss:[ebp+8]
005F3E47 037F 3C add edi,dword ptr ds:[edi+3C]
005F3E4A 0FB757 06 movzx edx,word ptr ds:[edi+6]
005F3E4E 66:FF47 06 inc word ptr ds:[edi+6]
005F3E52 8B47 38 mov eax,dword ptr ds:[edi+38]
005F3E55 8945 FC mov dword ptr ss:[ebp-4],eax
005F3E58 8B47 3C mov eax,dword ptr ds:[edi+3C]
005F3E5B 8945 F8 mov dword ptr ss:[ebp-8],eax
005F3E5E 81C7 F8000000 add edi,0F8
005F3E64 33C9 xor ecx,ecx
005F3E66 EB 10 jmp short 005F3E78 ; 005F3E78
005F3E68 8B47 0C mov eax,dword ptr ds:[edi+C]
005F3E6B 0347 08 add eax,dword ptr ds:[edi+8]
005F3E6E 8B5F 14 mov ebx,dword ptr ds:[edi+14]
005F3E71 035F 10 add ebx,dword ptr ds:[edi+10]
005F3E74 83C7 28 add edi,28
005F3E77 41 inc ecx
005F3E78 3BCA cmp ecx,edx
005F3E7A ^ 72 EC jb short 005F3E68 ; 005F3E68
005F3E7C FF75 FC push dword ptr ss:[ebp-4]
005F3E7F 50 push eax
005F3E80 E8 E4A10700 call 0066E069 ; 0066E069
005F3E85 8947 0C mov dword ptr ds:[edi+C],eax
005F3E88 8945 F4 mov dword ptr ss:[ebp-C],eax
005F3E8B FF75 FC push dword ptr ss:[ebp-4]
005F3E8E FF75 0C push dword ptr ss:[ebp+C]
005F3E91 E8 D3A10700 call 0066E069 ; 0066E069
005F3E96 8947 08 mov dword ptr ds:[edi+8],eax
005F3E99 FF75 F8 push dword ptr ss:[ebp-8]
005F3E9C 53 push ebx
005F3E9D E8 C7A10700 call 0066E069 ; 0066E069
005F3EA2 8947 14 mov dword ptr ds:[edi+14],eax
005F3EA5 FF75 F8 push dword ptr ss:[ebp-8]
005F3EA8 FF75 14 push dword ptr ss:[ebp+14]
005F3EAB E8 B9A10700 call 0066E069 ; 0066E069
005F3EB0 8947 10 mov dword ptr ds:[edi+10],eax
005F3EB3 C747 24 400000E>mov dword ptr ds:[edi+24],E0000040
005F3EBA 8D37 lea esi,dword ptr ds:[edi]
005F3EBC 8B45 18 mov eax,dword ptr ss:[ebp+18]
005F3EBF 8B18 mov ebx,dword ptr ds:[eax]
005F3EC1 891E mov dword ptr ds:[esi],ebx
005F3EC3 8B58 04 mov ebx,dword ptr ds:[eax+4]
005F3EC6 895E 04 mov dword ptr ds:[esi+4],ebx
005F3EC9 8B47 14 mov eax,dword ptr ds:[edi+14]
005F3ECC 0345 08 add eax,dword ptr ss:[ebp+8]
005F3ECF 8BF8 mov edi,eax
005F3ED1 8B75 10 mov esi,dword ptr ss:[ebp+10]
005F3ED4 8B4D 14 mov ecx,dword ptr ss:[ebp+14]
005F3ED7 F3:A4 rep movs byte ptr es:[edi],byte ptr ds:[esi]
005F3ED9 61 popad
005F3EDA 8B45 F4 mov eax,dword ptr ss:[ebp-C]
005F3EDD C9 leave
005F3EDE C2 1400 retn 14



知道他怎么做的 于是可以改改 想怎么写怎么写了 而且这个时候还没开始计算文件校验 所以加壳后的没必要改校验 ^_^
PS:以上VA对应THEMIDA2.1.0.0版

[课程]Linux pwn 探索篇!

收藏
免费 7
支持
分享
最新回复 (5)
雪    币: 129
活跃值: (53)
能力值: ( LV9,RANK:220 )
在线值:
发帖
回帖
粉丝
2
效果就是可以忽悠下PEID以及减少一些杀软静态查毒的误报
当然更广点 可以想干嘛就干嘛 比如写个DLL 让TMD乖乖写进去 然后执行你想要的功能先
给各位扩展下思路 提供一种壳插件接口的DIY法.
2009-9-24 00:32
0
雪    币: 337
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
又见壳王搞新壳了,,不愧为壳主
2009-9-24 03:15
0
雪    币: 292
活跃值: (126)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
005F3652    83EC 04         sub esp,4
005F3655    50              push eax
005F3656    53              push ebx
005F3657    E8 01000000     call 005F365D                            ; 005F365D
005F365C    CC              int3
005F365D    58              pop eax
005F365E    8BD8            mov ebx,eax
005F3660    40              inc eax
005F3661    2D 07B20100     sub eax,1B207    ----
005F3666    2D 5D365F00     sub eax,5F365D  ----
005F366B    05 52365F00     add eax,5F3652   ----这3部计算真实EP
005F3670    803B CC         cmp byte ptr ds:[ebx],0CC
005F3673    75 19           jnz short 005F368E                       ; 005F368E
005F3675    C603 00         mov byte ptr ds:[ebx],0
005F3678    BB 07B20100     mov ebx,1B207   ----大小
005F367D    68 C78AA900     push 0A98AC7    ---异或KEY
005F3682    68 C78AA900     push 0A98AC7    ---加KEY
005F3687    53              push ebx
005F3688    50              push eax
005F3689    E8 0A000000     call 005F3698                            ; 005F3698
005F368E    83C0 14         add eax,14
005F3691    894424 08       mov dword ptr ss:[esp+8],eax
005F3695    5B              pop ebx
005F3696    58              pop eax
005F3697    C3              retn
005F3698    55              push ebp
005F3699    8BEC            mov ebp,esp
005F369B    60              pushad
005F369C    8B75 08         mov esi,dword ptr ss:[ebp+8]
005F369F    8B4D 0C         mov ecx,dword ptr ss:[ebp+C]
005F36A2    C1E9 02         shr ecx,2
005F36A5    8B45 10         mov eax,dword ptr ss:[ebp+10]
005F36A8    8B5D 14         mov ebx,dword ptr ss:[ebp+14]
005F36AB    EB 08           jmp short 005F36B5                       ; 005F36B5
005F36AD    3106            xor dword ptr ds:[esi],eax ---异或解码
005F36AF    011E            add dword ptr ds:[esi],ebx ---加法解码
005F36B1    83C6 04         add esi,4
005F36B4    49              dec ecx
005F36B5    0BC9            or ecx,ecx
005F36B7  ^ 75 F4           jnz short 005F36AD                       ; 005F36AD
005F36B9    61              popad
005F36BA    C9              leave
005F36BB    C2 1000         retn 10

这个壳如何脱啊,LZ
2009-10-26 19:45
0
雪    币: 2523
活跃值: (520)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
不搞商业壳是LZ的原则,问了也白搭~
2009-10-26 20:13
0
雪    币: 292
活跃值: (126)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
他在往上加壳。。。我们要去壳。。。确实白问
2009-10-26 20:23
0
游客
登录 | 注册 方可回帖
返回
//