首页
社区
课程
招聘
[原创]EXECryptor 脱壳(一) OEP查找
发表于: 2007-3-1 00:52 20510

[原创]EXECryptor 脱壳(一) OEP查找

2007-3-1 00:52
20510

【文章标题】: EXECryptor 脱壳(一) OEP查找
【文章作者】: hnhuqiong
【作者邮箱】: hnhuqiong@126.com
【下载地址】: 自己搜索下载
【使用工具】: OLLYICE 1.10(0716)
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  看见大家对EXECryptor兴趣很高,这里我就跟随大家一起玩玩。
  
  首先EXECryptor从出现到被各路大侠破解还是抗住很长一段时间,其中的anti和VM都是值得我们深入研究的。
  本人对EXECryptor没有什么特殊的研究,都是跟随大侠的步伐画瓢,见笑。
  
  好了,我们开始吧。
  
  EXECryptor一般要过3关:
  1.寻找OEP
  2.IAT修复
  3.stolen code修复
  
  一:我们先从寻找OEP处开始。
      网络上流行的脚本Bypass AntiDBG OEP.txt我们来研究一下,毕竟EXECryptor版本众多,我们来看看这个脚本的
  奥妙在什么地方,这个脚本的成功率非常高。
  
  //Bypass AntiDBG OEP.txt
  
  data:
      var hInstance
      var codeseg
      var vmseg
      var ep
      var oep
      var temp
  code:
      gpa "VirtualFree","kernel32.dll"                 //取VirtualFree的API地址
      bphws $RESULT,"x"                                //下VirtualFree的硬件断点
      run                                            
      bphwc $RESULT
      rtu                                    
      gmi eip,MODULEBASE                               //取当前EIP的模块基地址,实际就是取代码段地址base
      mov hInstance,$RESULT                           
      mov temp,$RESULT
      add temp,3c                                   //base+3c   
      mov temp,[temp]                               // [base+3c]
      add temp,hInstance                            // base+[base+3c]
      add temp,28                                   // (base+[base+3c])+28
      mov temp,[temp]                               // [(base+[base+3c])+28]
      add temp,hInstance                            // base+[(base+[base+3c])+28]   奥妙出来了
                                                    //    这里计算出来的就是原来EP处的CC断点
      bc temp                                       //去掉上面巧妙的计算出EP断点,这里得来的有点技巧,希望大家
                                                    //大家能学习,很多文章首先要求去掉EP的断点,而中断在系统断点
                                                    //而这个脚本巧妙的实现了这点.至于为什么是这个算法,大家可以
                                                    //去查阅一下资料,开卷有益.(温馨提示-加解密第二版268页)
      mov ep,temp                                      
      gmemi eip,MEMORYBASE                          //取当前EIP的信息,也就是代码段的信息
      mov codeseg,$RESULT                           
  
      find $RESULT,#2ECC9D#                           
      mov [$RESULT],#2ECC90#                        //这2句有点不明就里,希望各路大侠指正,我实验过程中,这
                                                    //两句始终没有起作用.
  
      gpa "EnumWindows","user32.dll"                 //取EnumWindows的API地址
      mov [$RESULT],#8BC09C85C09D0578563412C20800#   //这里就是要改这个API了,如何改呢?如下
                                                     //(这里是原API)
                                                     //77D1CD97 >  8BFF            mov     edi, edi
                                                     //77D1CD99    55              push    ebp
                                                     //77D1CD9A    8BEC            mov     ebp, esp
                                                     //77D1CD9C    33C0            xor     eax, eax
                                                     //77D1CD9E    50              push    eax
                                                     //77D1CD9F    50              push    eax
                                                     //77D1CDA0    FF75 0C         push    dword ptr [ebp+C]
                                                     //
                                                     //(改成)
                                                     //77D1CD97 >  8BC0            mov     eax, eax
                                                     //77D1CD99    9C              pushfd
                                                     //77D1CD9A    85C0            test    eax, eax
                                                     //77D1CD9C    9D              popfd
                                                     //77D1CD9D    05 78563412     add     eax, 12345678
                                                     //77D1CDA2    C2 0800         retn    8
                                                     //呵呵高手级别就是厉害,直接把这个API给整残废啦,没天理!
                                                     //照这个趋势,kernel32,user32会被被N多大侠替换,壳壳们
                                                     //这个冬天有点冷.
                                                     
      gpa "CreateThread","kernel32.dll"
      find $RESULT,#FF7518#
      mov [$RESULT],#6A0490#                          //同上
                                                      //7C81063F    FF75 18         push    dword ptr [ebp+18]
                                                      //被替换成了
                                                      //7C81063F    6A 04           push    4
                                                      //7C810641    90              nop
  
      gpa "ZwCreateThread","ntdll.dll"
      bp $RESULT                                      //在ZwCreateThread处下CC断点,ANTI被一路扫过.
  loop1:
      run                                             //其实,这个run有点不太好,会在过ANTI的时候,SEH给拦住
                                                      //如果改成ESTO,以下的都改成ESTO,那么就不用手工SHIFT+F9了
      cmp eip,$RESUL
      jne loop1
      bc $RESULT                                     //到达ZwCreateThread处,去掉断点
      bp ep                                          //下断点到EP处,呵呵,绕开了ANTI,前路一片光明
  loop2:
      run                                            //可改ESTO
      cmp eip,ep
      jne loop2
      bc ep                                          //到达EP处,EXECryptor给扒的就差内裤了
      mov temp,codeseg
      sub temp,1                                     //原来codeseg楼上就是VM机!哈
      gmemi temp,MEMORYBASE
      mov vmseg,$RESULT                              
      gmemi temp,MEMORYSIZE
      bprm vmseg,$RESULT                             //下内存断点到虚拟机中
      run                                            //
      bpmc               
      mov oep,eax                                    //哈哈,从虚拟机中偷出了OEP,尽管可能是伪OEP
      sti
      bprm oep,1
  loop3:
      run                     
      cmp eip,oep                                    //猪八戒抢亲,不管三七二十一了。
      jne loop3  
      bpmc
      ret                                            //到家,关门,放狗,成亲,熟米做成生饭。
  
  
  在simonzh2000的《ExeCryptor 2.2.X 的 Anti Ollydbg 小结》中,
  1.  OEP 处的 CC 检查
  2.  AntiDump
  3.  IsDebuggerPresent
  4.  [Heap+10h]
  5.  PEB.NtGlobalFlag
  6.  GetTickCount
  7.  FindWindow
  8.  OutputDebugString
  9.  ReadProcessMemory(004B1C86, 004C91A0)
  10. 对 API 的检查很严格, 几乎每一句都不能下 CC 断点, 不能修改
  11. 对 Softice 也有一些检查.
  12. 利用 OpenProcess("CSRSS.EXE") 来检测 OD
  
  OLLYICE避开了4,6,8,11,12
  剩下的就是利用脚本躲避1,5,7的ANTI,上面脚本完整的实现了它,并且一并躲过了新版本的ANTI。
  在感叹前人的艰辛中,我们成长着。
  
  在这个过程中,大家只要掌握了躲避好OEP处的CC检查,并且在CreateThread和EnumWindows处绕开,这个壳基本
  就可以完整的跑起来了,后面至于脚本怎么写,怎么对付各种不同的版本,我相信大家动手起来,丰衣足食!!!
  
  
  
  
  
  
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2007年03月01日 0:51:22


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 7
支持
分享
最新回复 (41)
雪    币: 146
活跃值: (33)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
支持出个系列.
2007-3-1 01:07
0
雪    币: 184
活跃值: (108)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
3
呵呵,这个破解脚本系列难点在IAT的范围确定上,并须要手工修改IAT的范围,我希望大家再给我点时间,我研究一下,争取写一个完整的智能版本来修复IAT。
2007-3-1 01:21
0
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
4
期待VM修复
2007-3-1 02:00
0
雪    币: 319
活跃值: (2459)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
5
期待。。。。。。
2007-3-1 08:39
0
雪    币: 201
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
感谢楼主分享

