ximo脱壳基础(个人学习汇总记录 二 )
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 ,然后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 )
断点—>硬件访问—>Word(命令:hr )—>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 )
右键断点—>硬件访问—>Word(命令:hr )—>SHIFT+F9(5次)—>从当前位置记录程序丢失数据到nop(有时需要分析是否是丢失的数据)删除硬件断点—>
F4到后面的call位置—>根据寄存器ESP的值在数据窗口跟随(命令:dd )—>右键断点—>硬件访问—>Word(命令:hr )—>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) 楼主,您好。关于视频的第18讲有个疑问。我发过一个帖子https://www.52pojie.cn/thread-900297-1-1.html。不知道楼主有没有遇到这样的问题。 再次支持一下 这也太牛逼了(#°Д°) 大神太牛逼,膜拜膜拜 图文并茂效果更佳哦 第二波厉害! 超正义的小煌 发表于 2019-4-1 21:10
图文并茂效果更佳哦
图文确实会更清晰,下次会注意 谢谢楼主分享 大佬牛逼啊 感谢分享