吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 3318|回复: 16

[转载技术] 第四十章-OllyDbg脚本的编写

  [复制链接]
Shark恒 发表于 2015-1-20 17:21 | 显示全部楼层 |阅读模式

                                  第四十章
本章在修复PELock的IAT,AntiDump之前,我们先来讨论知识点,第一个知识点我们上一章已经碰到了,只不过没有展开讲而已,第二个知识点就是如何绕过PELock或者类似软件对硬件断点的检测。
知识点1在上一章节我们遇到过,大家可能没有在意,大家是否还记得上一章节中,OD加载目标程序以后,直接运行起来会弹出一个错误框,提示不知道该如何处理xxx处的非法指令。
为了解决这个问题,我们需要用到Patched4这个程序(又一个打过补丁的OD),我们将其置于原OD所在的文件夹中,因为原版OD在处理非法指令的时候有个BUG,就算我们勾选上调试选项中的忽略非法指令异常,当OD遇到非法指令的时候还是会弹出一个错误框,Patched4这个OD修复了这个BUG。
大家将Patch4这个OD跟原版OD放到同一个文件夹下面,下面我们分析PELock的时候需要用到。
好,再来给大家解释一遍(PS:老外比较细心,也比较啰嗦,嘿嘿)。
原版OD处理非法指令的时候有个BUG,勾选上调试选项中忽略非法指令异常,加载UnPackMe_PELock1.06,接着运行起来。
image002.jpg
我们可以看到弹出了一个错误框,但是我们用Patch4这个OD来加载UnPackMe_PELock1.06的话,就可以完美运行。我们来看看日志信息。
image004.jpg
我们可以看到最后一次异常是一个非法指令异常,现在我们不勾选的忽略非法指令异常选项。
image006.jpg
这里我们去掉Invaild or privileged instruction这个选项的对勾,加载UnPackMe_PELock1.06,运行起来。
image008.jpg
断在了异常处,如果我们按Shift + F9也可以继续运行下去。
也就是原版OD是就算你勾选了忽略非法指令异常这一项,OD并没有自动忽略。
如果是仅仅有一个这类异常,我们按一下Shift + F9也没什么。但是如果目标程序会产生200或者300个这样的异常,难道我们也手工去按Shift + F9不成(PS:连续按Shift + F9 200多次,那还不得疯掉哇,哈哈)。
我们再次勾选上Invaild or privileged instruction这个选项,运行起来,再次弹出了错误框。
image010.jpg
下面我们来尝试修复OD的这个BUG,再新开一个OD。
image012.jpg
选择新的OD主菜单中的File-Attach。定位到弹出错误框的OD所在的进程。
image014.jpg
image016.jpg
定位到弹出错误框OD所在的进程,单击Attach(附加)。
image018.jpg
断在了这里,我们运行起来。
接着我们来看一下区段列表窗口。
image020.jpg
现在我们可以看到OllyDbg的各个区段情况,接下来我们给MessageBoxA这个API函数设置一个断点。
image022.jpg
image024.jpg
由于我们单击错误消息框上面的OK按钮,就到达MessageBoxA函数的RET指令处,我们给该RET指令处也设置一个断点。
image026.jpg
弹出错误消息框后,我们单击Aceptar(OK)按钮。就会断在MessageBoxA这个API函数的返回RET指令处,我们单击F7键单步。
image028.jpg
下面我们查看一下字符串列表,看看有没有消息框提示的错误信息字符串。
image030.jpg
image032.jpg
我们看看有没有字符串里面含有bypass这个单词。
image034.jpg
我们可以看到我们要找到字符串在这里,我们在这个字符串上面双击。
image036.jpg
我们可以看到这里有几处JNZ可以跳过弹出错误消息框的代码,这里我们将435260处的JE修改为JMP 43528D,保存到文件中。
接下来我们看看Patched4这个OD该处的代码是怎么样的。
image038.jpg
这里我们可以看到435260处的条件跳转被修改为无条件跳转,即修改为了JMP 43528D,这样就能跳过填出错误消息框的代码。
这就是Patched4修复非法指令这个BUG的原理。大家可以自行给OD打补丁也可以直接用Patched4 这个OD。
知识点2就是要给大家演示如何编写脚本,我们需要用到OllyScript0.92.dll这个插件,将其放到OD的插件目录下。
image040.jpg
打开Patched4这个OD。
image042.jpg
我们可以看到主菜单中出现OllyScript的插件子菜单项。
现在我们加载UnPackMe_PELock1.06,下面我们编写一个简单的脚本让该壳无法检测到我们设置的硬件断点。
关于这个插件的使用说明大家可以参考插件文件夹下面的readme.txt。
这个脚本的思路很简单:每次异常触发后都会断在KiUserExceptionDispatcher,接下来就会由操作系统去调用异常处理函数,这个时候我们设置硬件断点可以被检测到,所以这个脚本要做的就是当前断在KiUserExceptionDispatcher时,清除掉硬件断点,当断在下面的CALL ZwContinue时再将硬件断点恢复。
image044.jpg
由于这是我们要编写的第一个脚本,所以不会让大家写太难的。首先给KiUserExceptionDispatcher和ZwContinue分别设置断点。
现在我们开始编写脚本。一般来说脚本都有一个开始标签:
beginning:
设置这个标签可以让我们方便的JMP beginning,接下来我们来设置硬件断点,举个例子:
bphws 12ffc4, “r”
bphws <BreakPoint HardWare Set> - 该命令可以对指定地址设置硬件断点,这里是对12ffc4设置硬件断点, “r”表示读取,”w”表示写入,”x”表示执行。
beginning:
bphws 12ffc4,“r”
work:
设置完硬件断点以后我们再来添加一个work标签。
beginning:
bphws 12ffc4,“r”
work:
eob to_process
run
这里的eob,<Execution On BreakPoint>-表示在下次中断发生时,跳转到指定标签处,这里该标签是to_process,即当程序中断下来时将跳转到to_process标签处,接下来run命令表示运行起来。
这里就是关键的部分了,当前OD中断后,我们就需要检查是否断在了KiUserExceptionDispatcher入口处,所以我们在to_process标签下面来进行检查。
to_process:
cmp eip,7C91EAEC
je to_clear
cmp eip,7C91EB03
je to_recover
jmp to_final
我这里7C91EAEC是KiUserExceptionDispatcher的入口地址,当断在KiUserExceptionDispatcher入口处时,eip为7C91EAEC,所以跳转到to_clear标签处清除硬件断点,接下来当断在CALL ZwContinue指令处时,就跳转到to_recover标签处恢复硬件断点。
清除内存断点如下:
to_clear:
bphwc 12ffc4
jmp work
当前跳转到to_clear标签以后,通过bphwc <BreakPoint HardWare Clear>命令删除12ffc4处的硬件断点,接着跳转到work标签处继续运行程序。
另外一个to_recover标签处是当断在CALL ZwContinue处时重新设置硬件断点的。
to_recover:
jmp beginning
接下来就是直接跳转到开头beginning标签处了,也就是将重新设置硬件断点。
接下来就是程序断在硬件断点处时,也就是jmp final。
to_process:
cmp eip,7C91EAEC
je to_clear
cmp eip,7C91EB03
je to_recover
jmp final
最后是:
final:
MSGYN “是否继续?”
cmp $RESULT,1
je beginning
ret
这里的MSGYN <Message Yes or No>命令会将指定消息,显示到一个对话框中,这个对话框上面有”是”,”否”按钮。如果点击”是”,保留变量$RESULT等于1,否则保留变量$RESULT等于0。如果我们想继续的话,就单击”是”,这样就会跳转beginning标签处继续执行脚本,如果我们不想继续,就单击”否”,这样就会直接ret,脚本就执行完毕了,OD就会停在硬件断点处。
整个脚本就是这样的:
beginning:
bphws 12ffc4,“r”
work:
eob to_process
run
to_process:
cmp eip,7C91EAEC
je to_clear
cmp eip,7C91EB03
je to_recover
jmp to_final
to_clear:
bphwc 12ffc4
jmp work
to_recover:
jmp beginning
final:
MSGYN “是否继续?”
cmp $RESULT,1
je beginning
ret
该脚本的整个执行流程,大家可以参考下图中的解释,这里我就不再赘述了。
image046.jpg
我们将上面的脚本保存到一个txt文本中,接着用OD加载UnPackMe_PELock1.06,然后给KiUserExceptionDispatcher入口处和call ZwContinue指令处分别设置一个断点,接着在主菜单中找到OllyScript插件。
image048.jpg
image050.jpg
image052.jpg
这里我们看到断在了硬件断点处,如果要继续执行脚本的话,单击YES按钮。
image054.jpg
image056.jpg
image058.jpg
这里我们可以看到完美运行,我们来看看硬件断点窗口。
image060.jpg
这里我们可以看到硬件断点设置成功了,也可以正常断下来,达到了我们预期的效果。
本章到此结束,下一章我们来介绍如何编写脚本修复PELock的IAT。

