吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5627|回复: 24
收起左侧

[分享] ximo脱壳基础(个人学习汇总记录 二 )

  [复制链接]
zqw 发表于 2019-4-1 19:09
0x01
接上一篇 ximo脱壳基础(个人学习汇总记录 一 )
本篇从“ximo脱壳基础”教程第16节开始
0x02
(16)脱ACProtect1.32(无Stolen Code)      
1)、设置异常,隐藏OD
选项—>调试设置—>设置内存访问异常
插件—>StrongOD—>Options—>勾选HidePEB

Shift+F9直到程序运行(记录次数)
重载—>Shift+F9直到程序运行(次数-1)—>查看堆栈窗口SE句柄—>数据窗口跟随

2)、SE处下内存访问断点
数据区右键—>断点—>内存访问断点

3)、
Shift+F9一次—>F2下断点—>Shift+F9一次—>F2下断点—>Shift+F9一次—>取消所有断点
(内存访问断点删除:右键断点—>删除内存断点)

4)、
运行到retn处—>ALT+M—>代码段(00401000)下断—>Shift+F9—>到达OEP

(17)脱ACProtect(存在Stolen Code)      
ACProtect之前的版本名字为UltraProtect 1.x

区段可能会有.perplex

常规方法:直达OEP
修复被偷取的代码
修复、成功脱掉!

1)、设置异常,隐藏OD
选项—>调试设置—>设置内存访问异常
插件—>StrongOD—>Options—>勾选HidePEB

Shift+F9直到程序运行(记录次数)
重载—>Shift+F9直到程序运行(次数-1)—>查看堆栈窗口SE句柄—>数据窗口跟随

2)、SE处下内存访问断点
数据区右键—>断点—>内存访问断点

3)、
Shift+F9一次—>F2下断点—>Shift+F9一次—>F2下断点—>Shift+F9一次—>取消所有断点
(内存访问断点删除:右键断点—>删除内存断点)

4)、
运行到retn处—>调试—>设置条件 "push ebp"(条件不唯一)—>调试—>跟踪步入—>复制跟踪到的代码(大概3行,具体根据不同语言变化,二进制复制)
ALT+M—>代码段(00401000)下断—>Shift+F9—>根据缺少代码的大小,向上nop相同大小代码,二进制粘贴—>设置新的EIP—>脱壳(不要勾选重建输入表)—>修复

(18)ACProtect之寻找丢失的Stolen Code      
Stolen Code:
    部分壳会把程序部分代码抽取走(抽取到壳里)
   
选项—>调试设置—>设置int 3异常
插件—>StrongOD—>Options—>勾选HidePEB
   
Shift+F9直到程序运行(记录次数)
重载—>Shift+F9直到程序运行(次数-1)—>查看堆栈窗口SE句柄—>数据窗口跟随

数据区右键—>断点—>内存访问断点

Shift+F9一次—>F2下断点—>Shift+F9一次—>F2下断点—>Shift+F9一次—>取消所有断点
(内存访问断点删除:右键断点—>删除内存断点)
运行到retn处—>命令(d 12ffc0)—>数据区右键—>断点—>硬件访问断点—>Shift+F9

记录Stolen Code
复制运行到的代码(大概3行,具体根据不同语言变化,二进制复制)

ALT+M—>代码段(00401000)下断—>Shift+F9—>分析代码(CTRL+A)—>按着CTRL按动"上箭头"向上拉—>根据缺少代码的大小,向上nop相同大小代码,二进制粘贴—>设置新的EIP—>脱壳(不要勾选重建输入表)—>修复

OD加载修复后的文件—>CTRL+G—>源程序(未脱壳程序)入口点—>将脱壳后程序丢失的代码复制到这里—>然后再后面添加jmp跳转到真正OEP(或者PUSH [OEP地址],然后retn)—>复制可执行文件—>所有修改—>全部复制—>右键保存文件

使用PEditor编辑保存的文件,将入口点修改为源程序(未脱壳程序)入口点—>保存

(19)脱ACProtect V2.0.X      
一:
选项—>调试设置—>设置内存访问异常
插件—>StrongOD—>Options—>勾选HidePEB

