好友
阅读权限 40
听众
最后登录 1970-1-1
本帖最后由 冥界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尝到些甜头,就觉得有了编程很多东西可以自动化实现很多个性化特殊需求。
说得不对之处还希望海涵!关键是吸引出高手引起共鸣,解决一些问题!
从网上搜索x32dbg script introduction guide teaching ,几乎找不到什么有用的东西
只要很少的几个脚本例子:
我这里仅贴一个 upx 3.91的
[Asm] 纯文本查看 复制代码
//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:[esp-80] | [esp-80]:"繯F" 这地址行!
我发现我用它的这个找不到结果,所以
换成了 findallmem
//查找内存页中oep跳转
findallmem esp,"E9 98 72 FF FF"
就只找到了一条结果,
于是到这里我就糊涂了。
cip如果是一个寄存器
当前结果是 00409D56 这地址
再往下就是下面这句 cmp $result,0
到这里,我又迷糊了,cmp 和一个结果变量做比较,另一个是0
你可以在命令行 打入 cmp $result,0 无反应
我们msg {$result}
结果是1
到这里就实在是迷会加混乱了,谁跟谁做比较?
如何把内存中搜索到的特征码传递给这个结果的变量?
cip指的是哪里,对应于寄存器器的哪里?
为什么换成findallmem cip ,"E9 98 72 FF FF" 却找不到?
可是cip指向 和 停在的地方 正是当前运行到的行
00409D56 | 8D4424 80 | lea eax,dword ptr ss:[esp-80] |
je error 这句好解释,相等则转到错误 标签处
//转到OEP
bp $result+1 用找到的那个结果变量+1 ,设个断点,由于上面不明白,所以这句也解释不通了。 脚本执行到此行报错了;感觉老外给的脚本全是64位的。
erun 无视异常运行
bc 清掉cc断点
sti 就是StepInto/sti 其实就相当于F7了
//完成脚本
ret 一个函数一个子程序完成当然要return 返回了。
error: 这里定义了一个错误的标签后面加冒号
msg "不能找到oep跳转!" 弹框,任务失败!
ret 同理
一个吃货的试验过程说完了,希望楼下的明白人能拨云见日,指点迷津。
免费评分
查看全部评分
发帖前要善用【论坛搜索 】 功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。