吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 5752|回复: 21

【ZP1.6】菜鸟求教脱壳修复,尝试过百度搜来的脚本发现运行自动停止 无解求助!

 关闭 [复制链接]
我叫KK 发表于 2015-2-19 02:38 | 显示全部楼层 |阅读模式

本站严厉禁止求脱求破行为(包含无自我分析直接求思路),如发现此类求助主题请点击“举报”,让我们共同维护优质的学习环境!


666HB
接触ZP的壳子不多 希望论坛里的 给我一个学习的机会

百度到一个红客联盟的 帖字 里头的脚本 发现运行到一半不到就停止运行了

还有一个是实例脱ZP1.6的 但是 他的软件 消失了
  希望给我一个学习的机会  
@Shark恒 @梅主席 @亚轩 @t40462860 @小芒果 @wenqiangkaixin @good123 @阿菜 @wjj197981 @心有予悸 @gjj520 我有的好友都@了 求帮助一下

话说666个HB 竟然要支付866个税  一下支出1532个HB  心疼啊!学技术不管了




最佳答案

点评

Shark恒”点评说:
是税后866HB,不是666+866。是一共需要支付866...  发表于 2015-2-24 00:32

评分

参与人数 2HB +3 THX +2 收起 理由
t40462860 + 2 + 1 过年还在乐此不疲的学技术,新年快乐
凉生好怕怕 + 1 + 1 我评分就是为了站前排看大神如何解决

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
sevp 发表于 2015-2-19 02:38 | 显示全部楼层

最佳答案本应属于楼主私有,因此限制查看

您还有0次查看次数,点此查看答案

点此购买查看次数
也可以兑换VIP特权或加入解密专家,每日可免费查看5次最佳答案!

评分

参与人数 1荣耀 +1 收起 理由
Shark恒 + 1

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
头像被屏蔽
亚轩 发表于 2015-2-19 06:29 | 显示全部楼层

提示: 作者被禁止或删除 内容自动屏蔽
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
xiawiner 发表于 2015-2-19 08:10 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
Break 发表于 2015-2-19 10:39 | 显示全部楼层

注:本回复转自52ID:266fff的用户


一、OEP

  正如HC所说,壳的世界,进入了后OEP时代,也就是说,找到OEP,仅仅是往里长征的第一步。
  ZProtect 就完全放弃了对OEP的处理,如同压缩壳一样,ESP就能到达OEP。
  OD载入
  •   005452FF >  68 0C535400     push 大牛FZ.0054530C                       ; F8 然后ESP 找OEP
  •   00545304    68 19535400     push 大牛FZ.00545319                       ; ASCII "`h!ST"
  •   00545309    C3              retn
  •   0054530A    51              push ecx
  •   0054530B    97              xchg eax,edi
  •   0054530C    68 19535400     push 大牛FZ.00545319                       ; ASCII "`h!ST"
  •   00545311    C3              retn
  •   00545312    CD 0E           int 0xE


[color=rgb(51, 102, 153) !important]复制代码


  
  hr esp后,F9一次来到这里。
  •   00CF4DCE   /E9 CD830000     jmp 00CFD1A0
  •   00CF4DD3   |F2:             prefix repne:
  •   00CF4DD4   |8B45 08         mov eax,dword ptr ss:[ebp+0x8]
  •   00CF4DD7   |E9 AE890000     jmp 00CFD78A
  •   00CF4DDC   |9C              pushfd
  •   00CF4DDD   |DAB3 0F852C2A   fidiv dword ptr ds:[ebx+0x2A2C850F]
  •   00CF4DE3   |0000            add byte ptr ds:[eax],al


[color=rgb(51, 102, 153) !important]复制代码


  继续F9
  •   00477DB7    55              push ebp                                 ; OEP
  •   00477DB8    8BEC            mov ebp,esp
  •   00477DBA    6A FF           push -0x1
  •   00477DBC    68 A0E54C00     push 大牛FZ.004CE5A0
  •   00477DC1    68 A4A54700     push 大牛FZ.0047A5A4
  •   00477DC6    64:A1 00000000  mov eax,dword ptr fs:[0]
  •   00477DCC    50              push eax
  •   00477DCD    64:8925 0000000>mov dword ptr fs:[0],esp
  •   00477DD4    83EC 58         sub esp,0x58
  •   00477DD7    53              push ebx
  •   00477DD8    56              push esi
  •   00477DD9    57              push edi


