Fix card, Add qr patch
This commit is contained in:
parent
3f03e9bf5e
commit
2903551af5
21
Makefile
21
Makefile
@ -1,12 +1,14 @@
|
||||
OUT = TAL
|
||||
CC := clang
|
||||
CC := x86_64-w64-mingw32-gcc
|
||||
CXX := x86_64-w64-mingw32-g++
|
||||
TARGET := x86_64-pc-windows-gnu
|
||||
SDL_TARGET := x86_64-w64-mingw32
|
||||
SRC = src/dllmain.c src/helpers.c src/poll.c src/boilerplate.c tomlc99/toml.c minhook/src/buffer.c minhook/src/hook.c minhook/src/trampoline.c minhook/src/hde/hde32.c minhook/src/hde/hde64.c
|
||||
OBJ = ${addprefix ${TARGET}/,${SRC:.c=.o}}
|
||||
CFLAGS = -std=c99 -Iminhook/include -ISDL/${SDL_TARGET}/include -ISDL/include -Itomlc99 -Wall -Ofast -target ${TARGET} -DWIN32_LEAN_AND_MEAN -D_WIN32_WINNT=_WIN32_WINNT_WIN7
|
||||
SRC = src/dllmain.c src/helpers.c src/poll.c src/boilerplate.c src/card.cpp tomlc99/toml.c minhook/src/buffer.c minhook/src/hook.c minhook/src/trampoline.c minhook/src/hde/hde32.c minhook/src/hde/hde64.c
|
||||
OBJ = ${addprefix ${TARGET}/,${subst .cpp,.o,${SRC:.c=.o}}}
|
||||
CFLAGS = -std=c99 -Iminhook/include -ISDL/${SDL_TARGET}/include -ISDL/include -Itomlc99 -Wall -Ofast -DWIN32_LEAN_AND_MEAN -D_WIN32_WINNT=_WIN32_WINNT_WIN7
|
||||
CXXFLAGS = -std=c++20 -Iminhook/include -ISDL/${SDL_TARGET}/include -ISDL/include -Itomlc99 -Wall -Ofast -DWIN32_LEAN_AND_MEAN -D_WIN32_WINNT=_WIN32_WINNT_WIN7
|
||||
LDFLAGS := -shared -static -static-libgcc -s
|
||||
LIBS := SDL/${SDL_TARGET}/build/.libs/libSDL2.a SDL/${SDL_TARGET}/build/.libs/libSDL2main.a -lmingw32 -luuid -lgdi32 -lwinmm -limm32 -lole32 -loleaut32 -lsetupapi -lversion
|
||||
LIBS := SDL/${SDL_TARGET}/build/.libs/libSDL2.a SDL/${SDL_TARGET}/build/.libs/libSDL2main.a -lmingw32 -luuid -lgdi32 -lwinmm -limm32 -lole32 -loleaut32 -lsetupapi -lversion -pthread
|
||||
DEPS = SDL
|
||||
|
||||
all: options ${OUT}
|
||||
@ -26,18 +28,21 @@ options:
|
||||
${TARGET}/%.o: %.c
|
||||
@echo BUILD $@
|
||||
@${CC} -c ${CFLAGS} $< -o $@
|
||||
@clang-tidy -header-filter=.* -system-headers $< -- ${CFLAGS}
|
||||
|
||||
${TARGET}/%.o: %.cpp
|
||||
@echo BUILD $@
|
||||
@${CXX} -c ${CXXFLAGS} $< -o $@
|
||||
|
||||
.PHONY: SDL
|
||||
SDL:
|
||||
@mkdir -p SDL/${SDL_TARGET}
|
||||
@cd SDL/${SDL_TARGET} && ../configure --build=x86_64-linux-gnu --host=${SDL_TARGET} --disable-sdl2-config --disable-shared --enable-assertions=release --enable-directx --enable-haptic
|
||||
@#cd SDL/${SDL_TARGET} && ../configure --build=x86_64-linux-gnu --host=${SDL_TARGET} --disable-sdl2-config --disable-shared --enable-assertions=release --enable-directx --enable-haptic
|
||||
@make -s -C SDL/${SDL_TARGET}
|
||||
|
||||
.PHONY: ${OUT}
|
||||
${OUT}: dirs ${DEPS} ${OBJ}
|
||||
@echo LINK $@
|
||||
@${CC} ${CFLAGS} -o ${TARGET}/$@.dll ${OBJ} ${LDFLAGS} ${LIBS}
|
||||
@${CXX} ${CXXFLAGS} -o ${TARGET}/$@.dll ${OBJ} ${LDFLAGS} ${LIBS}
|
||||
|
||||
.PHONY: fmt
|
||||
fmt:
|
||||
|
@ -1,6 +1,13 @@
|
||||
#define BASE_ADDRESS 0x140000000
|
||||
#include "helpers.h"
|
||||
|
||||
HOOK_DYNAMIC (u8, __fastcall, qrVtable1, u64 a1) { return 1; }
|
||||
HOOK_DYNAMIC (u8, __fastcall, qrReadFromCOM1, u64 a1) {
|
||||
*(u32 *)(a1 + 40) = 1;
|
||||
*(u32 *)(a1 + 16) = 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
i32 __stdcall DllMain (HMODULE mod, DWORD cause, void *ctx) {
|
||||
if (cause != DLL_PROCESS_ATTACH) return 1;
|
||||
|
||||
@ -28,5 +35,8 @@ i32 __stdcall DllMain (HMODULE mod, DWORD cause, void *ctx) {
|
||||
WRITE_MEMORY (amHandle + 0x148AF, u8, 0xEB);
|
||||
WRITE_MEMORY (amHandle + 0x14A1A, u8, 0xEB);
|
||||
|
||||
INSTALL_HOOK_DYNAMIC (qrVtable1, amHandle + 0x1BA00);
|
||||
INSTALL_HOOK_DYNAMIC (qrReadFromCOM1, amHandle + 0x1BC20);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
33
src/card.cpp
Normal file
33
src/card.cpp
Normal file
@ -0,0 +1,33 @@
|
||||
#include "card.h"
|
||||
#include <thread>
|
||||
|
||||
using namespace std::chrono_literals;
|
||||
|
||||
void
|
||||
attach (callbackAttach callback, i32 *data) {
|
||||
std::thread t ([callback, data] () {
|
||||
std::this_thread::sleep_for (250ms);
|
||||
callback (0, 0, data);
|
||||
});
|
||||
t.detach ();
|
||||
}
|
||||
|
||||
void
|
||||
touch (callbackTouch callback, u64 data) {
|
||||
std::thread t ([callback, data] () {
|
||||
std::this_thread::sleep_for (250ms);
|
||||
u8 cardData[168]
|
||||
= { 0x01, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x2E, 0x58, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x5C, 0x97, 0x44, 0xF0, 0x88, 0x04, 0x00, 0x43, 0x26, 0x2C, 0x33, 0x00, 0x04,
|
||||
0x06, 0x10, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
|
||||
0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x30,
|
||||
0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x42, 0x47, 0x49, 0x43, 0x36,
|
||||
0x00, 0x00, 0xFA, 0xE9, 0x69, 0x00, 0xF6, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
memcpy (cardData + 0x2C, "7F5C9744F111111143262C3300040610", 33);
|
||||
memcpy (cardData + 0x50, "30764352518498791337", 21);
|
||||
callback (0, 0, cardData, data);
|
||||
});
|
||||
t.detach ();
|
||||
}
|
10
src/card.h
Normal file
10
src/card.h
Normal file
@ -0,0 +1,10 @@
|
||||
#include "helpers.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
void attach (callbackAttach callback, i32 *data);
|
||||
void touch (callbackTouch callback, u64 data);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
@ -1,14 +1,13 @@
|
||||
#include "boilerplate.h"
|
||||
#include "card.h"
|
||||
#include "helpers.h"
|
||||
#include "poll.h"
|
||||
#include <time.h>
|
||||
|
||||
bool testEnabled = false;
|
||||
u16 drumMax = 0xFFFF;
|
||||
u16 drumMin = 0xFFFF;
|
||||
|
||||
typedef i32 (*callbackAttach) (i32, i32, i32 *);
|
||||
typedef void (*callbackTouch) (i32, i32, u8[168], u64);
|
||||
|
||||
#define ON_HIT(bind) IsButtonTapped (bind) ? drumMax == drumMin ? drumMax : (u16)(rand () % drumMax + drumMin) : 0
|
||||
|
||||
Keybindings EXIT = { .keycodes = { VK_ESCAPE } };
|
||||
@ -89,11 +88,6 @@ u16 __fastcall bnusio_GetCoin (i32 a1) {
|
||||
return coin_count;
|
||||
}
|
||||
|
||||
callbackAttach attach;
|
||||
i32 *attachData;
|
||||
callbackTouch touch;
|
||||
u64 touchData;
|
||||
|
||||
u32 __stdcall bnusio_GetSwIn () {
|
||||
u32 sw = 0;
|
||||
sw |= (u32)testEnabled << 7;
|
||||
@ -101,39 +95,17 @@ u32 __stdcall bnusio_GetSwIn () {
|
||||
sw |= (u32)IsButtonDown (DEBUG_DOWN) << 12;
|
||||
sw |= (u32)IsButtonDown (DEBUG_UP) << 13;
|
||||
sw |= (u32)IsButtonDown (SERVICE) << 14;
|
||||
|
||||
if (attach != 0) {
|
||||
attach (0, 0, attachData);
|
||||
attach = 0;
|
||||
}
|
||||
if (touch != 0) {
|
||||
u8 data[168]
|
||||
= { 0x01, 0x01, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x92, 0x2E, 0x58, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0x5C, 0x97, 0x44, 0xF0, 0x88, 0x04, 0x00, 0x43, 0x26, 0x2C, 0x33, 0x00, 0x04,
|
||||
0x06, 0x10, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
|
||||
0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x30, 0x30,
|
||||
0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4E, 0x42, 0x47, 0x49, 0x43, 0x36,
|
||||
0x00, 0x00, 0xFA, 0xE9, 0x69, 0x00, 0xF6, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
|
||||
memcpy (data + 0x2C, "7F5C9744F111111143262C3300040610", 34);
|
||||
memcpy (data + 0x50, "30764352518498791337", 22);
|
||||
touch (0, 0, data, touchData);
|
||||
touch = 0;
|
||||
}
|
||||
return sw;
|
||||
}
|
||||
|
||||
HOOK_DYNAMIC (u64, __stdcall, bngrw_attach, i32 a1, char *a2, i32 a3, i32 a4, callbackAttach callback, i32 *a6) {
|
||||
attach = callback;
|
||||
attachData = a6;
|
||||
attach (callback, a6);
|
||||
return 1;
|
||||
}
|
||||
|
||||
HOOK_DYNAMIC (i32, __stdcall, bngrw_reqWaitTouch, u32 a1, i32 a2, u32 a3, callbackTouch callback, u64 a5) {
|
||||
if (!IsButtonDown (CARD_INSERT)) return -1;
|
||||
touch = callback;
|
||||
touchData = a5;
|
||||
touch (callback, a5);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -14,6 +14,8 @@ typedef uint8_t u8;
|
||||
typedef uint16_t u16;
|
||||
typedef uint32_t u32;
|
||||
typedef uint64_t u64;
|
||||
typedef i32 (*callbackAttach) (i32, i32, i32 *);
|
||||
typedef void (*callbackTouch) (i32, i32, u8[168], u64);
|
||||
|
||||
#ifdef BASE_ADDRESS
|
||||
#define ASLR(address, handle) ((u64)handle + (u64)address - (u64)BASE_ADDRESS)
|
||||
|
Loading…
x
Reference in New Issue
Block a user