首页
社区
课程
招聘
[原创]x64dbg---x64dbgpy
2023-9-30 21:51 9086

[原创]x64dbg---x64dbgpy

2023-9-30 21:51
9086

x64dbg---x64dbgpy

简介

https://github.com/x64dbg/x64dbgpy/
x64dbgpy 是一个插件,可以使用 python 脚本自动化调试过程

安装

需要下载的文件看这里: https://github.com/x64dbg/x64dbgpy/releases

  1. 需要同时安装 python2.7 的 x64 和 x86 版本,可以改一下安装目录,比如 x86 的就装在 C:\\python27_x86 目录下
  2. x64dbgpy(如x64dbgpy_8c0538a.zip)不需要复制到x64dbg安装目录, 解压按位数复制到插件目录就好了,最外面的 .h 文件和 .lib 文件不用管
    x64dbgpy_8c0538a\x32\plugins -> snapshot_2023-09-21_00-53\release\x32\plugins
    如果已经安装了其它插件,需要把plugins里的文件复制到相应同名目录下

示例脚本

大部分函数都可以在 x64dbg/release/x32/plugins/x64dbgpy/x64dbgpy/pluginsdk/x64dbg.py 找到

简单脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
# coding:utf8
'''
设置断点,读内存
'''
 
from x64dbgpy.pluginsdk import x64dbg
from x64dbgpy.pluginsdk import memory
 
x64dbg.SetBreakpoint(0x00401235)
x64dbg.Run()
# 地址 长度
name = memory.Read(0x00406930, 0xFF)
print('name: {}'.format(name))

简单脚本2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# coding:utf8
 
'''
拼接字符串
'''
 
from x64dbgpy.pluginsdk import x64dbg
 
x64dbg.SetBreakpoint(0x0040133B# compare
x64dbg.SetBreakpoint(0x004013A6# right message
x64dbg.Run()
 
serial = ''
for i in range(10):
    dl = x64dbg.GetDL()
    serial += chr(dl)
    x64dbg.SetBL(dl)
    x64dbg.Run()
print(serial)
x64dbg.Run()

简单脚本3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# coding:utf8
 
'''
获取指定地址的字符串并比较
'''
 
from x64dbgpy.pluginsdk import x64dbg
from x64dbgpy.pluginsdk import memory
 
 
def get_ansi_str(addr):
    final_str = ''
    i = 0
    while True:
        c = memory.Read(addr+i, 1)
        if c == '\x00':
            break
        final_str += c
        i += 1
    return final_str
 
 
def get_wide_str(addr):
    final_str = ''
    i = 0
    while True:
        c = memory.Read(addr+i, 2)
        if c == '\x00\x00':
            break
        final_str += c
        i += 2
    return final_str
 
 
x64dbg.DbgScriptCmdExec('bp kernelbase.CreateFileW')
while True:
    x64dbg.Run()
    rcx = x64dbg.GetRCX()
    create_file_path = get_wide_str(rcx).replace('\x00', '')
    if 'encrypted.bin' in create_file_path:
        break

MISC

函数在 x64dbg.py 里,scriptapi.pyd 也可以用,但写代码时提示不友好
函数名可以整个文件夹搜,这样比较快

如果出错了,调试器里还有 python 交互窗口,在里面 import 试一下

建议在 x64dbg\release\x32\plugins\x64dbgpy 文件夹里写脚本,这样不会出现引用错误,整个文件夹在 vscode 打开,写脚本和搜索api都很方便

想引用label.py中的函数
from x64dbgpy.pluginsdk import label


2020/8/15


[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞1
打赏
分享
最新回复 (6)
雪    币: 19410
活跃值: (29069)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
秋狝 2023-9-30 23:08
2
1
感谢分享
雪    币: 1816
活跃值: (2677)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Nudest 2023-10-1 00:02
3
0
感谢分享
雪    币: 5102
活跃值: (4414)
能力值: ( LV5,RANK:65 )
在线值:
发帖
回帖
粉丝
gamehack 2023-10-1 09:06
4
0
感谢分享!
雪    币: 630
活跃值: (576)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
mi1itray.axe 2023-10-1 09:46
5
0
感谢分享
雪    币: 199
活跃值: (1624)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
freecat 1 2023-10-2 17:00
6
0
感谢分享
雪    币: 9
活跃值: (130)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
yber 2024-4-1 14:46
7
0
感谢分享
游客
登录 | 注册 方可回帖
返回