本系列文章汉化版转载看雪论坛

感谢原作者:RicardoNarvaja(西班牙人)
原作者个人主页:http://www.ricardonarvaja.info/

感谢热心翻译的朋友:
1~3章译者:BGCoder
4~58章译者:安于此生

全集配套程序下载地址:

链接: http://pan.baidu.com/s/1eQzTWfo 密码: vytv




评分

参与人数 17HB +16 THX +7 收起 理由
花盗睡鼠 + 2 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
sjtkxy + 1 + 1
Jawon + 1
一路走来不容易 + 1
Soul1999 + 1
消逝的过去 + 2
夜太美花来了 + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
梦寻 + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
playboy + 1
ldljlzw + 1
xtayflf + 1
weizuqiang + 1 + 1 &lt;span class=&quot;text2Link&quot;&gt;[吾爱汇编论坛&lt;a target=&quot;_blank&quot;&gt;52HB.COM&lt;/a&gt;]-感谢楼主热心分享,小小评分不成敬意!&lt;/span&gt;.
bnjzzheng + 1 [吾爱汇编论坛52HB.COM]-吃水不忘打井人,给个评分懂感恩!
无影无踪 + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
ghostxu + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
jaunic + 2
lies + 1

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
hackysh 发表于 2022-2-8 17:13 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
ghostxu 发表于 2022-2-15 09:02 | 显示全部楼层

支持开源~!感谢分享
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
头像被屏蔽
别管我了行 发表于 2022-3-2 03:55 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
ghostxu 发表于 2022-3-12 07:02 | 显示全部楼层

大神,请收下我的膝盖
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
bnjzzheng 发表于 2022-3-12 08:34 | 显示全部楼层


[快捷回复]-软件反汇编逆向分析,软件安全必不可少!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
weizuqiang 发表于 2022-3-12 08:45 | 显示全部楼层

支持开源~!感谢分享
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
头像被屏蔽
ldljlzw 发表于 2022-3-12 10:07 | 显示全部楼层

提示: 作者被禁止或删除 内容自动屏蔽
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
MoeRay 发表于 2022-3-25 01:15 | 显示全部楼层


[快捷回复]-感谢楼主热心分享!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
zg2600 发表于 2022-7-21 10:28 | 显示全部楼层

[吾爱汇编论坛52HB.COM]-Thanks~向楼主致敬!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!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

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