纯脚本类的功能实现都是调用的x64dbg命令,目前由于run_command_exec()命令无法返回参数,故通过中转eax寄存器实现了取值,目前只能取出整数类型的参数。

Script 类内函数名 函数作用
party(addr) 获取模块的模式编号, addr = 0则是用户模块,1则是系统模块
base(addr) 获取模块基址
size(addr) 返回模块大小
hash(addr) 返回模块hash
entry(addr) 返回模块入口
system(addr) 如果addr是系统模块则为true否则则是false
user(addr) 如果是用户模块则返回true 否则为false
main() 返回主模块基地址
rva(addr) 如果addr不在模块则返回0,否则返回addr所位于模块的RVA偏移
offset(addr) 获取地址所对应的文件偏移量,如果不在模块则返回0
isexport(addr) 判断该地址是否是从模块导出的函数
valid(addr) 判断addr是否有效,有效则返回True
base(addr) 或者当前addr的基址
size(addr) 获取当前addr内存的大小
iscode(addr) 判断当前 addr是否是可执行页面,成功返回TRUE
decodepointer(ptr) 解密指针,相当于调用了DecodePointer ptr
ReadByte(addr/eg) 从addr或者寄存器中读取一个字节内存并且返回
Byte(addr) 从addr或者寄存器中读取一个字节内存并且返回
ReadWord(addr) 读取两个字节
ReadDDword(addr) 读取四个字节
ReadQword(addr) 读取8个字节,但是只能是64位程序方可使用
ReadPtr(addr) 从地址中读取指针(4/8字节)并返回读取的指针值
ReadPointer(addr) 从地址中读取指针(4/8字节)并返回读取的指针值
len(addr) 获取addr处的指令长度
iscond(addr) 判断当前addr位置是否是条件指令
isbranch(addr) 判断当前地址是否是分支指令
isret(addr) 判断是否是ret指令
iscall(addr) 判断是否是call指令
ismem(addr) 判断是否是内存操作数
isnop(addr) 判断是否是nop
isunusual(addr) 判断当前地址是否指示为异常地址
branchdest(addr) 将指令的分支目标位于addr处
branchexec(addr) 如果分支要执行
imm(addr) 获取当前指令位置的立即数
brtrue(addr) 下一条指令的地址
next(addr) 获取addr的下一条地址
prev(addr) 获取addr上一条低地址
iscallsystem(addr) 判断当前指令是否是系统模块指令
get(index) 获取当前函数堆栈中的第index个参数
set(index,value) 设置的索引位置的值
firstchance() 最后一个异常是否为第一次机会异常
addr() 最后一个异常地址
code() 最后一个异常代码
flags() 最后一个异常标志
infocount() 上次异常信息计数
info(index) 最后一个异常信息

如上是一些常用的脚本命令的封装,他们的调用方式如下面代码中所示。

from LyScript32 import MyDebug
from LyScriptTools32 import DebugControl
from LyScriptTools32 import Script # 有符号整数转无符号数
def long_to_ulong(inter, is_64=False):
if is_64 == False:
return inter & ((1 << 32) - 1)
else:
return inter & ((1 << 64) - 1) # 无符号整数转有符号数
def ulong_to_long(inter, is_64=False):
if is_64 == False:
return (inter & ((1 << 31) - 1)) - (inter & (1 << 31))
else:
return (inter & ((1 << 63) - 1)) - (inter & (1 << 63)) if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("连接状态: {}".format(connect_flag)) # 定义堆栈类
control = DebugControl(dbg)
script = Script(dbg) # 得到EIP
eip = control.get_eip() size = script.size(eip)
print("当前模块大小: {}".format(hex(size))) entry = script.entry(eip)
print("当前模块入口: {}".format(hex(entry))) # 得到hash值,默认有符号需要转换
hash = script.hash(eip)
print("有符号hash值: {}".format(hash)) hash = long_to_ulong(script.hash(eip))
print("无符号hash值: {}".format(hex(hash))) dbg.close()