脚本分析很精彩,期待智能版本
2007-3-1 08:50
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
好象很厉害啊
我支持你!!!!!!!!!!!!!!1
2007-3-1 08:57
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
8
Bypass AntiDBG OEP.txt 貌似要配合某些修改版OD
输入表修复Execryptor 2.x IAT rebuilder by KaGra v1.1
还有个ExeCryptor.V2.X.IAT.Rebuilder-PE_Kill
2007-3-1 09:31
0
雪    币: 277
活跃值: (312)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
9
不懂 学习
2007-3-1 09:45
0
雪    币: 392
活跃值: (909)
能力值: ( LV9,RANK:690 )
在线值:
发帖
回帖
粉丝
10
支持~分析得很精彩~
2007-3-1 10:18
0
雪    币: 184
活跃值: (108)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
11
最初由 fly 发布
Bypass AntiDBG OEP.txt 貌似要配合某些修改版OD
输入表修复Execryptor 2.x IAT rebuilder by KaGra v1.1
还有个ExeCryptor.V2.X.IAT.Rebuilder-PE_Kill


不用了,新版的ODICE加上hideod插件后脚本已经可以完整的跑完了。
不过不知道新版本的Execryptor有没有问题。
2007-3-1 10:22
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
12
OllyICE算是修改版的
Execryptor的Anti还是很不错的
2007-3-1 11:01
0
雪    币: 10635
活跃值: (2329)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
怪事 我以前的一个修改od可以直接过Execryptor 不知道用着用着就过不了拉  难道改变了配置?
2007-3-1 11:25
0
雪    币: 229
活跃值: (50)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
14
Bypass AntiDBG OEP.txt 就算是配合修改的 od + hideod 在某些 Execryptor 加壳的程序还是会被发现.
2007-3-1 19:47
0
雪    币: 461
活跃值: (93)
能力值: ( LV9,RANK:1170 )
在线值:
发帖
回帖
粉丝
15
支持楼主!
2007-3-1 19:50
0
雪    币: 494
活跃值: (629)
能力值: ( LV9,RANK:1210 )
在线值:
发帖
回帖
粉丝
16
hnhuqiong好久不露面了,支持
2007-3-1 20:09
0
雪    币: 184
活跃值: (108)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
17
最初由 VolX 发布
Bypass AntiDBG OEP.txt 就算是配合修改的 od + hideod 在某些 Execryptor 加壳的程序还是会被发现.


当然,我没有依次将各个版本的Execryptor测试过,手头能玩的一些版本,测试了一下好像问题不是很大,在就是一些网络上下载的文件测试了一部分好像问题也不是很大。不过我没有遇到不代表普遍性,这个脚本起码对2.2.6以前的版本支持的很好,其它的测试不够没有发言权。

当然对于Execryptor ANTI分析还是不够,不过它很多1-2年前大家畏惧的ANTI基本曝光,OD+hideid已经能避开很多了,余下的我想也不会出现质的变化。总体来说Execryptor多年变化不大,各路大侠分解的也差不多了,新的2。4还没有放出来,我也就凑个热闹。对于Execryptor的研究其实我也是一知半解。不过也期待大侠们一起来具体分析还有什么隐藏的ANTI。

我的基本看法是Execryptor处于临界点上,各种文章将出现,也会给分析的更加透彻,我这里也就抛砖引玉罢了。见笑
2007-3-1 20:14
0
雪    币: 184
活跃值: (108)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
18
最初由 softworm 发布
hnhuqiong好久不露面了,支持


呵呵,去年下半年接了一堆工程,没有精力动东西,只好潜水来看看啊
板块有点冷清啊,能看见几个吵架的都好,呵呵。
手生的很,拿个现成的东西来献丑,不要笑我啊。
2007-3-1 20:18
0
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
19
修改版仍然有太多修改的余地
2007-3-1 20:36
0
雪    币: 229
活跃值: (50)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
20
hnhuqiong 兄别见怪, 我只是提出一些个人在使用这脚本的经验.我也是把 run 改成 esto , 只是有时还是不行.
2007-3-1 20:42
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
学习……学习……
2007-3-1 21:01
0
雪    币: 93
活跃值: (93)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
楼主的文笔总是那是幽默
2007-3-1 22:30
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
很好,期待中
2007-3-3 01:16
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
学习.......收藏了
2007-3-3 07:35
0
雪    币: 207
活跃值: (12)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
25
学习中 thanks.
2007-3-5 05:09
0
游客
登录 | 注册 方可回帖
返回
//