冥界3大法王 发表于 2021-4-7 22:59

x64dbg脚本之深入学习之二

本帖最后由 冥界3大法王 于 2021-4-16 08:26 编辑

紧跟法王我们一起写一个实用的x64dbg脚本《走位标线器-破迷宫专用》
我们上一节中编了第一个脚本,但是根据使用和测试情况来说,发现了几个不足:
1.程序运行起来了,卡住了!
2.我们似乎忘记点什么?
3.每次重载脚本,自定义变量调试器并不会自动清掉;导致因重复定义变量而报错
(视图=》变量=》删除)
4.改一次脚本,就得Alt+S切换到脚本窗口,并Ctrl+o打开该脚本路径,或按Ctrl+R重载,空格键运行,活人手动清理变量名
显然很麻烦,操作起来很不方便
5.脚本的功能尚开延伸和加强
6.输出的 序号并非10进制的数
7.已经注释行的内容会被清掉,导致成为成一色的"走位XX序号"
// 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 //小节结束



这是一上次写的第一个脚本哈~~
似乎呢,我们并不需要写两个小节。
我们尝试进行下面的修改:


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{:301_994:}




EasyLableVeiw插件处则会显示成这个
同时呢,当我们Ctrl+F2之后也可能注释显示为MyPath{d:18$} 或后面是???
估计受了插件的影响吧,具体这个说不清。


改好之后

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

日志窗口就是这个样子的


https://static.52pojie.cn/static/image/hrline/2.gif
从网上下载插件,命令行输入【Scriptw】启动插件
基本方法是:F11 单步执行; F12 自动运行
它是Scriptw插件中一个;    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
         GetAPIName $x,{rax}
         write2file $path,1,$x      here it will append data to the log file
         write2file $path,0,"API Name:" $x   this will write the value of x
         
         -varx array,x
          setx $x,test
          setx $x,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设下断点,脚本并不会被断下来哟~~{:301_976:}
所以脚本中最好设有其他的中断条件,配合前面的来使用,才能达到最大的杀敌效果。



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



忆往昔我的旧时光都到哪里去了?!
{:301_974:}

[*]教你个DIY修改x36dbg的绝招,我刚刚想到的哟
[*]八哈春节版之让自动化穷举式爆破为你扫除疑云
[*]七哈逆袭:由一条吊带外露引发的悲剧
[*]六哈逆袭:论坛大屌做心脏移植手术
[*]五哈QT灰按钮的爆破要点总结
[*]四哈爆破之词典类程序爆破要点分享
[*]三哈爆破之旅要点分享
[*]二哈爆破要点分享:32位 and 64位
[*]大哈:简易爆破攻略
[*]x32dbg/x64dbg命令快速入门系列视频教学
[*]Baymax Patch Tools(大白补丁)使用从入门到精通
[*]盖世神器PowerPro使用教程

必须掌握的基本功:

[*]加密与解密第4版
[*]逆向工程核心原理
[*]使用OllyDbg从零开始Cracking
[*]揭秘数据解密的关键技术
[*]看雪论坛精华1-21

冥界3大法王 发表于 2021-4-8 17:13

sam喵喵 发表于 2021-4-8 13:59
基本看不懂,请问大佬该从哪里开始打基础

@sam喵喵
上一贴
msg 开始
就这么简单
分解动作肯定没做,没良心的。。。{:301_992:}

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

学习学习,
页: [1] 2
查看完整版本: x64dbg脚本之深入学习之二