从此淹没在我们时间的长河|

lockly

园龄:2年3个月粉丝:25关注:3

Windows下编译Havoc

客户端编译

安装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

本文作者:lockly

本文链接:https://www.cnblogs.com/bktown/p/18314327/compile-havoc-under-windows-z25dynx

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   lockly  阅读(409)  评论(1编辑  收藏  举报
历史上的今天:
2023-07-21 Matrix-writeup
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 过客 冯泳,HAIBEAT
  2. 2 Sorry But XMASwu(吴骜)
  3. 3 每当我 ProdbyMend
Sorry But - XMASwu(吴骜)
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : XMASwu(吴骜)

作曲 : XMASwu(吴骜)

编曲 : bezimeni

你是在拜佛

还是在拜

自己的欲望

想不明白

浪费着时光

躺着担心未来

出了点故障

想要从头再来

Life goes around

夜晚用来忘却所有受的伤

灰白色的荒野不停的turn around

默剧正在上演你到底要我怎么唱

Wanna see what I've become

Wanna see how bad I am now

Wanna see when I would cry

Wanna see me on the ground

Fake friends are leaving me

Real friends are little now

无所谓

Always feeling

I’m sorry I’m sorry I’m sorry

So Sorry for my mistake

regret it

I will change

You see me always ok

I’m ok

不会累

可是全部都是假的

我装的很像吗

血总滴在我心里面

这个世界会向阳开

我的生活定会圆满

我总是迷恋膝盖触碰腹部的安全感

我怕扑空

所以在衡量

这是我短板

夜晚摸着我的脉搏

跳动速率被你传染

我打开冰箱发现刚买的罐头竟然已经坏了

也他媽不奇怪了

都没关系

他们要你站得高还望得远

可我只想让你快乐

别让自己so tired

请别着急

可为什么我总学不会自己抬起头

那些消极情绪全部Go away

我也只有梦里牵过她的手

这种感觉 dont know how to say

朋友说我 do what I wanna do

别管别人Say what you wanna say

把自己包裹

像一个刺猬

Always feeling

I’m sorry I’m sorry I’m sorry

So Sorry for my mistake

regret it

I will change

You see me always ok

I’m ok

不会累

可是全部都是假的

我装的很像吗

血总滴在我心里面

Always feeling

I’m sorry I’m sorry I’m sorry

So Sorry for my mistake

regret it

I will change

You see me always ok

I’m ok

不会累

可是全部都是假的

我装的很像吗

血总滴在我心里面

我心里面

我心里面

和声 : 圣雨轻纱

混音 : 仔总裁

封面设计 : luoxi