Getright 5 手动脱壳和重建IAT--第二部分(图)
互联网 发布时间:2008-10-08 19:05:33 作者:佚名 我要评论
在本参考教程的第一部分我们学习了如何正确地转储(dump)Getright 5. 现在我们将要去找神奇跳转,这样IAT会被正确地转储下来,而不用手工修复了. 要完成这一点,我们需要打败程序中的一些陷阱, 并使它们即使在检测到被执行脱壳时也无所作为.
让我们开始吧!
第一步:如
第一次变化可能会很久才发生, 但是记住不断的在OllyDbg运行、在PUPE中点击BUSCAR,并检查字节窗口中的值,直到字节窗口中的值从零开始变化.
如图所示,那个值变化了. 现在再重复几次,你将会看到:
子进程已经完全解出并赋值IAT. 我们必须在那个值第一次变化之后子进程赋值之前进入子进程. 这是个问题,但我耍了一个把戏解决了.
我们将要重复上述过程.关闭Parcheando--PUPE的窗口,因为当重启后进程的句柄会变.
重复上述过程直到你在PUPE的窗口中观察到那个值的第一次变化.你应该看到类似这样的东西:
很难找到一种好方法, 所以我决定在某个API上制造一个死循环.就选GetProcAddress吧.所以现在我们要去父进程中找到它.选择VIEW-EJECUTABLE MODULE 查找KERNEL32.dll 这是GetProcAddress所属的dll.
右击VIEW-NAMES查找api GetProcAddress
写下这个地址(红箭头).现在在PUPE中选择子进程,让它去找search (BUSCAR)这个地址值. 不同的机器这个值会不同. 我的是77E5B332.在字节窗口你会看到前两个字节是55 8B,所以在纸上写下,并在PUPE中将其改为EB FE然后按下PARCHEAR
在那儿现在子进程将会处于死循环中,我们可以说它已经睡着了. 我们现在必须把它从它的父进程那儿unhook下来.
在父进程窗口任意处点击鼠标右键,选择"新建起源"然后写下下面的代码
PUSH (son’shandle)
Call DebugActiveProcessStop
Nop (在这儿BPX并检查是否EAX=1)
在0042F00A 下中断,然后运行一下停在0042F00A 处。看看寄存器窗口的EAX值,如果这个值=01就表示子进程和父进程分离了。如果=00那么可能是子进程的句柄填错了, 你可以在下面重新写入代码再次运行,直到EAX=01时就可以关闭OllyDbg了(杀掉父进程!)然后就可以进入子进程了。
重新运行Ollydbg(不要加载程序)附加上子进程.
再次在PUPE中恢复原来的代码 55 8B并按 "Parchear" 再看看程序中的代码又还原成了77E5B332.
程序将会中断,就像你在下图中看到的.
让我们看一下那个错误的entry,右击转储dump窗口选择GOTO EXPRESSION 5E9C34.
Bp GetProcAddress 然后按RUN. 你可以看到当中断时错误的entry已经被重写了,但是表并不完整. 重新打开一个ollydbg载入tute.exe.如果在5e9c8c下面还有一个错误的entry就看那儿.
以5E9c98处的错值为例,因为那儿将会被写入DF513C.
回到Getright.exe (第一个ollydbg)看一下堆栈. 那儿的API被Df4cB2处的called调用并将会返回到DF4cB8.
在主窗口中选择GOTO EXPRESSION 0Df4cb8.
如图所示,那个值变化了. 现在再重复几次,你将会看到:
子进程已经完全解出并赋值IAT. 我们必须在那个值第一次变化之后子进程赋值之前进入子进程. 这是个问题,但我耍了一个把戏解决了.
我们将要重复上述过程.关闭Parcheando--PUPE的窗口,因为当重启后进程的句柄会变.
重复上述过程直到你在PUPE的窗口中观察到那个值的第一次变化.你应该看到类似这样的东西:
很难找到一种好方法, 所以我决定在某个API上制造一个死循环.就选GetProcAddress吧.所以现在我们要去父进程中找到它.选择VIEW-EJECUTABLE MODULE 查找KERNEL32.dll 这是GetProcAddress所属的dll.
右击VIEW-NAMES查找api GetProcAddress
写下这个地址(红箭头).现在在PUPE中选择子进程,让它去找search (BUSCAR)这个地址值. 不同的机器这个值会不同. 我的是77E5B332.在字节窗口你会看到前两个字节是55 8B,所以在纸上写下,并在PUPE中将其改为EB FE然后按下PARCHEAR
在那儿现在子进程将会处于死循环中,我们可以说它已经睡着了. 我们现在必须把它从它的父进程那儿unhook下来.
在父进程窗口任意处点击鼠标右键,选择"新建起源"然后写下下面的代码
PUSH (son’shandle)
Call DebugActiveProcessStop
Nop (在这儿BPX并检查是否EAX=1)
在0042F00A 下中断,然后运行一下停在0042F00A 处。看看寄存器窗口的EAX值,如果这个值=01就表示子进程和父进程分离了。如果=00那么可能是子进程的句柄填错了, 你可以在下面重新写入代码再次运行,直到EAX=01时就可以关闭OllyDbg了(杀掉父进程!)然后就可以进入子进程了。
重新运行Ollydbg(不要加载程序)附加上子进程.
再次在PUPE中恢复原来的代码 55 8B并按 "Parchear" 再看看程序中的代码又还原成了77E5B332.
程序将会中断,就像你在下图中看到的.
让我们看一下那个错误的entry,右击转储dump窗口选择GOTO EXPRESSION 5E9C34.
Bp GetProcAddress 然后按RUN. 你可以看到当中断时错误的entry已经被重写了,但是表并不完整. 重新打开一个ollydbg载入tute.exe.如果在5e9c8c下面还有一个错误的entry就看那儿.
以5E9c98处的错值为例,因为那儿将会被写入DF513C.
回到Getright.exe (第一个ollydbg)看一下堆栈. 那儿的API被Df4cB2处的called调用并将会返回到DF4cB8.
在主窗口中选择GOTO EXPRESSION 0Df4cb8.
相关文章
- “CMOS密码”就是通常所说的“开机密码”,主要是为了防止别人使用自已的计算机,设置的一个屏障2023-08-01
QQScreenShot之逆向并提取QQ截图--OCR和其他功能
上一篇文章逆向并提取QQ截图没有提取OCR功能, 再次逆向我发现是可以本地调用QQ的OCR的,但翻译按钮确实没啥用, 于是Patch了翻译按钮事件, 改为了将截图用百度以图搜图搜索.2023-02-04- QQ截图是我用过的最好用的截图工具, 由于基本不在电脑上登QQ了, 于是就想将其提取出独立版目前除了屏幕录制功能其他都逆出来了, 在此分享一下2023-02-04
非系统分区使用BitLocker加密导致软件无法安装的解决方法
很多电脑用户在考虑自己电脑磁盘分区安全时会采用 Windows 自带的 BitLocker 加密工具对电脑磁盘分区进行加密。但有些人加密后就会忘记自己设置的密码从而导致在安装其它软2020-11-25防止离职员工带走客户、防止内部员工泄密、避免华为员工泄密事件的发生
这篇文章为大家详细介绍了如何才能防止离职员工带走客户、防止内部员工泄密、避免华为员工泄密事件的发生,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-06-27彻底防止计算机泄密、重要涉密人员离职泄密、涉密人员离岗离职前防范举
近些年企业商业机密泄漏的事件屡有发生,这篇文章主要教大家如何彻底防止计算机泄密、重要涉密人员离职泄密、告诉大家涉密人员离岗离职前的防范举措,具有一定的参考价值,2017-06-27- 最近有电脑用户反应量子计算机可以破解下载的所有的加密算法吗?其实也不是不可以,下面虚拟就为大家讲解买台量子计算机,如何分分钟破解加密算法2016-09-26
怎么破解Webshell密码 Burpsuite破解Webshell密码图文教程
webshell是以asp、php、jsp或者cgi等网页文件形式存在的一种命令执行环境,一种网页后门。黑客通常会通过它控制别人网络服务器,那么怎么破解webshell密码呢?一起来看看吧2016-09-19- 本文讨论了针对Linux系统全盘加密的冷启动攻击,大家都认为这种攻击是可行的,但执行这么一次攻击有多难?攻击的可行性有多少呢?需要的朋友可以参考下2015-12-28
防止泄露公司机密、企业数据防泄密软件排名、电脑文件加密软件排行
面对日渐严重的内部泄密事件,我们如何守护企业的核心信息,如何防止内部泄密也就成了摆在各个企业领导面前的一大问题。其实,针对内网安全,防止内部信息泄漏早已有了比较2015-12-17
最新评论