mirror of
https://github.com/ndeadly/MissionControl
synced 2024-11-22 20:33:07 +00:00
Begin implementing experimental mitm for bluetooth service
This commit is contained in:
parent
ef48b1e7dd
commit
859b13d3a7
7 changed files with 130 additions and 0 deletions
10
btdrv-mitm/source/btdrv_mitm_service.cpp
Normal file
10
btdrv-mitm/source/btdrv_mitm_service.cpp
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
#include "btdrv_mitm_service.hpp"
|
||||||
|
#include "btdrv_shim.h"
|
||||||
|
|
||||||
|
namespace btdrv::mitm {
|
||||||
|
|
||||||
|
Result InitializeBluetooth(ams::os::SystemEvent *event) {
|
||||||
|
return btdrvInitializeBluetoothFwd(this->forward_service.get(), );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
32
btdrv-mitm/source/btdrv_mitm_service.hpp
Normal file
32
btdrv-mitm/source/btdrv_mitm_service.hpp
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
#pragma once
|
||||||
|
#include <stratosphere.hpp>
|
||||||
|
|
||||||
|
|
||||||
|
namespace btdrv::mitm {
|
||||||
|
|
||||||
|
class BtdrvMitmService : public sf::IMitmServiceObject {
|
||||||
|
|
||||||
|
private:
|
||||||
|
enum class CommandId {
|
||||||
|
InitializeBluetooth = 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
public:
|
||||||
|
static bool ShouldMitm(const sm::MitmProcessInfo &client_info) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
SF_MITM_SERVICE_OBJECT_CTOR(BtdrvMitmService) { /* ... */ }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
Result InitializeBluetooth(ams::os::SystemEvent *event);
|
||||||
|
|
||||||
|
public:
|
||||||
|
DEFINE_SERVICE_DISPATCH_TABLE {
|
||||||
|
MAKE_SERVICE_COMMAND_META(InitializeBluetooth),
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
12
btdrv-mitm/source/btdrv_shim.c
Normal file
12
btdrv-mitm/source/btdrv_shim.c
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
#include "btdrv_shim.h"
|
||||||
|
#include <stratosphere/sf/sf_mitm_dispatch.h>
|
||||||
|
|
||||||
|
/* Command forwarders. */
|
||||||
|
Result btdrvInitializeBluetoothFwd(Service* s, Event *event) {
|
||||||
|
Handle handle = INVALID_HANDLE;
|
||||||
|
|
||||||
|
return serviceMitmDispatch(s, 1,
|
||||||
|
.out_handle_attrs = { SfOutHandleAttr_HipcCopy },
|
||||||
|
.out_handles = &handle,
|
||||||
|
);
|
||||||
|
}
|
13
btdrv-mitm/source/btdrv_shim.h
Normal file
13
btdrv-mitm/source/btdrv_shim.h
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
#pragma once
|
||||||
|
#include <switch.h>
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Command forwarders. */
|
||||||
|
Result btdrvInitializeBluetoothFwd(Service* s, Event *event);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
22
btdrv-mitm/source/btdrvmitm_module.cpp
Normal file
22
btdrv-mitm/source/btdrvmitm_module.cpp
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
#include "btdrvmitm_module.hpp"
|
||||||
|
#include "btdrv_mitm_service.hpp"
|
||||||
|
|
||||||
|
|
||||||
|
namespace btdrv::mitm {
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
constexpr sm::ServiceName MitmServiceName = sm::ServiceName::Encode("btdrv");
|
||||||
|
|
||||||
|
struct ServerOptions {
|
||||||
|
static constexpr size_t PointerBufferSize = 0x200;
|
||||||
|
static constexpr size_t MaxDomains = 0;
|
||||||
|
static constexpr size_t MaxDomainObjects = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
constexpr size_t MaxServers = 1;
|
||||||
|
sf::hipc::ServerManager<MaxServers, ServerOptions> g_server_manager;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
8
btdrv-mitm/source/btdrvmitm_module.hpp
Normal file
8
btdrv-mitm/source/btdrvmitm_module.hpp
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
#pragma once
|
||||||
|
#include <stratosphere.hpp>
|
||||||
|
|
||||||
|
namespace btdrv::mitm {
|
||||||
|
|
||||||
|
DEFINE_MITM_MODULE_CLASS(0x8000, AMS_GET_SYSTEM_THREAD_PRIORITY(btdrv, IpcServer));
|
||||||
|
|
||||||
|
}
|
33
btdrv-mitm/source/main.cpp
Normal file
33
btdrv-mitm/source/main.cpp
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
|
||||||
|
extern u32 __start__;
|
||||||
|
u32 __nx_applet_type = AppletType_None;
|
||||||
|
u32 __nx_fs_num_sessions = 1;
|
||||||
|
|
||||||
|
|
||||||
|
void __libnx_initheap(void) {
|
||||||
|
void* addr = nx_inner_heap;
|
||||||
|
size_t size = nx_inner_heap_size;
|
||||||
|
|
||||||
|
extern char* fake_heap_start;
|
||||||
|
extern char* fake_heap_end;
|
||||||
|
|
||||||
|
fake_heap_start = (char*)addr;
|
||||||
|
fake_heap_end = (char*)addr + size;
|
||||||
|
}
|
||||||
|
|
||||||
|
void __appInit(void) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void __appExit(void) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char **argv) {
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in a new issue