吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 5492|回复: 17
收起左侧

[原创] 冥界三大法王这吃货研究的第一个x32dbg脚本

  [复制链接]
冥界3大法王 发表于 2020-7-27 11:25
本帖最后由 冥界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
这个
image.png
msg oep
msg 就是弹框,后面是一个表达式,或跟一个变量
比如
var  $aa1, 123455555    //有时定义会报错
var aa1$,123455555     //你也可以反着写
msg {aa1$} 就调用了这个变量
当然 还能太弹太多太多的结果
image.png
长长的列表,迷瞎了楼下的老花眼。。
具体可以看着帮助自行试验。
不试你是无法体会到x32dbg/x64dbg命令行的强大的。
pause   这个呢,就是暂停程序,相当于F12
image.png
一般使用时是这样的,先让你的目标程序暂停,或用一个断点断下,就可以加载运行了。
//clear breakpoint
bc    清除全部CC断点
bphwc  清除硬件断点


//脚本开始,到这里,我们就开始正式的从入门地开始运行程序了
image.png
当前我的程序开始停在这里!
step   就相当于F8一下
bphws esp,r   想想你平时怎么esp定律的? esp变红,bulabula,下个硬件访问断点呗
erun    这句是无视异常运行程序
bphwc  这个是清掉硬件断点


image.png
我们就来到了这一行
原来它是这样写的 find cip,"80E9" //在内存页尾查找特征码 80E9 ,到这里我就有些不明白了,cip是啥?
image.png
帮助中是这样描述的,但我不知对应我们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"
image.png
就只找到了一条结果,
于是到这里我就糊涂了。
cip如果是一个寄存器
当前结果是 00409D56 这地址

再往下就是下面这句 cmp $result,0
image.png
到这里,我又迷糊了,cmp 和一个结果变量做比较,另一个是0
你可以在命令行 打入 cmp $result,0  无反应
我们msg {$result}
结果是1
image.png
到这里就实在是迷会加混乱了,谁跟谁做比较?
如何把内存中搜索到的特征码传递给这个结果的变量?
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                                            同理






一个吃货的试验过程说完了,希望楼下的明白人能拨云见日,指点迷津。

免费评分

参与人数 5吾爱币 +4 热心值 +5 收起 理由
alderaan + 1 + 1 热心回复!
sunnylds7 + 1 + 1 热心回复!
tail88 + 1 + 1 谢谢@Thanks!
mingxia + 1 鼓励转贴优秀软件安全工具和文档!
飘零未忍 + 1 + 1 这个伴侣看着不错,分享下?

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

simakuangbiao 发表于 2020-8-11 09:07
VanceCZL 发表于 2020-8-1 17:47
求教导,怎么用DBG 脱壳的啊,用OD的ESP能脱,但是用DBG载入,发现与OD载入的完全不同,DBG载入的 ...

你这种情况是进入了系统领空(你看一下标题栏的模块名称,并不是你想要调试的程序名称)。
解决方式有2种:
1、依次选择菜单:【选项】-【选项】【事件】,只勾选入口断点,按【保存】按钮后重启调试器,就可以直接进入用户领空了。
2、依次选择菜单:【调试】-【运行到用户代码】或快捷键Alt+F9,也可以进入用户领空。
备注:通过观察标题栏的模块名称,可快速判断当前处于哪个领空。
希望对你有所帮助。
梁萧 发表于 2020-9-8 14:49
VanceCZL 发表于 2020-8-1 17:47
求教导,怎么用DBG 脱壳的啊,用OD的ESP能脱,但是用DBG载入,发现与OD载入的完全不同,DBG载入的 ...

你停在了系统断点或者TLS断点~ 在x64dbg的option里把tls断下和系统断点断下的勾取消掉.
xtuuqtbl 发表于 2020-7-27 11:36
钢蛋蛋哥 发表于 2020-7-27 12:00
支持技术贴 感谢吾爱
mycc 发表于 2020-7-27 12:03
脚本语法跟OD的很像,竟然看得懂
罗萨 发表于 2020-7-27 15:17
求一份贴心伴侣
mycc 发表于 2020-7-27 16:05

都几乎全忘了,你指点一下我还差不多
lasolution 发表于 2020-7-27 16:16
过程非常详细,学习了。
一日就是一天 发表于 2020-7-27 21:06
好久不见法王了,特地来请安。虽然小弟混了近十年论坛,天赋所限,一无所成。但是法王大名还是如雷贯耳滴~
涛之雨 发表于 2020-7-27 22:43
你好像从来没有对我说过晚安,我在我们的聊天记录里搜索了关键字:“晚安”,你说过一次:我早晚安排人弄死你。
——摘自舔狗日记
星辰公子 发表于 2020-7-28 09:07
法王不灌水,居然走技术流了
法王桑,水区的樱花开了
不回来看看嘛
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-23 20:17

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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