首页
社区
课程
招聘
[分享]Themida脱壳(VC++ 6.0之Stolen Code巧妙还原)
发表于: 2007-5-16 21:19 7313

[分享]Themida脱壳(VC++ 6.0之Stolen Code巧妙还原)

2007-5-16 21:19
7313
标 题: 【分享】Themida脱壳(VC++ 6.0之Stolen Code巧妙还原)
作 者: kissyll 又名 突突
时 间: 2007-5-15,21:21

【详细过程】

  一、前言
学习了
标 题: 【分享】Themida脱壳(VC++ 7.0之Stolen Code还原的一种思路)
作 者: wynney
时 间: 2007-04-09,16:54
链 接: http://bbs.pediy.com/showthread.php?t=42397
  
之后感觉他的方法太复杂.让我云里雾里.稍微研究了一下..实现另一种修复.算是投机取巧吧
  
  二、达到伪OEP[用脚本]
  
  如果大家想研究如何修复IAT,到达伪OEP的话,可以研究下okdodo的脚本,大大减少体力劳动,感谢ing

0046210E   ?  8AD4          mov     dl, ah   脚本断在这里
00462110   .  8915 ACC94B00 mov     dword ptr [4BC9AC], edx
00462116   .  8BC8          mov     ecx, eax
00462118   .  81E1 FF000000 and     ecx, 0FF
0046211E   .  890D A8C94B00 mov     dword ptr [4BC9A8], ecx
00462124   .  C1E1 08       shl     ecx, 8
00462127   .  03CA          add     ecx, edx
00462129   .  890D A4C94B00 mov     dword ptr [4BC9A4], ecx
0046212F   .  C1E8 10       shr     eax, 10
00462132   .  A3 A0C94B00   mov     dword ptr [4BC9A0], eax