Shift+F9直到程序运行(记录次数)
重载—>Shift+F9直到程序运行(次数-1)—>查看堆栈窗口SE句柄—>数据窗口跟随

数据区右键—>断点—>内存访问断点

Shift+F9一次—>F2下断点—>Shift+F9一次—>F2下断点—>Shift+F9一次—>取消所有断点
(内存访问断点删除:右键断点—>删除内存断点)

运行到retn处—>ALT+M—>代码段(00401000)下断—>Shift+F9—>到达OEP

分析OEP是什么语言的和OEP是否缺少代码
(如果是VB程序,可以创建一个VB程序查看入口是什么样的,直接参考修改)

二(设置异常无效时):
命令(bp GetCurrentProcessID)—>Shift+F9—>取消断点—>使用lordPE查看OD的进程号(PID)

修改mov指令第二个参数为OD的PID(十六进制,如果开头是字母需要在前面加0)
将此语句到retn之间的语句用nop填充

命令(bp GetModuleHandleA)—>Shift+F9—>取消断点

ALT+M—>代码段(00401000)下断—>Shift+F9—>出现NAG窗口,点确定后来到OEP—>脱壳并修复

(20)另类方法解ACProtect      
选项—>调试设置—>设置int 3异常
插件—>StrongOD—>Options—>勾选HidePEB

需要多重载尝试几次Shift+F9才能中断下来
SE处下内存访问断点:
数据区右键—>断点—>内存访问断点

Shift+F9一次—>F2下断点—>Shift+F9一次—>F2下断点—>Shift+F9一次—>取消所有断点
(内存访问断点删除:右键断点—>删除内存断点)

运行到retn处—>ALT+M—>代码段(00401000)下断—>Shift+F9—>到达假的OEP

记录假OEP地址

重载程序
pushad后根据寄存器ESP的值在数据窗口跟随(命令:dd [ESP] )
断点—>硬件访问—>Word(命令:hr [ESP] )—>Shift+F9(次数=Shift+F9使程序开始运行的次数-1)—>删除硬件断点—>记录此位置地址并在此位置进行脱壳

打开Import RE—>OEP填记录的假的OEP地址—>修复一次程序—>打开Import RE—>OEP填记录的脱壳位置地址—>修复程序

注意:壳并没有被脱掉但已经可以进行DIY操作

(21)ACProtect之补区段      
AntiCrack Protector 1.0x(国产的版本)

选项—>调试设置—>忽略所有异常
打开内存镜像(ALT+M)—>在.rdata处F2(如果没有.rdata的话使用.IDAta)—>Shift+F9

F8跟到对MessageBoxA和RegisterHotKey进行处理的地方分别将其下面的跳转nop填充
(AntiCrack Protector 1.0x会对MessageBoxA和RegisterHotKey进行处理所以需要将其nop掉)

然后将后面的magic跳转改为jmp

ALT+M—>代码段(00401000)下断—>Shift+F9—>到达OEP(有时不一定到OEP—>运行到retn—>F8运行一次—>ALT+M—>代码段(00401000)下断—>Shift+F9,如果还没到则再进行相同操作,有时F2断不下来,可以尝试使用内存访问断点,注意取消内存访问断点取消)—>来到假的OEP(记录下来)—>脱壳(未成功)—>修复

push后根据寄存器ESP的值在数据窗口跟随(命令:dd [ESP] )
    右键断点—>硬件访问—>Word(命令:hr [ESP] )—>SHIFT+F9(5次)—>从当前位置记录程序丢失数据到nop(有时需要分析是否是丢失的数据)删除硬件断点—>

F4到后面的call位置—>根据寄存器ESP的值在数据窗口跟随(命令:dd [ESP] )—>右键断点—>硬件访问—>Word(命令:hr [ESP] )—>SHIFT+F9(次数不固定)—>从当前位置记录程序丢失数据到nop(有时需要分析是否是丢失的数据,如果不是继续SHIFT+F9)—>重复此操作直到遇到jmp 跳转

所有记录代码汇总—>用工具(topo12.exe)申请一个新区段(记录起始的地址)—>OD打开程序(增加有新区段的程序)—>找到新区段地址—>粘贴入代码、保存—>在最后添加JMP跳向假OEP—>修正入口点到新区段地址

(22)        手脱ASProtect 1.2及1.23

