1.载入PEID

ASProtect v1.23 RC1

常见ASprotect版本壳:

ASProtect 1.23 RC4   按shift+f9键26次后来到典型异常
ASProtect 1.31 04.27 按shift+f9键36次后来到典型异常
ASProtect 1.31 05.18 按shift+f9键40次后来到典型异常
ASProtect 1.31 06.14 按shift+f9键38次后来到典型异常

2.载入OD,不勾选内存访问异常,其他异常全部勾选,然后使用最后一次异常法,应该是第26次,第27次就会跑飞

 >   01C06D00     push SoWorker.006DC001                   ; //入口点
E8 call SoWorker.0040100B
0040100A C3 retn
0040100B C3 retn
0040100C je short SoWorker.
0040100E C039 sar byte ptr ds:[ecx],
0FD19CA4 0599E0>psrlw mm3,qword ptr ss:[esp+CFE09905]
AA stos byte ptr es:[edi]
 

3.落脚点在这个位置,还是像之前脱ASProtect一样,往下拉找到最近的一个retn,然后让程序运行过去

00C339EC                xor dword ptr ds:[eax],eax               ; //落脚点
00C339EE :8F05 >pop dword ptr fs:[]
00C339F5 pop eax
00C339F6 833D B07EC300 >cmp dword ptr ds:[C37EB0],
00C339FD je short 00C33A13
00C339FF 6A 0C push 0C
00C33A01 B9 B07EC300 mov ecx,0C37EB0
00C33A06 8D45 F8 lea eax,dword ptr ss:[ebp-]
00C33A09 BA mov edx,
00C33A0E E8 2DD1FFFF call 00C30B40
00C33A13 FF75 FC push dword ptr ss:[ebp-]
00C33A16 FF75 F8 push dword ptr ss:[ebp-]
00C33A19 8B45 F4 mov eax,dword ptr ss:[ebp-C]
00C33A1C cmp dword ptr ds:[eax],
00C33A1F je short 00C33A23
00C33A21 FF30 push dword ptr ds:[eax]
00C33A23 FF75 F0 push dword ptr ss:[ebp-]
00C33A26 FF75 EC push dword ptr ss:[ebp-]
00C33A29 C3 retn ; //最近的tetn
00C33A2A 5F pop edi
00C33A2B 5E pop esi
00C33A2C 5B pop ebx
 

4.程序运行到最近的retn后,我们就可以开始寻找丢失的代码了。不过这里可以先给大家看下假的OEP,打开内存窗口,在401000处下段然后shift+F9运行一次就来到假的OEP,落点处就是假的OEP,代码往上拉可以看到很多空的位置,这里就是待会找回丢失的代码后需要补充的位置了。

004F27A7  ^\EB F8           jmp short SoWorker.004F27A1
004F27A9 add byte ptr ds:[eax],al
004F27AB add byte ptr ds:[eax],al
004F27AD add byte ptr ds:[eax],al
004F27AF add byte ptr ds:[eax],al
004F27B1 add byte ptr ds:[eax],al
004F27B3 add byte ptr ds:[eax],al
004F27B5 add byte ptr ds:[eax],al
004F27B7 add byte ptr ds:[eax],al
004F27B9 add byte ptr ds:[eax],al
004F27BB add byte ptr ds:[eax],al
004F27BD add byte ptr ds:[eax],al
004F27BF add byte ptr ds:[eax],al
004F27C1 add byte ptr ds:[eax],al
004F27C3 add byte ptr ds:[eax],al
004F27C5 add byte ptr ds:[eax],al
004F27C7 add byte ptr ds:[eax],al
004F27C9 add byte ptr ds:[eax],al
004F27CB add byte ptr ds:[eax],al
004F27CD add byte ptr ds:[eax],al
004F27CF FF15 9CC25200 call dword ptr ds:[52C29C] ; //假的OEP
004F27D5 33D2 xor edx,edx
004F27D7 8AD4 mov dl,ah
004F27D9 mov dword ptr ds:[],edx
004F27DF 8BC8 mov ecx,eax
004F27E1 81E1 FF000000 and ecx,0FF
004F27E7 890D mov dword ptr ds:[],ecx
004F27ED C1E1 shl ecx,
004F27F0 03CA add ecx,edx
004F27F2 890D 2C306900 mov dword ptr ds:[69302C],ecx
004F27F8 C1E8 shr eax,
004F27FB A3 mov dword ptr ds:[],eax
004F2800 6A push
004F2802 E8 933B0000 call SoWorker.004F639A
 