从上面可以看出来他是VC6.0编译的
取一个普通程序看看
004620E0 >/$  55            push    ebp
004620E1  |.  8BEC          mov     ebp, esp
004620E3  |.  6A FF         push    -1
004620E5  |.  68 68D64900   push    0049D668   (1)需要处理
004620EA  |.  68 E8054600   push    004605E8   (2)需要处理                ;  SE 处理程序安装
004620EF  |.  64:A1 0000000>mov     eax, dword ptr fs:[0]
004620F5  |.  50            push    eax
004620F6  |.  64:8925 00000>mov     dword ptr fs:[0], esp
004620FD  |.  83EC 58       sub     esp, 58
00462100  |.  53            push    ebx
00462101  |.  56            push    esi
00462102  |.  57            push    edi
00462103  |.  8965 E8       mov     dword ptr [ebp-18], esp
00462106  |.  FF15 88D34900 call    dword ptr [<&kernel32.GetVersion>;  KERNEL32.GetVersion
0046210C  |.  33D2          xor     edx, edx
0046210E  |.  8AD4          mov     dl, ah
00462110  |.  8915 ACC94B00 mov     dword ptr [4BC9AC], edx
00462116  |.  8BC8          mov     ecx, eax
00462118  |.  81E1 FF000000 and     ecx, 0FF
0046211E  |.  890D A8C94B00 mov     dword ptr [4BC9A8], ecx
00462124  |.  C1E1 08       shl     ecx, 8
00462127  |.  03CA          add     ecx, edx
00462129  |.  890D A4C94B00 mov     dword ptr [4BC9A4], ecx
0046212F  |.  C1E8 10       shr     eax, 10
00462132  |.  A3 A0C94B00   mov     dword ptr [4BC9A0], eax

比较一下. 缺了
004620E5  |.  68 68D64900   push    0049D668   (1)需要处理
004620EA  |.  68 E8054600   push    004605E8   (2)需要处理                ;  SE 处理程序安装
需要处理. wynney 大哥去分析虚拟机..可是我不会..分析半天没摸着头脑
所以想了一个新点子.. 大家看看
push    0049D668
push    004605E8   ;  SE 处理程序安装
都压入堆栈了吧..那么我们可以...聪明的你想到了吧..查堆栈!!!

加壳的...
0012FF1C   FFF94D2C
0012FF20   0076ED61  ASCII "ICE - [CPU - main thread]"
0012FF24   FA5942CE
0012FF28   00E2B52C  RETURN to 00E2B52C from ntdll.ZwProtectVirtualMemory
0012FF2C   00E19ED6  RETURN to 00E19ED6 from <jmp.&NTDLL._allmul>
0012FF30   00000000
0012FF34   00000000
0012FF38   00002710
0012FF3C   0075C6B7  RETURN to GameMon.0075C6B7 from GameMon.0075C6C9
0012FF40   00854D10  GameMon.00854D10
0012FF44   00854D10  GameMon.00854D10
0012FF48   0085475C  GameMon.0085475C
0012FF4C   FA5942CE
0012FF50   0012FF64
0012FF54   FA5942CE
0012FF58   000005B1
0012FF5C   00000000
0012FF60   00000000
0012FF64   0079F36C  GameMon.0079F36C
0012FF68   00678609  RETURN to GameMon.00678609 from GameMon.00678609
0012FF6C   FFF94D2C
0012FF70   0076ED61  ASCII "ICE - [CPU - main thread]"
0012FF74   0014E860
0012FF78   0012FF1C
0012FF7C   FA5942CE
0012FF80   0012FF9C  Pointer to next SEH record
0012FF84   004605E8  SE handler        <-----注意
0012FF88   0049D668  GameMon.0049D668  <-----注意
0012FF8C   FFFFFFFF
0012FF90   0014E860
0012FF94   00000000
0012FF98   0075C717  GameMon.0075C717
0012FF9C   0012FFE0  Pointer to next SEH record
0012FFA0   00751993  SE handler
0012FFA4   005916A8  GameMon.005916A8

普通程序
0012FF4C   005916A8  dumped_.005916A8
0012FF50   00000056
0012FF54   7FFDF000
0012FF58   77F80000  ntdll.77F80000
0012FF5C   00000000
0012FF60   0007B000
0012FF64   00000000
0012FF68   77F800D0  ASCII "PE"
0012FF6C   E24325E0
0012FF70   00780018  ASCII "y+"
0012FF74   00000002
0012FF78   000002C8
0012FF7C   000002C4
0012FF80   000E6FB4
0012FF84   00000000
0012FF88   00000005
0012FF8C   00010002  UNICODE "::=::\"
0012FF90   00000008
0012FF94   77F80000  ntdll.77F80000
0012FF98   00000000
0012FF9C   00000000
0012FFA0   E3586800
0012FFA4   00000000
0012FFA8   0012FF4C
0012FFAC   FF8BE1C8
0012FFB0   0012FFE0  指向下一个 SEH 记录的指针
0012FFB4   004605E8  SE处理程序         <-----注意
0012FFB8   0049D668  dumped_.0049D668   <-----注意

0012FFBC   FFFFFFFF
0012FFC0   0012FFF0
0012FFC4   77E687F5  返回到 KERNEL32.77E687F5

明白了吧...
那么壳的那两句应该是
004620E5  |.  68 68D64900       push    0049D668
004620EA  |.  68 E8054600       push    004605E8                        ;  SE 处理程序安装

从普通程序复制过来..修改两句压入代码
完整的代码如下...
004620E0  /.  55                push    ebp    <---这就是程序入口啦...
004620E1  |.  8BEC              mov     ebp, esp
004620E3  |.  6A FF             push    -1
004620E5  |.  68 68D64900       push    0049D668
004620EA  |.  68 E8054600       push    004605E8                        ;  SE 处理程序安装
004620EF  |.  64:A1 00000000    mov     eax, dword ptr fs:[0]
004620F5  |.  50                push    eax
004620F6  |.  64:8925 00000000  mov     dword ptr fs:[0], esp
004620FD  |.  83EC 58           sub     esp, 58
00462100  |.  53                push    ebx
00462101  |.  56                push    esi
00462102  |.  57                push    edi
00462103  |.  8965 E8           mov     dword ptr [ebp-18], esp
00462106  |.  FF15 88D34900     call    dword ptr [49D388]              ;  KERNEL32.GetVersion
0046210C  |.  33D2              xor     edx, edx
0046210E  |.  8AD4              mov     dl, ah
00462110  |.  8915 ACC94B00     mov     dword ptr [4BC9AC], edx
00462116  |.  8BC8              mov     ecx, eax
00462118  |.  81E1 FF000000     and     ecx, 0FF
0046211E  |.  890D A8C94B00     mov     dword ptr [4BC9A8], ecx
00462124  |.  C1E1 08           shl     ecx, 8
00462127  |.  03CA              add     ecx, edx
00462129  |.  890D A4C94B00     mov     dword ptr [4BC9A4], ecx
0046212F  |.  C1E8 10           shr     eax, 10
00462132  |.  A3 A0C94B00       mov     dword ptr [4BC9A0], eax

大功告成!

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 148
活跃值: (140)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
呵呵... 还是靠猜.猜很舒服!C的程序好还原.
2007-5-16 22:00
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我猜我猜我猜猜猜!
2007-5-16 22:04
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
支持下.我来学习.
2007-5-16 23:21
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
晕 发现你就是照搬wynney讲的方法
人家还说得清楚点,你要不是受人家的启示,看你写得出来
就这吹吧,,吹吧,,
猜也是要依据的
2007-5-17 08:33
0
雪    币: 219
活跃值: (1634)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
6
就算练习一下吧
2007-5-17 15:49
0
游客
登录 | 注册 方可回帖
返回
//