ASProtect 1.2/1.2c->Alexey Solodovnikov

设置所有异常

先使用最后一次异常法

在后面的retn处下断点并运行到此

内存镜像 00401000下断

SHIFT+F9

到达OEP

脱壳、修复

ASProtect 1.2.3

设置内存访问异常
来到最后一次异常
在下方的retn下断—>Shift+F9
在堆栈窗口00400000下面的第二个的值哪里下硬件断点(hr xxxxxxx)或者在内存镜像00401000下断
SHIFT+F9后F8到达或者直达OEP

(23)手脱ASProtect1.23 RC4      
版本的判断:

判断版本:

ASProtect 1.23 RC4 按shift+f9键26次后来到典型异常,在最近处的retn处设断,跳过异常,f8步跟就会来到foep。

ASProtect 1.31 04.27 按shift+f9键36次后来到典型异常,在最近处的retn处设断,跳过异常,f8步跟就会来到foep。

ASProtect 1.31 05.18 按shift+f9键40次后来到典型异常,在最近处的retn处设断,跳过异常,f8步跟就会来到foep。

ASProtect 1.31 06.14 按shift+f9键38次后来到典型异常,在最近处的retn处设断,跳过异常,f8步跟就会来到foep。

ASProtect 1.23 RC4:

设置内存访问异常,隐藏OD
SHIFT+F9 26次到达最后一次异常
在retn处下断—>SHIFT+F9—>取消断点
(此时可以在内存镜像00401000处下断SHIFT+F9到达假OEP)
在堆栈窗口找显示程序名的下面第二行的值,下硬件断点(hr 12ffa4)
SHIFT+F9一次—>删除硬件断点
然后一直F8到第一个call处,F7进入找被抽取的代码并记录
F8继续向下找到假OEP补全代码—>脱壳、修复

(24)ASProtect之以壳解壳      
设置内存访问异常,SHIFT+F9来到最后一次异常

到达最近的retn

打开内存镜像,在00401000处下断,SHIFT+F9到达假的OEP(记录)

设置内存访问异常,SHIFT+F9来到最后一次异常

到达最近的retn
下断hr 0012ff68—>SHIFT+F9—>取消断点—>F8到最佳以壳解壳地点

完整转存

LordPE—>区段转存—>转存(完整转存位置所在的段)—>PE编辑器加载程序—>区段—>选定最后一个区段右键从磁盘载入区段—>选定载入的区段右键编辑区段—>修改虚拟地址(载入区段开始地址-0x400000)

ImportREC修复(假OEP地址)
PEditor修改入口点(最佳以壳解壳地址-0x400000)

免费评分

参与人数 12吾爱币 +11 热心值 +10 收起 理由
橘子子 + 1 + 1 谢谢@Thanks!
b1ackie + 1 + 1 我很赞同!
cpj1203 + 1 谢谢@Thanks!
hatu + 1 + 1 谢谢@Thanks!
海天一色001 + 1 + 1 用心讨论,共获提升!
王七岁 + 1 + 1 热心回复!
mystrive + 1 我很赞同!
slincc + 1 + 1 谢谢@Thanks!
fengzainiupi + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
Love破解 + 1 + 1 我很赞同!
江南小公子 + 1 热心回复!
ttd_2001 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

mxway 发表于 2019-4-2 21:56
楼主,您好。关于视频的第18讲有个疑问。我发过一个帖子https://www.52pojie.cn/thread-900297-1-1.html。不知道楼主有没有遇到这样的问题。
fengwolf3 发表于 2019-4-1 20:06
mantou001 发表于 2019-4-1 20:17
Thanatos688 发表于 2019-4-1 20:51
大神太牛逼,膜拜膜拜
超正义的小煌 发表于 2019-4-1 21:10
图文并茂效果更佳哦
tianlanghd 发表于 2019-4-1 21:37
第二波  厉害!
 楼主| zqw 发表于 2019-4-1 21:52

图文确实会更清晰,下次会注意
hbkccccc 发表于 2019-4-1 23:06
谢谢楼主分享
江南小公子 发表于 2019-4-2 00:16
大佬牛逼啊
青萍之末风一缕 发表于 2019-4-2 00:19
感谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 01:04

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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