好友
阅读权限 40
听众
最后登录 1970-1-1
本帖最后由 冥界3大法王 于 2021-4-16 08:26 编辑
紧跟法王我们一起写一个实用的x64dbg脚本《走位标线器-破迷宫专用》
我们上一节中编了第一个脚本,但是根据使用和测试情况来说,发现了几个不足:
1.程序运行起来了,卡住了!
2.我们似乎忘记点什么?
3.每次重载脚本,自定义变量调试器并不会自动清掉; 导致因重复定义变量而报错
(视图=》变量=》删除)
4.改一次脚本,就得Alt+S切换到脚本窗口,并Ctrl+o打开该脚本路径,或按Ctrl+R重载,空格键运行,活人手动清理变量名
显然很麻烦,操作起来很不方便
5.脚本的功能尚开延伸和加强
6.输出的 序号并非10进制的数
7.已经注释行的内容会被清掉,导致成为成一色的"走位XX序号"
[Asm] 纯文本查看 复制代码
// Author: 吾爱破解论坛之荣誉会员-冥界三大法王
// Comment: x36dbg之走位注释标线器-破迷宫专用
// Date:2021-4-5晚 生产
var a1$, 1 //首先我们定义一个Integer型变量为以后的注释内容"走位+数字N"作准备
XunHuan:
//msg {a1$+1} 得到2 //msg {$result} //正确
//cmp {mod.party(eip)},0 //这样写也没有报错
cmp mod.party(eip), 0 //当然是先判断一下当前行eip到底是用户领空还是系统领空啦?(两种写法都没有报错)
je ZhuShi_Jia1 //如果=0则相等则跳转到ZhuShi_Jia1子程序部分来添加 注释内容"走位+数字N"
StepOver //单步执行
ret //小节结束
ZhuShi_Jia1:
commentset eip, "走位"{a1$+1}
jmp XunHuan //注释完了,当然还得接着重复判断加注释啦,所以无条件跳转到XunHuan
ret //小节结束
这是一上次写的第一个脚本哈~~
似乎呢,我们并不需要写两个小节。
我们尝试进行下面的修改:
[Asm] 纯文本查看 复制代码
var a18$, x1 //首先我们定义一个Integer型变量为以后的注释内容"走位+数字N"作准备,10进制的1你得写成1d,最好用英文,否则不显
//var DaQian_VAaddress$, eip
XunHuan:
cmp mod.party(eip), 1 //和1比较,如返回1则是系统领空
StepOver //单步执行
cmp mod.party(eip), 0 //和0比较,如返回0则是用户领空
inc a18$ //自增变量加1
//msg {DaQian_VAaddress$}
//commentset DaQian_VAaddress$, "MY_Path"{a19$}
commentset eip, "MY_Path"{a18$}
//commentset eip, "MY_Path"{a18$} //这句也有问题,得分成两句来写!
jmp XunHuan //跳到头部重复执行
ret //小节结束
已经注释的内容是这个样子的
报错就是这个样子的
也就是说,我们只需要一个小节(子程序)
来不断的循环就行了。
让我们再来学习下16进制 和 10进制在x32dbg/x64dbg的中表示方法吧? xFF(16进制) 我们得到的是255(d)10进制 .255 (10进制)。。。。。。。FF(255d)
所以,我们上面的
var a18$, x1 //定义一个叫a19的变量,整型的,初始数值为1(后面无论你写成x1 还是1d)其实都是一样的 inc a18$ //自增变量加1 这个我们没说,您可以查看下帮助 commentset eip, "MY_Path"{a18$} //这个合起来就是这样的(前面得到当前行运行到的VA地址;后面则是输出MY_Path这个字符串加自增变量a19加1
虽然状态栏显示【删除变量成功】但是列表并不会自动刷新,这就是bug,绝对是bug
EasyLableVeiw插件处则会显示成这个
同时呢,当我们Ctrl+F2之后也可能注释显示为MyPath{d:18$} 或后面是???
估计受了插件的影响吧,具体这个说不清。
改好之后
[Asm] 纯文本查看 复制代码
ClearLog //清空日志窗口
vardel a18$ //先清掉原先变量,因x32dbg/x64dbg不会自己清,再运行时就会因重复而报错!写命令清了也白搭还提示,得窗口手动清
var a18$, x0 //首先定义1个Integer型变量为以后的注释内容"MyPath+数字N"作准备,10进制的1你得写成1d或x1(最好用英文否则不显或乱码)
XunHuan:
cmp mod.party(eip), 0 //当然是先判断一下当前行eip到底是用户领空还是系统领空啦?(两种写法都没有报错)
inc a18$
/////////////////////////////////var DaQianVA, p:eip 定义成变量,再调用之,也是一样被覆盖掉了!
////////commentset eip, "MyPath"{d:a18$} //{d:来格式化字符串}不然显示的可是16进制的(这行会被覆盖掉,靠,百思不解!)
commentset disasm.sel(), "MyPath"{d:a18$} //输出效果一样,依旧覆盖注释问题没解决
log "commentset "{eip}", MyPath_"{d:a18$} //输出效果比较牛逼!这个是新最后添加的输出到日志窗口,也是通过几轮字符串简单组合测试最终合在一起的样子哟~~(为了以后从日志窗口中提到加【注释序号的代码】因为注释被覆盖的问题想了几天还是不能直接解决{:301_1008:}
StepOver //单步执行
jmp XunHuan //跳转到开始重新判断写注释
ret //小节结束
日志窗口就是这个样子的
从网上下载插件,命令行输入【Scriptw】启动插件
基本方法是:F11 单步执行 ; F12 自动运行
它是Scriptw插件中一个; [Asm] 纯文本查看 复制代码
write2File 参数1,参数2,参数3 参数1:路径,要双引号括起来
参数2:True/False
参数3:要写入的字符串,可以为数组
帮助中这样描述的:
write2File path,over_append(false/true),data (Can be array )
note: you can write array directly to file by write the array name see sample
this Function used to write data to file and can write array to file too .
write2File path,over_append(false/true),data
- in parameter 1 :set the path of the file it can be done by variable other wise use "" surrounded path.设置文件的路径可以通过变量来完成,否则可以使用“”包围的路径。
- in parameter 2 :
- false: to over write file . ( u can use false or 0 or off )为假时覆盖写入
- true: to append to file . ( u can use true or 1 or on )为真时追加写入
- in parameter 3 : the data you want to write to the file it will analyzed if it have variables can be array .如果它的变量为数组,您要写入文件的数据将被分解。
```
-varx str,path,"E:\temp1\log.txt"
varx array,x[2]
GetAPIName $x[0],{rax}
write2file $path,1,$x[0] here it will append data to the log file
write2file $path,0,"API Name:" $x[0] this will write the value of x[0]
-varx array,x[2]
setx $x[0],test
setx $x[1],again
Write2File "D:\t.txt",0,$x this will write all x aary to t.txt file
```
//////////
我们先来一个最简单的:Write2File "c:\Test8.txt",true, 52pojie
难点和变数在参数3
有了这种东西,我们就可以把满足条件输出到日志中的内容,直接写入到文件了。
让它生成脚本的脚本。
注意问题:插件的使用时,编码你得用记事本保存为ascII的,否则打开直接乱码(直接编辑注释中的中文,自身的保存功能时,用调试器打开或记事本再编辑时)
比如我们人工在某位置按下F2设下断点,脚本并不会被断下来哟~~
所以脚本中最好设有其他的中断条件,配合前面的来使用,才能达到最大的杀敌效果。
条件设置断点窗口可以组成“连招”,这个当然也能办到。而且当整明白之后能办许多有创造性的事情。
昨天的脚本被我们稍加修改,就输出了脚本的脚本。
利用这个我们可以少些中间环节,还可以加入点花式玩法,比如InputBox,中间加入条件断点,使之应用场合更广泛。
今晚先写思路,明天再写实现。。。。先睡觉吧。
忆往昔我的旧时光都到哪里去了?!
必须掌握的基本功:
免费评分
查看全部评分
发帖前要善用【论坛搜索 】 功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。