首页 > 系统相关 >Windows下编译Havoc

Windows下编译Havoc

时间:2024-07-21 12:06:52浏览次数:12  
标签:Windows Havoc python 编译 client 报错 mingw path

客户端编译

安装msys2

image

安装过程一直next,完成后打开终端,更新并安装qt和python, 过程回车并输入y继续。

# 更新
pacman -Su

# 安装Qt Python
pacman -S mingw-w64-x86_64-qt-creator mingw-w64-x86_64-qt5 python python-devel

image

cmake不能用通用版本,要使用mingw-w64-x86_64-cmake​。

# 安装cmake
pacman -S mingw-w64-x86_64-cmake

pacman -S base-devel mingw-w64-x86_64-toolchain git subversion mercurial mingw-w64-x86_64-nasm mingw-w64-x86_64-lld autoconf automake

克隆项目,进入项目目录,尝试编译客户端,但遇到报错提示ssl证书有问题。

git clone https://github.com/HavocFramework/Havoc.git
cd havoc
make client-build

image

我这里更改了项目根目录下的url,全部替换成了镜像站:

[submodule "client/external/spdlog"]
	path = client/external/spdlog
	url = https://githubfast.com/gabime/spdlog
[submodule "client/external/json"]
	path = client/external/json
	url = https://githubfast.com/nlohmann/json
[submodule "client/external/toml"]
	path = client/external/toml
	url = https://githubfast.com/ToruNiina/toml11

再次执行,遇到新的报错:没有找到python的头文件,

image

打开项目,在client的CMakeLists.txt​中,找到python(59~66)

image

添加自己本机的python位置(这里用的前面msys2中安装的):

if(APPLE)
    execute_process( COMMAND brew --prefix OUTPUT_VARIABLE BREW_PREFIX ) #this because brew install location differs Intel/Apple Silicon macs
    string( STRIP ${BREW_PREFIX} BREW_PREFIX ) #for some reason this happens: https://gitlab.kitware.com/cmake/cmake/-/issues/22404
    include_directories( "${BREW_PREFIX}/bin/python3.10" )
    include_directories( "${BREW_PREFIX}/Frameworks/Python.framework/Headers" )
elseif(UNIX)
    include_directories( ${PYTHON_INCLUDE_DIRS} )
else()
	include_directories( "D:/env/msys2/mingw64/include/python3.11/" )
endif()

再次编译遇到新的报错,报错位置在global.hpp

image

这个文件位于/client/include/​,查看报错的52行,这里定义了一些Windows类型,直接注释掉再次编译。

image

新的报错在DemonCmdDispatch.h​的25行,位于/client/include/Havoc/​。

image

这里的CALLBACK​可能与其他代码中的宏、类型、变量名或其他枚举值发生了冲突,将其修改为CALLBACK_FIX​,但他在别处被调用的地方同样要修改,全局搜索一下:

image

修改保存后继续编译,发现还是这个文件中的ERROR​,但是全局没找到调用,直接更名ERROR_FIX

image

继续报错来到ConsoleInput.cc​的2427行,/client/src/Havoc/Demon/​。

image

这里指出将 std::filesystem::path​ 类型的对象赋值给 std::__cxx11::basic_string<char>​ 类型的对象,但是编译器找不到合适的 operator=​ 来完成这个赋值操作。来到代码中看这一行Path = std::filesystem::current_path();​,他将 current_path()​ 的结果(一个 std::filesystem::path​ 对象)赋值给 Path​,而 Path​ 被推断为 std::basic_string<char>​ 类型(即 std::string​)。但这两种类型没有隐式转换。

image

解决方案就是用auto声明变量进行类型推断,更改为如下:

auto fix_path = std::filesystem::current_path(); 
Path = fix_path.string();

在文件中搜了一下还有2524,2782也是同样的修改一下,再次编译。问题来到exception.hpp:44​,提示strerror_r​没有定义。错误文件位于/client/external/toml/​。

image

第二个红框处是在glibc上定义的函数,因为非 GNU 系统上(比如 MSVC),strerror_r​并未在mingw中兼容到标准库中。这里直接注释并复制使用上一个红框处的逻辑。

image

再次编译报错,提示有很多未定义的函数,这些函数来源于python,应该是python库定位有问题,回到CMakeLists.txt​中。

image

elseif(UNIX)​中的find_package( PythonLibs 3 REQUIRED )​复制到else块中使其按UNIX的逻辑来定位PythonLibs​模块:

image

重新编译,

image

运行发现缺失dll, 除了这个python312.dll​(我本机中多版本,这个还删掉了),还有诸如Qt5Core.dll​,Qt5Gui,dll​,Qt5Network.dll​等等

