吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 8662|回复: 14
收起左侧

[原创] x64dbg脚本之深入学习之二

  [复制链接]
冥界3大法王 发表于 2021-4-7 22:59
本帖最后由 冥界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                  //小节结束


image.png

image.png

image.png
已经注释的内容是这个样子的
image.png
报错就是这个样子的

也就是说,我们只需要一个小节(子程序)
来不断的循环就行了。

让我们再来学习下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
image.png
image.png
虽然状态栏显示【删除变量成功】但是列表并不会自动刷新,这就是bug,绝对是bug

image.png

image.png
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                    //小节结束

image.png
日志窗口就是这个样子的



从网上下载插件,命令行输入【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

```
//////////

image.png
我们先来一个最简单的:Write2File "c:\Test8.txt",true, 52pojie
难点和变数在参数3
有了这种东西,我们就可以把满足条件输出到日志中的内容,直接写入到文件了。
让它生成脚本的脚本。

注意问题:插件的使用时,编码你得用记事本保存为ascII的,否则打开直接乱码(直接编辑注释中的中文,自身的保存功能时,用调试器打开或记事本再编辑时)
比如我们人工在某位置按下F2设下断点,脚本并不会被断下来哟~~
所以脚本中最好设有其他的中断条件,配合前面的来使用,才能达到最大的杀敌效果。



条件设置断点窗口可以组成“连招”,这个当然也能办到。而且当整明白之后能办许多有创造性的事情。
昨天的脚本被我们稍加修改,就输出了脚本的脚本。
利用这个我们可以少些中间环节,还可以加入点花式玩法,比如InputBox,中间加入条件断点,使之应用场合更广泛。
今晚先写思路,明天再写实现。。。。先睡觉吧。


忆往昔我的旧时光都到哪里去了?!


必须掌握的基本功:

免费评分

参与人数 7吾爱币 +8 热心值 +6 收起 理由
lies2014 + 1 + 1 谢谢@Thanks!
笙若 + 1 + 1 谢谢@Thanks!
舒默哦 + 2 谢谢@Thanks!
OllyDbg丶 + 1 + 1 用心讨论,共获提升!
划过的流星 + 1 用心讨论,共获提升!
qfl222 + 1 + 1 用心讨论,共获提升!
自由之心 + 2 + 1 用心讨论,共获提升!

查看全部评分

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

 楼主| 冥界3大法王 发表于 2021-4-8 17:13
sam喵喵 发表于 2021-4-8 13:59
基本看不懂,请问大佬该从哪里开始打基础

@sam喵喵
上一贴
msg 开始
就这么简单
分解动作肯定没做,没良心的。。。
OllyDbg丶 发表于 2021-4-8 10:28
有两三年没来论坛,斗转星移你依然还是研究技术,我依然还是一事无成,记得以前我还收藏了两个你的技术帖子
nj001 发表于 2021-4-7 23:09
人心太拥挤i 发表于 2021-4-8 02:58
这下我也学会了
zhangyangblue 发表于 2021-4-8 05:58
谢谢分享!!!
whngomj 发表于 2021-4-8 08:38
谢谢分享,学习了。
sam喵喵 发表于 2021-4-8 13:59
基本看不懂,请问大佬该从哪里开始打基础
W133 发表于 2021-4-8 15:10
学海无涯,天天都是进步,受教了!
zuiwanqingfeng 发表于 2021-4-9 06:36
学习学习,
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-24 19:48

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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