LyScriptTools 扩展Script类API手册的更多相关文章

  1. Swiper说明&&API手册 【中文手册Swiper】

     原文地址:http://www.cnblogs.com/scavengers/p/3760449.html 示例: <link rel="stylesheet" href= ...

  2. Swiper 中文API手册(share)

    本文分享自 http://www.cnblogs.com/scavengers/p/3760449.html ---------------------------华丽的分割线------------ ...

  3. Swiper.js 中文API手册

    本文分享自 http://www.cnblogs.com/scavengers/p/3760449.html ---------------------------华丽的分割线------------ ...

  4. Swiper说明&&API手册

    最近使用Swipe.js,发现中文的资料很少,试着翻译了一下.能力有限,翻译难免错漏,欢迎指出,多谢! 翻译自:http://www.idangero.us/sliders/swiper/api.ph ...

  5. Swiper说明及API手册说明

    最近使用Swipe.js,发现中文的资料很少,试着翻译了一下.能力有限,翻译难免错漏,欢迎指出,多谢! 翻译自:http://www.idangero.us/sliders/swiper/api.ph ...

  6. DOM扩展:DOM API的进一步增强[总结篇-下]

    本文承接<DOM扩展:DOM API的进一步增强[总结篇-上]>,继续总结DOM扩展相关的功能和API. 3.6 插入标记 DOM1级中的接口已经提供了向文档中插入内容的接口,但是在给文档 ...

  7. codeigniter框架扩展核心类---实现前台后台视图的分离

    1. 扩展核心类,主要作用就是扩展系统现在的功能. 为前台增加独立的视图文件夹: a. 自定义路径常量 :在application ->config/  constants.php中增加 /*m ...

  8. ASP.NET MVC 扩展HtmlHelper类为 js ,css 资源文件添加版本号

    写在前面 在项目部署当中会需要更新 css 文件或 js 等资源文件,为了避免由于浏览器缓存的原因无法加载新的 css 或 js ,一般的做法是在资源文件的后面加上一个版本号来解决,这样浏览器就会去服 ...

  9. ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(7)之扩展基类和区域创建以及文本编辑配置

    一.扩展基类和区域创建 (1)在应用之前,我们先在表现层创建一个公共的系统扩展文件来(SystemExtension)存放我们需要延伸和扩展的方法类. 在常规的项目系统操作中,我们都需要用到增删查改的 ...

  10. Silverlight实例教程 - 自定义扩展Validation类,验证框架的总结和建议(转载)

    Silverlight 4 Validation验证实例系列 Silverlight实例教程 - Validation数据验证开篇 Silverlight实例教程 - Validation数据验证基础 ...

随机推荐

  1. Mysql--JOIN连表查询

    一.Join查询原理 MySQL内部采用了一种叫做 nested loop join(嵌套循环连接)的算法:通过驱动表的结果集作为循环基础数据,然后一条一条的通过该结果集中的数据作为过滤条件到下一个表 ...

  2. 精细化边缘安全防护:如何防止CDN域名被恶意刷量?

    越是数字化时代,越要做好基建"安全"的顶层设计 随着消费及产业互联网的不断发展,数字化将实现全场景覆盖,人类的生活和生产方式也随之不断改变. 内容分发网络CDN(Content D ...

  3. 【JAVA基础】String处理

    String处理 字符串查找子串及截取 // 保存的头像文件的文件名 String suffix = ""; String originalFilename = file.getO ...

  4. Codeforces Round #565 (Div. 3) (重现赛个人题解)

    1176A. Divide it! 题目链接:http://codeforces.com/problemset/problem/1176/A 题意: 给定一个数字 \(n\) 和三种操作 如果 n 能 ...

  5. 区间dp专题小结

    区间DP是一类在区间上进行动态规划的最优问题,一般是根据问题设出一个表示状态的 dp,可以是二维的也可以是三维的,一般情况下为二维.然后将问题划分成两个子问题,也就是一段区间分成左右两个区间,然后将左 ...

  6. SV interface and Program3

    时钟域的理解 在仿真过程中,时钟跳变的一瞬间,CPU将时间域划分为不同的时钟域执行不同的代码 信号在芯片中都是金属丝,在进行跳变的时候都是电容的充放电过程,通常使用时钟上升沿进行模拟,而不使用时钟下降 ...

  7. java - 冒泡排序求最值

    public class Bubble3 { public static void main(String[] args) { int[] arr; arr = new int[]{2,3,6,1}; ...

  8. JMS微服务开发示例(五)生成短token,实现用户无状态登录

    用户token,也可以利用第三方框架生成,JMS也包含了自己的token服务器. 部署TokenServer 到这里下载 tokenserver.zip,然后部署运行TokenServer. 微服务中 ...

  9. linux-目录树

  10. Redis异常问题分析黄金一分钟

    Redis异常问题分析黄金一分钟 背景 同事发现一个环境redis比较卡顿,导致业务比较难以开展. 问题是下午出现的. 六点左右找到我这边. 想着帮忙看看, 问题其实没有定位完全, 仅是发现了一个可能 ...