[color=rgb(51, 102, 153) !important]复制代码


  删除分析,到达OEP,长征开始。
  
  此时,数据窗口中跟随地址 00477DB7 地址,下断硬件写入断点,为之后的 劫持代码,即修复抽取代码做准备。
  
  二、DLL模拟,与IAT修复。
  
  重新载入程序。
  下断 BP CreateFileA,F9运行一次,看堆栈。
  •   0012F908   00CF5BE9  /CALL 到 CreateFileA 来自 00CF5BE3
  •   0012F90C   0012F934  |FileName = "C:\windows\system32\ntdll.dll"
  •   0012F910   80000000  |Access = GENERIC_READ
  •   0012F914   00000001  |ShareMode = FILE_SHARE_READ
  •   0012F918   00000000  |pSecurity = NULL
  •   0012F91C   00000003  |Mode = OPEN_EXISTING
  •   0012F920   00000080  |Attributes = NORMAL
  •   0012F924   00000000  \hTemplateFile = NULL
  •   0012F928   0054A515  大牛FZ.0054A515
  •   0012F92C   00CDA7E8  ASCII "ntdll.dll"


[color=rgb(51, 102, 153) !important]复制代码


  发现存在dll模拟,在下断 BP GetModuleHandleA,F9一次,Alt +F9 返回。
  •   00CCA916    03F8            add edi,eax
  •   00CCA918    FF15 E810CC00   call dword ptr ds:[0xCC10E8]             ; kernel32.GetModuleHandleA
  •   00CCA91E    50              push eax                                 ; 停在这里
  •   00CCA91F    E8 90FDFFFF     call 00CCA6B4
  •   00CCA924    A1 F4A8CD00     mov eax,dword ptr ds:[0xCDA8F4]
  •   00CCA929    43              inc ebx


[color=rgb(51, 102, 153) !important]复制代码


  向上翻动代码
  •   00CCA8E6   /74 53           je short 00CCA93B
  •   00CCA8E8   |3998 AB000000   cmp dword ptr ds:[eax+0xAB],ebx          ; 进行DLL模拟的次数
  •   00CCA8EE   |8B15 0CA9CD00   mov edx,dword ptr ds:[0xCDA90C]          ; 大牛FZ.00547000
  •   00CCA8F4   |57              push edi
  •   00CCA8F5   |8D3C11          lea edi,dword ptr ds:[ecx+edx]
  •   00CCA8F8   |7E 3A           jle short 00CCA934
  •   00CCA8FA   |56              push esi
  •   00CCA8FB   |BE E8A7CD00     mov esi,0xCDA7E8                         ; ASCII "kernel32.dll"
  •   00CCA900   |56              push esi
  •   00CCA901   |57              push edi
  •   00CCA902   |FF35 D8A7CD00   push dword ptr ds:[0xCDA7D8]
  •   00CCA908   |E8 FFE5FFFF     call 00CC8F0C
  •   00CCA90D   |83C4 0C         add esp,0xC
  •   00CCA910   |56              push esi
  •   00CCA911   |A3 E4A7CD00     mov dword ptr ds:[0xCDA7E4],eax
  •   00CCA916   |03F8            add edi,eax
  •   00CCA918   |FF15 E810CC00   call dword ptr ds:[0xCC10E8]             ; kernel32.GetModuleHandleA
  •   00CCA91E   |50              push eax                                 ; 停在这里
  •   00CCA91F   |E8 90FDFFFF     call 00CCA6B4
  •   00CCA924   |A1 F4A8CD00     mov eax,dword ptr ds:[0xCDA8F4]
  •   00CCA929   |43              inc ebx
  •   00CCA92A   |3B98 AB000000   cmp ebx,dword ptr ds:[eax+0xAB]


