From d3713112d3e8fc64e0343c7d66a3f9a03c18b13c Mon Sep 17 00:00:00 2001 From: Bemani Witch Date: Fri, 15 Jul 2022 00:19:58 +0200 Subject: [PATCH] autogenerate card on first boot --- OpenBanapass/OpenBanapass.vcxproj | 4 ++- OpenBanapass/banapass.cpp | 56 +++++++++++++++++++++++++++++-- 2 files changed, 57 insertions(+), 3 deletions(-) diff --git a/OpenBanapass/OpenBanapass.vcxproj b/OpenBanapass/OpenBanapass.vcxproj index 33874e2..60b4dd2 100644 --- a/OpenBanapass/OpenBanapass.vcxproj +++ b/OpenBanapass/OpenBanapass.vcxproj @@ -42,7 +42,7 @@ DynamicLibrary true - v143 + v142 Unicode @@ -124,6 +124,8 @@ true NotUsing pch.h + /permissive %(AdditionalOptions) + stdcpp17 Windows diff --git a/OpenBanapass/banapass.cpp b/OpenBanapass/banapass.cpp index 5895867..fffe61f 100644 --- a/OpenBanapass/banapass.cpp +++ b/OpenBanapass/banapass.cpp @@ -1,16 +1,68 @@ #include "banapass.h" #include "log.h" +#include #include #include #include #define BANA_API_VERSION "Ver 1.6.0" +void randomHex(char str[], int length) +{ + //hexadecimal characters + char hexCharacterTable[] = { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' }; + srand(time(NULL)); + int i; + for (i = 0; i < length; i++) + { + str[i] = hexCharacterTable[rand() % 16]; + } + str[length] = 0; +} + +void randomNumberString(char str[], int length) +{ + char CharacterTable[] = { '0','1','2','3','4','5','6','7','8','9'}; + srand(time(NULL)); + int i; + for (i = 0; i < length; i++) + { + str[i] = CharacterTable[rand() % 10]; + } + str[length] = 0; +} + +std::string getProfileString(LPCSTR name, LPCSTR key, LPCSTR def, LPCSTR filename) +{ + char temp[1024]; + int result = GetPrivateProfileStringA(name, key, def, temp, sizeof(temp), filename); + return std::string(temp, result); +} + +void createCard() { + if (std::filesystem::exists(".\\card.ini")) { + log("Card.ini found!\n"); + } + else { + //std::string accessCode = "30764352518498791337"; + //std::string chipId = "7F5C9744F111111143262C3300040610"; + char generatedAccessCode[33] = "00000000000000000000000000000000"; + randomHex(generatedAccessCode, 32); + WritePrivateProfileStringA("card", "accessCode", generatedAccessCode, ".\\card.ini"); + char generatedChipId[21] = "00000000000000000000"; + randomNumberString(generatedChipId, 20); + WritePrivateProfileStringA("card", "chipId", generatedChipId, ".\\card.ini"); + log("New card generated\n"); + } +} + + extern "C" { ULONGLONG BngRwAttach(UINT a1, char* a2, int a3, int a4, void* callback, long a6) { log("BngRwAttach()\n"); + createCard(); // Do something with the callback perhaps? // Idk what it does return 1; @@ -185,8 +237,8 @@ int BngRwReqWaitTouch(UINT a, int maxIntSomehow, UINT c, void (*callback)(int, i 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - std::string accessCode = "30764352518498791337"; - std::string chipId = "7F5C9744F111111143262C3300040610"; + std::string accessCode = getProfileString("card", "accessCode", "30764352518498791337", ".\\card.ini"); + std::string chipId = getProfileString("card", "chipId", "7F5C9744F111111143262C3300040610", ".\\card.ini"); memcpy(rawCardData + 0x50, accessCode.c_str(), accessCode.size() + 1); memcpy(rawCardData + 0x2C, chipId.c_str(), chipId.size() + 1);