冥界3大法王 发表于 2020-7-28 10:37

初入x32dbg命令行与脚本之一:

https://www.52pojie.cn/thread-1230902-1-1.html这个贴子编的有很大问题,已提交组织,申请删除了!
https://www.lanzoux.com/iqYXOf0uu5a这个为测试程序(crackme.exe 和 upx3.91)
仅为测试和学习没有任何盗版哟~~
打包时,我们用:upx391w.exe C:\CRACKME.EXE官方的脚本使用详解只能找到有限的资源,且都是有结果,没原因的。
所以,我们有必要仔细来研究下为什么?
我们先把脚本贴上,我们给每行加了编号:

1)//start   从这行中,我们学到 //添加注释
从第2)开始我们就能每行测试着来学习了!(粘入x32dbg/x64dbg的命令行插件中)
2)msg "upx (3.91) unpacker"
    就是弹出个信息框,告诉用户这是upx 3.91有脱壳脚本
3)msg "make sure you're at the entry point of the program before you continue"
msg“继续之前,请确保您在程序的入口点”    意思告诉你脚本得在正确的地方使用才对,必须暂停中,比如设好断点后,不然可要报错,给你打脸的,不信你就来瞧瞧吧。
到这里之后,其实没有玩过的,可以自己研究下帮助
帮助中告诉你 msg 是个消息框,后面可以跟一个格式化的字符串,或一个变量
比如msg 2+3
msg {2+3}
msg {_zf}
msg {eax}
msg {user32.dll:0}
msg {disasm.sel()}
msg {x:00409D63}
msg {$pid}
msg {:oep}

当然当然有太多的太多变量列表了

如果自己去组合搞成表达式,那是威力无穷的
为了方便还是自己开发工具的省力,所略一次费劲,终身收益。
4)pause这个呢,等价于F12 因为制作脚本后完全是程序模拟活人来完成的自己跑,所以它们都有一个自己对应的命令


5)//clear breakpoints      
6)bc      为了让脚本使用不受影响所以一般都有清空cc断点的命令
7)bphwc同时,清掉全部硬件断点


8)//script start   这里是脚本的正式开始部分
9)step                  等价于F8 单步,这样好理解吧 ,还是老办法,一行一行的粘入测试并看效果

想想我们在使用esp定律时,是不是也是这样的? 单步一下esp寄存器变红后,数据窗口跟随硬访下断?
10)bphws csp,r         //为什么是csp寄存器? 这个资料太少,实在是不理解!

原文这样写的,我也不明白,不知道不能瞎说!不然论坛上那些瞎眼党,无脑转发党就要开始行动了。。。
几年后,我看到我当年的那些可笑错误被传遍了网络。。。真是无语了。。。我说的不对的,我改的不对的。。。
这就造就了csdn上,还有很多地方一个错,个个错。。。对么?你测试过,通过了吗?
11)erun 这个呢就是无视异常运行等价于shift +F9 吧(三个类似的,不信找菜单。。。)
12)bphwc 同上,硬件断可以清掉了

13)//find oep jump到这里就是开始了找寻oep
14)find cip,"80E9"    为啥用cip呢? 我也不理解!{:301_971:} 我是自己试出来的 ,还希望论坛明白人指点下为啥?谢谢。

这句话是重点!所以,我截图用了两个超级放大镜让楼下近视们看清楚
也许你眼神比我好!{:301_999:}

find命令看截图,咱们再来细说
参数1是开始搜索的地址
参数2要搜索的字节模式中间可以用??
参数3要搜索的数据的大小,没提默认是多少,估计可能是1000吧
接下来,你必须搞清楚,必须十分的清楚,你当前在哪个区块?
我们用下面的命令让程序自己告诉你!
【memmapdump 00409D56你得到的结果是upx1】

memmapdump 00409D63结果还是upx1
memmapdump 00401000 呢?得到的区块位于upx0,即401000
后两张截图就没有必要了。
接下来再说两个小放大镜问题 80 E9
00409D60 | 83EC 80                | sub esp,FFFFFF80
00409D63 | E9 9872FFFF         | jmp <crackme2_upx.sub_401000         
80 是 00409D60 的最后一个字节
E9 是00409D63 的第一个字节   
find呢,就是从内存里搜索该特征码!其他的几个脚本也是这样的“表达”
找到以后呢?存到 $result 这个变量里边
注意,该命令执行后,并不会在 【引用】标签页里有选显示
这是与findallmem命令不同的地方
不同的地方2在于findallmem命令中 $result 设置为出现的次数。


15)cmp $result,0

参数1 arg1要比较的第一个表达式
参数2arg2要比较的第二个表达式 ;
如果计算结果为true,则$ _BS_FLAG设置为1,表示该值更大

就是比较两个表达式,看了几个脚本都这样写的
$_EZ_FLAG and $_BS_FLAG
不信可以弹框测试下,当前是多少?
msg {$_EZ_FLAG}结果为0
msg {$_BS_FLAG}结果为1===》现在就属于这种情况! 你必须整明白了,这点很重要

16)je error   =0相等则跳到错误处


17)//go to OEP转到oep
18)bp $result+1   那这里就变得很简单了,刚才 的那个地址+1,设上断点
19)erun   无视异常运行
20)bc      清掉全部cc断点
21)sti       就是 StepInto   F7,单步步入

22)//finish script脚本完成
23)ret       脚本完成当然要return了

24)error:也就是 这里啦~~
25)msg "didn't find oep jump" 没找到oep,完蛋了~~
26)ret

好了,第一个脚本研究和分析就到这里啦。说得不对之处还望纠正。谢谢。{:301_975:}

千军 发表于 2020-8-3 12:53

法总你好可以受累看下我这个问题是出在哪了吗?下面这个链接就是
https://www.52pojie.cn/thread-1234686-1-1.html
(出处: 吾爱破解论坛)

iTruth 发表于 2020-7-28 12:50

帮助里说的很明确了啊,csp在x32下就是esp,在x64下就是rsp.用csp这样的寄存器的脚本可以通用x32和x64

bjbcqy 发表于 2020-7-28 10:56

感谢大佬分享心得

fanvalen 发表于 2020-7-28 12:10

大佬终于发dbg的教程了一直不怎么会用就等你了

暴躁的希瓦拉达 发表于 2020-7-28 12:28

学习一下000

csjwaman 发表于 2020-7-28 15:47

图片做得非常漂亮{:1_921:}

wrt110120 发表于 2020-7-28 21:25

谢谢学习了

donwinn 发表于 2020-7-28 21:52

支持一下

tlsnake 发表于 2020-7-29 05:51

先认真学习下
谢谢楼主分享经验

麻辣隔壁 发表于 2020-7-29 06:53

哈喽,支持你哟。
页: [1] 2
查看完整版本: 初入x32dbg命令行与脚本之一: