首页 > 其他分享 >x64dbg 插件开发环境配置

x64dbg 插件开发环境配置

时间:2022-09-02 20:55:20浏览次数:86  
标签:comment 插件 lib 配置 scriptapi pragma x64dbg include pluginsdk

x64dbg 是一款开源的应用层反汇编调试器,旨在对没有源代码的可执行文件进行恶意软件分析和逆向工程,同时 x64dbg 还允许用户开发插件来扩展功能,插件开发环境的配置非常简单,如下将简单介绍x64dbg是如何配置开发环境以及如何开发插件的。

默认情况下当你下载好x64dbg时,在pluginsdk目录下都会包含lib库,这个库可以直接引用到项目内的。

插件库的引入也很简单,在vs中只需要配置include引用,以及lib库位置即可,x64dbglib库的配置异常简单。

引入后,我们去官方下载好插件模板文件:https://github.com/x64dbg/PluginTemplate

此处为了开发方便,我做了精简化,你可以直接使用我的方法来新建文件,建出来的文件只有两个非常简洁。

首先在头文件部分新建一个pluginmain.h 并增加PLUGIN_NAME替换成自己项目的名字。

#pragma once

// Plugin information
#define PLUGIN_NAME "LySharkBlog"
#define PLUGIN_VERSION 1

#include "pluginsdk/bridgemain.h"
#include "pluginsdk/_plugins.h"

#include "pluginsdk/_scriptapi_argument.h"
#include "pluginsdk/_scriptapi_assembler.h"
#include "pluginsdk/_scriptapi_bookmark.h"
#include "pluginsdk/_scriptapi_comment.h"
#include "pluginsdk/_scriptapi_debug.h"
#include "pluginsdk/_scriptapi_flag.h"
#include "pluginsdk/_scriptapi_function.h"
#include "pluginsdk/_scriptapi_gui.h"
#include "pluginsdk/_scriptapi_label.h"
#include "pluginsdk/_scriptapi_memory.h"
#include "pluginsdk/_scriptapi_misc.h"
#include "pluginsdk/_scriptapi_module.h"
#include "pluginsdk/_scriptapi_pattern.h"
#include "pluginsdk/_scriptapi_register.h"
#include "pluginsdk/_scriptapi_stack.h"
#include "pluginsdk/_scriptapi_symbol.h"

#include "pluginsdk/DeviceNameResolver/DeviceNameResolver.h"
#include "pluginsdk/jansson/jansson.h"
#include "pluginsdk/lz4/lz4file.h"
#include "pluginsdk/TitanEngine/TitanEngine.h"
#include "pluginsdk/XEDParse/XEDParse.h"

#ifdef _WIN64
#pragma comment(lib, "pluginsdk/x64dbg.lib")
#pragma comment(lib, "pluginsdk/x64bridge.lib")
#pragma comment(lib, "pluginsdk/DeviceNameResolver/DeviceNameResolver_x64.lib")
#pragma comment(lib, "pluginsdk/jansson/jansson_x64.lib")
#pragma comment(lib, "pluginsdk/lz4/lz4_x64.lib")
#pragma comment(lib, "pluginsdk/TitanEngine/TitanEngine_x64.lib")
#pragma comment(lib, "pluginsdk/XEDParse/XEDParse_x64.lib")
#else
#pragma comment(lib, "pluginsdk/x32dbg.lib")
#pragma comment(lib, "pluginsdk/x32bridge.lib")
#pragma comment(lib, "pluginsdk/DeviceNameResolver/DeviceNameResolver_x86.lib")
#pragma comment(lib, "pluginsdk/jansson/jansson_x86.lib")
#pragma comment(lib, "pluginsdk/lz4/lz4_x86.lib")
#pragma comment(lib, "pluginsdk/TitanEngine/TitanEngine_x86.lib")
#pragma comment(lib, "pluginsdk/XEDParse/XEDParse_x86.lib")
#endif //_WIN64

#define Cmd(x) DbgCmdExecDirect(x)
#define Eval(x) DbgValFromString(x)
#define dprintf(x, ...) _plugin_logprintf("[" PLUGIN_NAME "] " x, __VA_ARGS__)
#define dputs(x) _plugin_logprintf("[" PLUGIN_NAME "] %s\n", x)
#define PLUG_EXPORT extern "C" __declspec(dllexport)

//superglobal variables
extern int pluginHandle;
extern HWND hwndDlg;
extern int hMenu;
extern int hMenuDisasm;
extern int hMenuDump;
extern int hMenuStack;

//functions
bool pluginInit(PLUG_INITSTRUCT* initStruct);
void pluginStop();
void pluginSetup();

其次新建一个实现文件pluginmain.cpp并写入以下代码,多数情况下我为了方便调试会使用这段代码,当我们点击菜单时会触发菜单功能,以此可以快速测试特定函数是否正常。

#include "pluginmain.h"
#include <Windows.h>
#include <process.h>

int pluginHandle;
HWND hwndDlg;
int hMenu;
int hMenuDisasm;
int hMenuDump;
int hMenuStack;

// 导出函数
extern "C" __declspec(dllexport) void CBMENUENTRY(CBTYPE cbType, PLUG_CB_MENUENTRY* info);
extern "C" __declspec(dllexport) void plugsetup(PLUG_SETUPSTRUCT* setupStruct);
extern "C" __declspec(dllexport) bool pluginit(PLUG_INITSTRUCT* initStruct);

// 在这里初始化插件数据。
bool pluginInit(PLUG_INITSTRUCT* initStruct)
{
	// 返回false以取消加载插件。
	return true;
}

// 在此处取消初始化插件数据。
void pluginStop()
{
}

// 在这里做GUI/菜单相关的事情。
void pluginSetup()
{
}

// 菜单被点击回调
void CBMENUENTRY(CBTYPE cbType, PLUG_CB_MENUENTRY* info)
{
	// 此菜单用于实现功能,并测试

	for (int x = 0; x < 100; x++)
	{
		_plugin_logprint("hello lyshark");
	}
}

PLUG_EXPORT bool pluginit(PLUG_INITSTRUCT* initStruct)
{
	initStruct->pluginVersion = PLUGIN_VERSION;
	initStruct->sdkVersion = PLUG_SDKVERSION;
	strncpy_s(initStruct->pluginName, PLUGIN_NAME, _TRUNCATE);
	pluginHandle = initStruct->pluginHandle;

	// 插件初始化
	initStruct->sdkVersion = PLUG_SDKVERSION;
	initStruct->pluginVersion = 1;
	const char *name = "CheckME -->";
	memset(initStruct->pluginName, 0, 128);
	memcpy(initStruct->pluginName, name, strlen(name));

	return pluginInit(initStruct);
}

PLUG_EXPORT bool plugstop()
{
	pluginStop();
	return true;
}

PLUG_EXPORT void plugsetup(PLUG_SETUPSTRUCT* setupStruct)
{
	hwndDlg = setupStruct->hwndDlg;
	hMenu = setupStruct->hMenu;
	hMenuDisasm = setupStruct->hMenuDisasm;
	hMenuDump = setupStruct->hMenuDump;
	hMenuStack = setupStruct->hMenuStack;

	// 增加二级菜单
	char sub_menu[] = { "PowerBy LyShark" };
	_plugin_menuaddentry(setupStruct->hMenu, 2, sub_menu);

	pluginSetup();
}

编译这段代码,然后我们将其放入到x64dbg目录下的plugins目录,然后运行程序,点击checkme即可测试我们的功能了。

标签:comment,插件,lib,配置,scriptapi,pragma,x64dbg,include,pluginsdk
From: https://www.cnblogs.com/LyShark/p/16651159.html

相关文章

  • nnUNet使用指南(四):json文件的配置
    代码如下fromcollectionsimportOrderedDictimportglobimportosimportreimportjsonfrombatchgenerators.utilities.file_and_folder_operationsimport*d......
  • 使用JavaConfig实现配置
    @Configuration在一个类上加了@Configration之后就类似<beans><beanid="xxx" class="xxxxxx"/></beans>这个也会被Spring容器托管,注册到容器中,因为他本来就是一个@......
  • Spring boot多Rabbit MQ配置创建队列到指定MQ
    1、场景springboot整合rabbitmq,需要将队列queue1、queue2分别放在不同的MQ服务上MQ1、MQ2。2、环境准备MQ1:IP:192.168.1.110队列:queue1MQ2:IP:172.16.1.220队列:queu......
  • odoo14邮件配置
    1、进入odoo系统“设置”--“常规设置”2、别名域设置邮件服务器的域名称3、发件服务器 4、收件服务器5、配置后记得测试,提示异常注意检查用户信息的邮件内容和这......
  • MVN3️⃣依赖管理 & 生命周期及插件
    1、依赖管理1.1、依赖配置依赖:当前项目运行所需要的jar包。一个项目可以导入多个依赖,项目本身可作为依赖被导入。配置方式:dependencies-dependency-gav。......
  • 06_Linux基础-NGINX和浏览器、网页的关系-云服务器ssh登陆-安装NGINX-上传网页-压缩命
    06_Linux基础-NGINX和浏览器、网页的关系-云服务器ssh登陆-安装NGINX-上传网页-压缩命令-xz-gzip-bzip2-zip-tar-配置NGINX服务器支持下载功能-备份脚本一.NGINX和浏览......
  • Docker 安装配置宝塔面板
    本文主要介绍如何将宝塔面板作为Docker容器安装在Linux服务器上。其实对于宝塔一开始我是拒绝的,毕竟我之前是可以熟练操作Linux服务器的。别提宝塔面板了,就连lnmp.o......
  • SpringBoot多数据源配置
    在实际的开发或者线上环境中,一般都不仅仅是一个数据库走天下,而是根据业务进行拆分多个数据库。另外,在日常开发中我们都是以单个数据库进行开发,在小型项目中是完全能够满足......
  • Nuxtjs 集成 swiper vue-awesome-swiper 插件
    1、必须指定版本不然各种坑经测试通过如下[email protected]@3.1.32.项目中创建插件目录及文件~/plugins/vue-awesome-swiper.jsi......
  • [Spring框架]spring新注解配置、spring整合JUnit5
    1.spring新注解配置1.@Configuration作用:配置类,等同于bean.xml文件获取容器时需要使用AnnotationApplicationContext(有@Configuration注解的类.class)属性:value:指定配......