[color=rgb(51, 102, 153) !important]复制代码


  00CCA8E8 处为比较要模拟的次数,下硬件执行断点,取消前面的两次API断点(不要删除任何硬件的),然后再次重新载入。
  
  直接F9
  
  00CCA8E8    3998 AB000000   cmp dword ptr ds:[eax+0xAB],ebx          ; 停在这里
  
  看下方窗口
  
  ebx=00000000
  ds:[00D021E3]=00000006
  
  右键修改 00000006 为 0,确定。 F9,F9 再次到达OEP。
  此时先用LoadPe dump一次,然后开始修复IAT。
  修复IAT可以用脚本,也可以用FZ程序,我推荐用ZPfixer,再次感谢Cektop!
  先来查找 IATStart 及 IATend
  运行 Importrec, OEP填 00077DB7 自动获取,此时肯定全部无效。
  第一个为 0009B000 IATstart 为 0049B000
  最后一个为 0009B708 IATend 为 0049B708 --- ptr 00543708
  切换到OD,跟随地址 00543708
  •   00543708    68 86AC3665     push 0x6536AC86
  •   0054370D  ^ E9 1EFFFFFF     jmp 大牛FZ.00543630                    ;enter跟随
  •   .........
  •   00543630  - E9 837A7800     jmp 00CCB0B8                             ; enter
  •   00543635    0000            add byte ptr ds:[eax],al
  •   ........
  •   00CCB0B8    9C              pushfd
  •   00CCB0B9    60              pushad
  •   00CCB0BA    FF7424 24       push dword ptr ss:[esp+0x24]
  •   00CCB0BE    E8 05ECFFFF     call 00CC9CC8                            ; enter进入
  •   00CCB0C3    61              popad
  •   00CCB0C4    9D              popfd
  •   00CCB0C5    C3              retn                                     ; 此处地址为patchVA,记下。。
  •   ........
  •   00CC9CC8    A1 F4A8CD00     mov eax,dword ptr ds:[0xCDA8F4]
  •   00CC9CCD    80B8 BB000000 0>cmp byte ptr ds:[eax+0xBB],0x0
  •   00CC9CD4    74 57           je short 00CC9D2D
  •   00CC9CD6    FF15 F010CC00   call dword ptr ds:[0xCC10F0]             ; kernel32.GetTickCount
  •   00CC9CDC    8BC8            mov ecx,eax
  •   00CC9CDE    2B0D A0A7CD00   sub ecx,dword ptr ds:[0xCDA7A0]          ; 大牛FZ.00523B93
  •   00CC9CE4    81F9 88130000   cmp ecx,0x1388
  •   00CC9CEA    76 41           jbe short 00CC9D2D
  •   00CC9CEC    FF35 A4A7CD00   push dword ptr ds:[0xCDA7A4]
  •   00CC9CF2    A3 A0A7CD00     mov dword ptr ds:[0xCDA7A0],eax
  •   00CC9CF7    FF15 4010CC00   call dword ptr ds:[0xCC1040]             ; kernel32.ResumeThread
  •   00CC9CFD    833D 60AFCD00 0>cmp dword ptr ds:[0xCDAF60],0x3          ; CDAF60 为zeroVA
  •   00CC9D04    7C 08           jl short 00CC9D0E
  •   00CC9D06    6A 00           push 0x0


[color=rgb(51, 102, 153) !important]复制代码


  
  好,记录下
  
  IATstart  0049B000
  IATend    0049B708
  patchVA   00CCB0C5
  zeroVA    00CDAF60
  
  注意,后面的两个VA,在各个电脑上都是不同的,要自己找。
  
  
  打开ZPfixer
  process ID: 自己看你们的
  IATstart= code start
  IATend= code end
  
  其他都填好,点击 start。
  返回 New Address:  1000000
  OD 跟随此地址,在此处新建EIP,末尾下断。
  •   01000000    BE 00B04900     mov esi,0x49B000                         ; 新建EIP
  •   01000005    BF 08B74900     mov edi,0x49B708
  •   0100000A    B9 C5B0CC00     mov ecx,0xCCB0C5
  •   0100000F    83C1 05         add ecx,0x5
  •   01000012    83C7 04         add edi,0x4
  •   01000015    8B06            mov eax,dword ptr ds:[esi]
  •   01000017    8931            mov dword ptr ds:[ecx],esi
  •   01000019    8A10            mov dl,byte ptr ds:[eax]
  •   0100001B    80FA 68         cmp dl,0x68
  •   0100001E    74 02           je short 01000022
  •   01000020    EB 0A           jmp short 0100002C
  •   01000022    8A50 05         mov dl,byte ptr ds:[eax+0x5]
  •   01000025    80FA E9         cmp dl,0xE9
  •   01000028  ^ 75 F6           jnz short 01000020
  •   0100002A    FFD0            call eax
  •   0100002C    83C6 04         add esi,0x4
  •   0100002F    C605 60AFCD00 0>mov byte ptr ds:[0xCDAF60],0x0
  •   01000036    3BF7            cmp esi,edi
  •   01000038    74 0B           je short 01000045
  •   0100003A    8B06            mov eax,dword ptr ds:[esi]
  •   0100003C    85C0            test eax,eax
  •   0100003E  ^ 75 D5           jnz short 01000015
  •   01000040    83C6 04         add esi,0x4
  •   01000043  ^ EB D0           jmp short 01000015
  •   01000045    33C0            xor eax,eax                              ; F2下断。