5.然后重新载入程序,运行完步骤1-3的操作,也就是让程序运行到最近的一个retn处。然后看堆栈窗口第四行(也就是程序名下面第二行)的值”0012ffa4”

0012FF5C   00C45A1C  //第一行
0012FF60 SoWorker.
0012FF64 E3DE7228
0012FF68 0012FFA4
0012FF6C 00C20000
 

6.命令行下硬件访问断点”hr 0012ffa4”然后shift+F9运行一次,落脚后先F8单步跟一会。

00C45C07   /:EB         jmp short 00C45C0B                       ; //落脚点
00C45C0A |C7 ???
00C45C0B \EB jmp short 00C45C0F
00C45C0D CD20 83EC372E vxdjump 2E37EC83
00C45C13 EB jmp short 00C45C16
00C45C15 - E9 8D642479 jmp 79E8C0A7
00C45C1A :EB jmp short 00C45C1E
 

7.一直到程序运行到这里,之前应该是没有call的,下面开始可能就会有call了。ASProtect的call可能会经常跑飞,所以我们遇到call就F7跟进去,没有call还是可以使用F8,当然你也可以一直使用F7,效果是一样的。

00C45C3B    BD 415CC400     mov ebp,0C45C41                          ; //到这里
00C45C40 FF55 call dword ptr ss:[ebp+] ; //这里就F7跟进
00C45C43 E8 4D5CC400 call 0188B895
00C45C48 9A E969F29A 5DF>call far F35D:9AF269E9
00C45C4F EB jmp short 00C45C53
00C45C51 CD20 1BE9EB02 vxdjump 2EBE91B
00C45C57 CD20 33E8EB02 vxdjump 2EBE833
00C45C5D CD20 EB010F8D vxdcall 8D0F01EB
 

8.F7跟进后我们继续往下走,寻找丢失的代码,走到下面代码的位置的时候我们可以看到有好几个jmp,并且从第一个jmp后面的代码就比较熟悉了push ebp…其实这就是我们要寻找的丢失的代码了,每两个jmp中间除去问号剩下的就是我们应该要寻找的丢失的代码了。直到两个jmp中间只剩下问号为止,仔细看下下面的代码,总共是5段,我们再分别把5段代码连同二进制代码复制下来

00C45C66    5D              pop ebp
00C45C67 EB jmp short 00C45C6A ;//jmp
00C45C69 C7 ???
00C45C6A push ebp ; //第一段
00C45C6B 8BEC mov ebp,esp ; //第一段
00C45C6D 6A FF push - ; //第一段
00C45C6F 78E35300 push 53E378 ; //第一段
00C45C74 407B4F00 push 4F7B40 ; //第一段
00C45C79 :A1 mov eax,dword ptr fs:[] ; //第一段
00C45C7F EB jmp short 00C45C82 ;//jmp
00C45C81 C7 ???
00C45C82 push eax ; //第二段
00C45C83 : >mov dword ptr fs:[],esp ; //第二段
00C45C8A 83EC sub esp, ; //第二段
00C45C8D EB jmp short 00C45C90 ;//jmp
00C45C8F C7 ???
00C45C90 push ebx ; //第三段
00C45C91 EB jmp short 00C45C94 ;//jmp
00C45C93 C7 ???
00C45C94 push esi ; //第四段
00C45C95 EB jmp short 00C45C98 ;//jmp
00C45C97 C7 ???
00C45C98 push edi ; //第五段
00C45C99 E8 mov dword ptr ss:[ebp-],esp ; //第五段
00C45C9C :EB jmp short 00C45CA0 ;//jmp
00C45C9F C7 ???
00C45CA0 EB jmp short 00C45CA4 ;//jmp
00C45CA2 CD20 68CF274F vxdjump 4F27CF68
 
  • 第一段:
00C45C6A                  push ebp                                 ; //第一段
00C45C6B 8BEC mov ebp,esp ; //第一段
00C45C6D 6A FF push - ; //第一段
00C45C6F 78E35300 push 53E378 ; //第一段
00C45C74 407B4F00 push 4F7B40 ; //第一段
00C45C79 :A1 mov eax,dword ptr fs:[] ; //第一段
55 8B EC 6A FF 68 78 E3 53 00 68 40 7B 4F 00 64 A1 00 00 00 00
  • 第二段