image

直接搜索全部复制到加入过环境变量的目录中去,比如python的目录。

image

卸载了python3.12确保环境变量中没有指向,然后删除/client/build​目录清空make缓存,重新编译可以启动。

image

上线,执行命令都没有问题:

image

标签:Windows,Havoc,python,编译,client,报错,mingw,path
From: https://www.cnblogs.com/bktown/p/18314327/compile-havoc-under-windows-z25dynx

相关文章

  • 2、OpenGL-GLFW下载编译
    文章目录1.GLFW简介2.下载3.编译4.测试4.1测试工程构建4.2创建CMakeLists.txt4.3main.c4.4编译4.5运行测试1.GLFW简介针对OpenGL的C语言库,它提供了一些渲染物体所需的最低限度的接口跨平台的窗体生成API系统与OpenGL便捷链接方便的鼠标键盘消息回调函数2......
  • Windows11下使用VcXsrv+xfce4实现图形化窗口
    通过sudoapt-getinstallxfce4-terminalsudoapt-getinstallxfce4sudoservicedbusrestart来安装所需要的软件包,期初我也是按部就班的通过网上搜索到的教程进行操作,例如:sudonano~/.bashrc#在末尾添加exportDISPLAY=$(grep-m1nameserver/etc/resolv.conf......
  • Thingsboard成功编译安装
    文章目录前言一、安装注意事项二、安装java三、安装maven四、安装docker五、下载thingsboard源码六、启动mvn编译前言Thingsboard云平台的安装有多种方法。最简便的方法是拉取docker镜像安装。而为了方便后期的二次开发,能基于源码方式安装是非常重要的一步。一、......
  • PowerShell 命令来操作 Windows 注册表 Get-ItemProperty 命令可以获取指定注册表路径
    PowerShell提供了一些命令和方法来操作Windows注册表。以下是一些常用的PowerShell命令和示例:1.获取注册表项的值使用Get-ItemProperty命令可以获取指定注册表路径下的键值信息。powershellCopyCode#获取注册表项的值Get-ItemProperty-Path"HKCU:\Software\Micro......
  • 在 Windows 中将 EOF 发送到 PyCharm 控制台
    我正在Windows上学习PyCharmIDE。如何将文件结束信号发送到其调试控制台?CTRL+Z不起作用。Ctrl+Z确实在PyCharm的控制台中发送EOF(文件结束)。但是,它的行为方式可能与的预期不同。在大多数控制台(例如cmd或PowerShell)中,Ctrl+Z......
  • Windows全球大范围蓝屏! CrowdStrike 安全更新问题
    本心、输入输出、结果文章目录Windows全球大范围蓝屏!CrowdStrike安全更新问题前言Windows蓝屏问题发生原因Windows全球大范围蓝屏!CrowdStrike安全更新问题编辑|简简单单Onlinezuozuo地址|https://blog.csdn.net/qq_15071263如果觉得本文对你有帮......
  • SPREAD for Windows Forms 17.0J Crack
    はじめに日頃から格別のお引き立てを賜り、厚く御礼申しあげます。SPREADforWindowsForms17.0J(以下、本製品)は、エンドユーザーにとって親しみのあるMicrosoftExcel®と互換性の高い表計算機能をアプリケーションに提供するコンポーネントです。数式や条件付き書式、チ......
  • linux 内核功能编译为模块
    在内核配置过程中,makemenuconfig工具提供了一个用户友好的图形化界面,用于选择和配置内核功能。配置选项中的<M>意味着将该功能作为模块(module)来编译。内核配置选项解释在makemenuconfig中,有三种主要的选项来配置内核功能:[]excluded:表示功能被排除在内核之外,即不会被......
  • 【Windows】操作系统之任务管理器(第一篇)
    一、操作系统简介Windows操作系统是由微软公司(Microsoft)开发的一款图形操作系统,它以其强大的功能和广泛的用户基础,成为了目前世界上用户使用最多、兼容性最强的操作系统之一。以下是关于Windows操作系统的详细介绍:一、历史与发展起源:Windows操作系统的历史可以追溯到1983年,......
  • Windows下使用QT+OpenCV完成人脸检测(获取摄像头数据进行检测)
    鱼弦:公众号【红尘灯塔】,CSDN博客专家、内容合伙人、新星导师、全栈领域优质创作者、51CTO(Top红人+专家博主)、github开源爱好者(go-zero源码二次开发、游戏后端架构https://github.com/Peakchen)Windows下使用QT+OpenCV完成人脸检测(获取摄像头数据进行检测)1.简介本文......