[color=rgb(51, 102, 153) !important]复制代码


  取消 之前的ESP硬件断点,F9运行
  •   01000043  ^\EB D0           jmp short 01000015
  •   01000045    33C0            xor eax,eax                              ; ole32.OleInitialize
  •   01000047    0000            add byte ptr ds:[eax],al


[color=rgb(51, 102, 153) !important]复制代码


  末尾出现 ole32.OleInitialize,此时importrec 点自动获取,有3个无效的,直接用等级1修复。
  全部有效,保存下树文件,然后转存刚才dump的,此时肯定不能运行,因为我们没有修复代码。
  
  三、代码的修复。
  
  OD重载程序,要保证第一步中  “00477DB7 地址,下断硬件写入断点“  这个断点存在。不在的,再做一次。
  F8,下esp断点,运行,来到处理dll的地方,刚修改值为0(这里一定要改!!),运行
  •   00CC79B6  ^\75 F2           jnz short 00CC79AA                       ; 停在此处
  •   00CC79B8    8975 08         mov dword ptr ss:[ebp+0x8],esi
  •   00CC79BB    33F6            xor esi,esi
  •   00CC79BD    46              inc esi
  •   00CC79BE    EB 12           jmp short 00CC79D2
  •   00CC79C0    8B45 EC         mov eax,dword ptr ss:[ebp-0x14]


[color=rgb(51, 102, 153) !important]复制代码


  ctrl + g 跟随 VirtualAlloc ,分别在开始跟结尾下断
  •   7C809A61 >  8BFF            mov edi,edi                              ; 下断
  •   7C809A63    55              push ebp
  •   7C809A64    8BEC            mov ebp,esp
  •   7C809A66    FF75 14         push dword ptr ss:[ebp+0x14]
  •   7C809A69    FF75 10         push dword ptr ss:[ebp+0x10]
  •   7C809A6C    FF75 0C         push dword ptr ss:[ebp+0xC]
  •   7C809A6F    FF75 08         push dword ptr ss:[ebp+0x8]
  •   7C809A72    6A FF           push -0x1
  •   7C809A74    E8 09000000     call kernel32.VirtualAllocEx
  •   7C809A79    5D              pop ebp
  •   7C809A7A    C2 1000         retn 0x10                                ; 下断


[color=rgb(51, 102, 153) !important]复制代码


  运行到 retn 看寄存器,此时EAX值为 00F70000 ,记下来,取消断点,运行到OEP,alt + m查看内存镜像。
  由00F70000开始,一直到00FF0000,这些地址全部记下来,保存在一个文本文档中。
  
  00F70000
  00F80000
  00F90000
  00FA0000
  00FB0000
  00FC0000
  00FD0000
  00FE0000
  00FF0000
  
  打开Zpdump,开始补区段。ID自己填,填好后点load 选择刚才保存的文档,右边窗口出现数值,对他们点右键,GetVirtualSize,
  然后点 Analysis,最后start,完毕后点dump保存。
  OD载入脱好后的文件,发现最后一段(ImportREC补得段)的起始地址为 00633000
  计算器算一下,
  00F70000 - 00633000 = 93D000
  将 dump过出错的文件载入 LoadPe PE编辑器。
  点区段,右键编辑最后一段,虚拟大小改为 93D000 确定,再右键点击最后一段,从磁盘载入区段,载入刚保存的.dmp段
  提示成功,保存,确定,重建一下PE。
  可以运行,所有按钮都无错。
  脱壳成功。

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
Master 发表于 2015-2-19 12:57 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
叶落 发表于 2015-2-19 13:36 | 显示全部楼层

本帖最后由 叶落 于 2015-2-19 13:39 编辑

主要就是修复难。。要搞脚本我先慢慢学
醉了,先试试...
1.jpg
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
Break 发表于 2015-2-19 14:43 | 显示全部楼层

叶落 发表于 2015-2-19 13:36
主要就是修复难。。要搞脚本我先慢慢学
醉了,先试试...

ZP的已经放弃OEP了即使到达了OEP也无法完美的脱壳,修复其实是一大难题ESP定律就可以到OEP
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
阿菜 发表于 2015-2-19 15:22 | 显示全部楼层

Kk师傅艾特论坛的阿狸师傅看看,脱壳大师一枚。我也去学学脱壳好了

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
头像被屏蔽
邪恶小志 发表于 2015-2-19 15:30 | 显示全部楼层

提示: 作者被禁止或删除 内容自动屏蔽
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层
10层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

快速回复 返回顶部 返回列表