00C45C82                  push eax                                 ; //第二段
00C45C83 : >mov dword ptr fs:[],esp ; //第二段
00C45C8A 83EC sub esp, ; //第二段
50 64 89 25 00 00 00 00 83 EC 58
  • 第三段
00C45C90                  push ebx                                 ; //第三段
53
  • 第四段
00C45C94                  push esi                                 ; //第四段
56
  • 第五段
00C45C98                  push edi                                 ; //第五段
00C45C99 E8 mov dword ptr ss:[ebp-],esp ; //第五段
 
57 89 65 E8

9.OK,这样被偷取的代码我们就找回来了,然后你可以选择继续F8走到假的OEP或者是重新载入一下来到假的OEP位置。这个都无所谓的。我们先把程序运行到假的OEP位置,然后把五段被偷取的二进制代码整合一下,然后假的OEP往上拉,把空的代码行选中,二进制把被偷取代码粘贴进去

55 8B EC 6A FF 68 78 E3 53 00 68 40 7B 4F 00 64 A1 00 00 00 00 50 64 89 25 00 00 00 00 83 EC 58 53 56 57 89 65 E8
004F27A7  ^\EB F8           jmp short SoWorker.004F27A1
004F27A9 add byte ptr ds:[eax],al ; //从这里开始
004F27AB add byte ptr ds:[eax],al
004F27AD add byte ptr ds:[eax],al
004F27AF add byte ptr ds:[eax],al
004F27B1 add byte ptr ds:[eax],al
004F27B3 add byte ptr ds:[eax],al
004F27B5 add byte ptr ds:[eax],al
004F27B7 add byte ptr ds:[eax],al
004F27B9 add byte ptr ds:[eax],al
004F27BB add byte ptr ds:[eax],al
004F27BD add byte ptr ds:[eax],al
004F27BF add byte ptr ds:[eax],al
004F27C1 add byte ptr ds:[eax],al
004F27C3 add byte ptr ds:[eax],al
004F27C5 add byte ptr ds:[eax],al
004F27C7 add byte ptr ds:[eax],al
004F27C9 add byte ptr ds:[eax],al
004F27CB add byte ptr ds:[eax],al
004F27CD add byte ptr ds:[eax],al ; //到这里结束
004F27CF FF15 9CC25200 call dword ptr ds:[52C29C] ; //假的OEP
004F27D5 33D2 xor edx,edx
004F27D7 8AD4 mov dl,ah
004F27D9 mov dword ptr ds:[],edx
004F27DF 8BC8 mov ecx,eax
004F27E1 81E1 FF000000 and ecx,0FF .粘贴好的OEP应该是这样子的,我们在粘贴好的代码的第一行,也就是那个push ebp的位置右键–新建EIP 004F27A7 ^\EB F8 jmp short SoWorker.004F27A1
004F27A9 push ebp ; //此处新建OEP
004F27AA 8BEC mov ebp,esp
004F27AC 6A FF push -
004F27AE 78E35300 push SoWorker.0053E378
004F27B3 407B4F00 push SoWorker.004F7B40
004F27B8 :A1 mov eax,dword ptr fs:[]
004F27BE push eax
004F27BF : >mov dword ptr fs:[],esp
004F27C6 83EC sub esp,
004F27C9 push ebx
004F27CA push esi
004F27CB push edi
004F27CC E8 mov dword ptr ss:[ebp-],esp
004F27CF FF15 9CC25200 call dword ptr ds:[52C29C] ; //假的OEP
004F27D5 33D2 xor edx,edx
004F27D7 8AD4 mov dl,ah

11.至此我们就可以进行脱壳了,记得脱壳后修复的时候使用插件修复。

12.运行查壳

运行OK,查壳:Microsoft Visual C++ v6.0

