2023-12-29 20:36:08 +01:00
|
|
|
cmake_minimum_required(VERSION 3.11)
|
2024-01-02 22:06:07 +01:00
|
|
|
project(
|
|
|
|
airborne
|
|
|
|
VERSION 0.1.0
|
|
|
|
DESCRIPTION "Reflective DLL injection demonstration"
|
|
|
|
LANGUAGES CXX
|
|
|
|
)
|
2023-12-29 20:36:08 +01:00
|
|
|
|
2024-01-05 20:48:20 +01:00
|
|
|
set(CMAKE_CXX_STANDARD 17)
|
|
|
|
|
2023-12-29 20:36:08 +01:00
|
|
|
if(NOT CMAKE_SYSTEM_NAME MATCHES Windows)
|
|
|
|
message(FATAL_ERROR "Use a cross compilation suitable toolchain with CMAKE_SYSTEM_NAME set to Windows")
|
|
|
|
endif()
|
|
|
|
|
2024-01-04 19:00:24 +01:00
|
|
|
# Build as Release by default
|
|
|
|
if(NOT CMAKE_BUILD_TYPE)
|
|
|
|
set(CMAKE_BUILD_TYPE Release)
|
|
|
|
endif()
|
|
|
|
|
|
|
|
include(CheckIPOSupported)
|
|
|
|
check_ipo_supported(RESULT lto_supported OUTPUT error)
|
|
|
|
|
|
|
|
# Enable LTO if supported
|
|
|
|
if(lto_supported)
|
|
|
|
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE)
|
|
|
|
else()
|
|
|
|
message(WARNING "LTO is not supported: ${error}")
|
|
|
|
endif()
|
|
|
|
|
2023-12-29 20:36:08 +01:00
|
|
|
if(NOT MSVC)
|
2024-01-04 19:00:24 +01:00
|
|
|
add_compile_options("-Wall" "-Wextra" "-Os")
|
|
|
|
set(CMAKE_EXE_LINKED_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -s")
|
2023-12-29 20:36:08 +01:00
|
|
|
else()
|
2024-01-04 19:00:24 +01:00
|
|
|
add_compile_options("/W4" "/WX" "/O1" "/GL")
|
|
|
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /INCREMENTAL:NO /OPT:REF /OPT:ICF /PDBSTRIPPED")
|
|
|
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /INCREMENTAL:NO /OPT:REF /OPT:ICF /PDBSTRIPPED")
|
2023-12-29 20:36:08 +01:00
|
|
|
endif()
|
|
|
|
|
2024-01-05 20:48:20 +01:00
|
|
|
# *) Shared modules
|
|
|
|
add_library(shared STATIC shared/crypto.cpp shared/crypto.hpp shared/futils.cpp shared/futils.hpp)
|
|
|
|
|
2023-12-29 20:36:08 +01:00
|
|
|
# *) Reflective loader (DLL)
|
2024-01-03 14:33:07 +01:00
|
|
|
add_library(loader SHARED reflective_loader/loader.cpp reflective_loader/loader.hpp)
|
2024-01-05 20:48:20 +01:00
|
|
|
target_link_libraries(loader PRIVATE shared)
|
2023-12-29 20:36:08 +01:00
|
|
|
|
|
|
|
# *) Payload (DLL)
|
2024-01-02 22:06:07 +01:00
|
|
|
add_library(payload SHARED payload/payload.cpp)
|
2023-12-29 20:36:08 +01:00
|
|
|
|
2024-01-03 20:01:26 +01:00
|
|
|
# *) Shellcode generator (EXE)
|
|
|
|
add_executable(generator generator/generator.cpp generator/generator.hpp)
|
2024-01-05 20:48:20 +01:00
|
|
|
target_link_libraries(generator PRIVATE shared)
|
2024-01-03 20:01:26 +01:00
|
|
|
|
2023-12-29 20:36:08 +01:00
|
|
|
# *) Injector (EXE)
|
2024-01-02 22:06:07 +01:00
|
|
|
add_executable(injector injector/injector.cpp)
|
2024-01-05 20:48:20 +01:00
|
|
|
target_link_libraries(injector PRIVATE shared)
|
2024-01-04 19:00:24 +01:00
|
|
|
|
|
|
|
if(NOT MSVC)
|
|
|
|
foreach(target loader payload generator injector)
|
|
|
|
add_custom_command(TARGET ${target} POST_BUILD COMMAND ${CMAKE_STRIP} $<TARGET_FILE:${target}>) # Strip binaries
|
|
|
|
endforeach()
|
|
|
|
endif()
|