冥界三大法王这吃货研究的第一个x32dbg脚本
本帖最后由 冥界3大法王 于 2020-7-27 11:38 编辑https://www.lanzoux.com/iqYXOf0uu5a这个为测试程序(crackme.exe and upx3.91)
问题起源:https://www.52pojie.cn/thread-1230748-1-1.html
因为先前没有研究过一个OD的脚本,后来学了些编程,比如Delphi/AHK/Python尝到些甜头,就觉得有了编程很多东西可以自动化实现很多个性化特殊需求。
说得不对之处还希望海涵!关键是吸引出高手引起共鸣,解决一些问题!{:301_1006:}
从网上搜索x32dbg scriptintroduction guide teaching ,几乎找不到什么有用的东西
只要很少的几个脚本例子:
我这里仅贴一个 upx 3.91的
//start
msg "upx (3.91) unpacker"
msg "make sure you're at the entry point of the program before you continue"
pause
//clear breakpoints
bc
bphwc
//script start
step
bphws csp,r
erun
bphwc
//find oep jump
find cip,"80E9" //some pattern
cmp $result,0
je error
//go to OEP
bp $result+1
erun
bc
sti
//finish script
ret
error:
msg "didn't find oep jump"
ret
然后呢,我就一句句的粘到下面的命令行中来对比着学习
//start 这句学到了注释语句//开始,后面随意
msg "upx (3.91)继续之前请确保您在程序的入口点" 这个很简单就是弹信息框
还可以弹表达式
msg {2+3} 结果就是 消息框5
这个
msg oep
msg 就是弹框,后面是一个表达式,或跟一个变量
比如
var$aa1, 123455555 //有时定义会报错
var aa1$,123455555 //你也可以反着写
msg {aa1$} 就调用了这个变量
当然 还能太弹太多太多的结果
长长的列表,迷瞎了楼下的老花眼。。
具体可以看着帮助自行试验。
不试你是无法体会到x32dbg/x64dbg命令行的强大的。
pause 这个呢,就是暂停程序,相当于F12
一般使用时是这样的,先让你的目标程序暂停,或用一个断点断下,就可以加载运行了。
//clear breakpoint
bc 清除全部CC断点
bphwc清除硬件断点
//脚本开始,到这里,我们就开始正式的从入门地开始运行程序了
当前我的程序开始停在这里!
step 就相当于F8一下
bphws esp,r 想想你平时怎么esp定律的? esp变红,bulabula,下个硬件访问断点呗
erun 这句是无视异常运行程序
bphwc这个是清掉硬件断点
我们就来到了这一行
原来它是这样写的 find cip,"80E9" //在内存页尾查找特征码 80E9 ,到这里我就有些不明白了,cip是啥?
帮助中是这样描述的,但我不知对应我们x32dbg调试器中的哪里?
如果
msg {cip},结果是00409D56 | 8D4424 80 | lea eax,dword ptr ss: | :"繯F" 这地址行!
我发现我用它的这个找不到结果,所以
换成了findallmem
//查找内存页中oep跳转
findallmem esp,"E9 98 72 FF FF"
就只找到了一条结果,
于是到这里我就糊涂了。
cip如果是一个寄存器
当前结果是 00409D56 这地址
再往下就是下面这句 cmp $result,0
到这里,我又迷糊了,cmp 和一个结果变量做比较,另一个是0
你可以在命令行 打入 cmp $result,0无反应
我们msg {$result}
结果是1
到这里就实在是迷会加混乱了,谁跟谁做比较?
如何把内存中搜索到的特征码传递给这个结果的变量?
cip指的是哪里,对应于寄存器器的哪里?
为什么换成findallmemcip,"E9 98 72 FF FF" 却找不到?
可是cip指向 和 停在的地方 正是当前运行到的行
00409D56 | 8D4424 80 | lea eax,dword ptr ss: |
je error这句好解释,相等则转到错误 标签处
//转到OEP
bp $result+1 用找到的那个结果变量+1 ,设个断点,由于上面不明白,所以这句也解释不通了。{:301_977:}脚本执行到此行报错了;感觉老外给的脚本全是64位的。
erun无视异常运行
bc 清掉cc断点
sti 就是StepInto/sti其实就相当于F7了
//完成脚本
ret 一个函数一个子程序完成当然要return 返回了。
error: 这里定义了一个错误的标签后面加冒号
msg "不能找到oep跳转!" 弹框,任务失败!
ret 同理
https://static.52pojie.cn/static/image/hrline/2.gif
一个吃货的试验过程说完了,希望楼下的明白人能拨云见日,指点迷津。{:301_980:}
VanceCZL 发表于 2020-8-1 17:47
求教导,怎么用DBG 脱壳的啊,用OD的ESP能脱,但是用DBG载入,发现与OD载入的完全不同,DBG载入的 ...
你这种情况是进入了系统领空(你看一下标题栏的模块名称,并不是你想要调试的程序名称)。
解决方式有2种:
1、依次选择菜单:【选项】-【选项】【事件】,只勾选入口断点,按【保存】按钮后重启调试器,就可以直接进入用户领空了。
2、依次选择菜单:【调试】-【运行到用户代码】或快捷键Alt+F9,也可以进入用户领空。
备注:通过观察标题栏的模块名称,可快速判断当前处于哪个领空。
希望对你有所帮助。 VanceCZL 发表于 2020-8-1 17:47
求教导,怎么用DBG 脱壳的啊,用OD的ESP能脱,但是用DBG载入,发现与OD载入的完全不同,DBG载入的 ...
你停在了系统断点或者TLS断点~ 在x64dbg的option里把tls断下和系统断点断下的勾取消掉. 好久没见法王了?隔离啦{:301_997:} 支持技术贴 感谢吾爱 脚本语法跟OD的很像,竟然看得懂 求一份贴心伴侣{:301_1004:} 冥界3大法王 发表于 2020-7-27 12:06
@mycc
指点一下吧。
都几乎全忘了,你指点一下我还差不多 过程非常详细,学习了。 好久不见法王了,特地来请安。虽然小弟混了近十年论坛,天赋所限,一无所成。但是法王大名还是如雷贯耳滴~ 你好像从来没有对我说过晚安,我在我们的聊天记录里搜索了关键字:“晚安”,你说过一次:我早晚安排人弄死你。
——摘自舔狗日记{:301_1001:} 法王不灌水,居然走技术流了
法王桑,水区的樱花开了
不回来看看嘛
页:
[1]
2