手脱ASProtect v1.23 RC1(有Stolen Code)的更多相关文章

  1. 手脱ASProtect v1.23 RC1(有Stolen Code)之以壳解壳

    1.载入PEID ASProtect v1.23 RC1 2.载入OD,不勾选内存访问异常,其他异常全部勾选 > 01C06D00 push SoWorker.006DC001 ; //入口点 ...

  2. 手脱ASProtect v1.23 RC1(无Stolen Code)

    1.载入PEID ASProtect v1.23 RC1 2.载入OD,不勾选内存访问异常,其他异常全部勾选 > 01C04200 push 跑跑排行.0042C001 ; //入口处 E8 c ...

  3. 手脱ASProtect v1.2(无Stolen Code)

    1.载入PEID ASProtect v1.2 2.载入OD > 01C04200 push 跑跑赛道.0042C001 ; //入口处 C3 retn AA stos byte ptr es: ...

  4. 手脱ACProtect V1.4X(有Stolen Code)之补区段

    首先需要说的是,这个壳是ximo大神视频教程里的 0041F000 > pushad ; //程序入口点 0041F001 E8 call NgaMy.0041F007 0041F006 E8 ...

  5. 手脱ACProtect v1.35(无Stolen Code)之二

    首先,想说明的是这个壳在我的PC上是可以用上一个帖子中的方法来到假的OEP的:http://www.52pojie.cn/forum.php?mod=viewthread&tid=433462 ...

  6. 手脱ACProtect V1.4X(有Stolen Code)

    1.载入PEID ACProtect V1.4X -> risco 首先需要说明的是,这个壳被偷取的代码非常多,如果去找的话会比较麻烦,所以我们换一种另类的方法,不脱壳也可以使用资源修改器对程序 ...

  7. 手脱ACProtect v1.35(有Stolen Code)

    1.载入PEID ACProtect v1.35 -> risco software Inc. & Anticrack Soft 2.载入OD,需要注意的是,异常选项除了[内存访问异常] ...

  8. 手脱ACProtect v1.35(无Stolen Code)

    1.载入PEID ACProtect v1.35 -> risco software Inc. & Anticrack Soft 2.载入OD,需要注意的是,异常选项除了[内存访问异常] ...

  9. 手脱FSG v1.33

    1.载入PEID FSG v1.33 (Eng) -> dulek/xt 2.载入OD,先F8跟一会 004103E3 > BE A4014000 mov esi,fsg1_33.0040 ...

随机推荐

  1. CodeForces 838B Diverging Directions 兼【20180808模拟测试】t3

    描述 给你一个图,一共有 N 个点,2*N-2 条有向边. 边目录按两部分给出 1. 开始的 n-1 条边描述了一颗以 1 号点为根的生成树,即每个点都可以由 1 号点到达. 2. 接下来的 N-1 ...

  2. 拥抱移动端,jQueryui触控设备兼容插件

    http://touchpunch.furf.com/ ps:要FQ. jQuery UI Touch Punch Touch Event Support for jQuery UI Tested o ...

  3. 网络安全部门的漏洞扫描让你头痛不已么——PHP环境选它就可以了

    最近网络安全要求是越来越严,原来PHP编写的程序在XAMPP或者其他环境下总会被某款软件扫出漏洞,进而上级部门就停止了我们服务器的外网出口,然而自从发现了一款安全环境神器UPUPW后,这样的问题就再也 ...

  4. Icingaweb2监控oracle数据库的安装配置流程

    Icinga2安装配置check_oracle_health流程 1.安装 由于check_oracle_health是使用perl语言编写的,因此在安装该插件之前,首先要安装oracle的客户端实例 ...

  5. nodejs笔记--模块篇(三)

    文件模块访问方式通过require('/文件名.后缀')    require('./文件名.后缀')    requrie('../文件名.后缀') 去访问,文件后缀可以省略:以"/&qu ...

  6. 软工Hello World!团队第二周博客汇总

    2017.10.20-2017.10.26 Scrum会议: 第一天:http://www.cnblogs.com/liusx0303/p/7704482.html 第二天:http://www.cn ...

  7. 20145214实验四 Android开发基础

    20145214实验四 Android开发基础 实验内容及步骤 安装 JDK 并配置 JDK 环境变量 找到之前path变量中的jdk文件所在位置并复制. 用复制的变量名新建一个 JAVA_HOME ...

  8. PMS

    "通讯录--PMS"功能介绍及界面展示 首先是我们的登陆界面,以绿色为基调,配以繁星组成的星阵图,寓意为"散是满天星",希望每一位同学能在各自的生活中闪耀. 当 ...

  9. iOS开发给UIView添加动画Animation

    self.testView需要添加动画的view 1.翻转动画 [UIView beginAnimations:@"doflip" context:nil]; [UIView se ...

  10. 图像检测算法Halcon 10的使用

    安装完成HALCON之后,在VS项目中添加动态链接库配置项目,并修改此项目属性的包含目录.库目录和链接器.