gc boots to title (no io)

This commit is contained in:
Hay1tsme
2026-03-14 01:12:10 -04:00
parent 5c39fbccd4
commit 7e7197b108
15 changed files with 114 additions and 36 deletions
+1 -1
View File
@@ -36,7 +36,7 @@ $(BUILD_DIR_ZIP)/gc.zip:
$(DIST_DIR)/gc/taitools.ini \
$(DIST_DIR)/gc/start.bat \
$(BUILD_DIR_ZIP)/gc
$(V)cp pki/client.p12 \
$(V)cp pki/client_gc.p12 \
$(BUILD_DIR_ZIP)/gc
$(V)strip $(BUILD_DIR_ZIP)/gc/*.{exe,dll}
$(V)cd $(BUILD_DIR_ZIP)/gc ; zip -r ../gc.zip *
+8 -7
View File
@@ -18,7 +18,7 @@
// JVS card reader, A/B/C vairants
static const uint8_t dongle_ident[] = "TAITO CORP.;RFID CTRL P.C.B.;Ver1.11;";
static const uint8_t dongle_ident[] = "TAITO CORP.;SECURITY PCB;Ver1.00;";
static const uint8_t card_uid[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x00 };
static const uint8_t card_id[] = {
0x01, 0x2E, 0x4C, 0xE4, 0x00, 0x01, 0x00, 0x01,
@@ -80,8 +80,8 @@ void dongle_init(
dongle->jvs.next = next;
dongle->jvs.transact = dongle_transact;
dongle->jvs.sense = dongle_sense;
dongle->jvs.sense_out = false;
dongle->addr = 0x80;
dongle->jvs.sense_out = true;
dongle->addr = 0xFF;
dongle->state = IDLE;
dongle->ops_ctx = ops_ctx;
}
@@ -118,7 +118,7 @@ static bool dongle_sense(struct jvs_node *node)
dongle = CONTAINING_RECORD(node, struct dongle, jvs);
return dongle->addr == 0xFF;
return dongle->jvs.sense_out;
}
static HRESULT dongle_cmd(
@@ -190,7 +190,7 @@ static HRESULT dongle_cmd_reset(struct dongle *dongle, struct const_iobuf *req_b
dprintf("Dongle: Reset (param %02x)\n", req.unknown);
dongle->addr = 0xFF;
dongle->jvs.sense_out = false;
dongle->jvs.sense_out = true;
/* No ack for this since it really is addressed to everybody */
@@ -213,15 +213,16 @@ static HRESULT dongle_cmd_assign_addr(
}
sense = jvs_node_sense(dongle->jvs.next);
dprintf("Dongle: Assign addr %02x sense %i\n", req.addr, sense);
if (sense) {
/* That address is for somebody else */
return S_OK;
}
dprintf("Dongle: Assign addr %02x sense %i\n", req.addr, sense);
dongle->addr = req.addr;
dongle->jvs.sense_out = true;
dongle->jvs.sense_out = false;
return iobuf_write_8(resp_buf, 0x01);
}
+5 -4
View File
@@ -118,7 +118,7 @@ static bool k92x0249_sense(struct jvs_node *node)
k92x0249 = CONTAINING_RECORD(node, struct k92x0249, jvs);
return k92x0249->addr == 0xFF;
return k92x0249->jvs.sense_out;
}
static HRESULT k92x0249_cmd(
@@ -190,7 +190,7 @@ static HRESULT k92x0249_cmd_reset(struct k92x0249 *k92x0249, struct const_iobuf
dprintf("K92X0249: Reset (param %02x)\n", req.unknown);
k92x0249->addr = 0xFF;
k92x0249->jvs.sense_out = false;
k92x0249->jvs.sense_out = true;
/* No ack for this since it really is addressed to everybody */
@@ -213,15 +213,16 @@ static HRESULT k92x0249_cmd_assign_addr(
}
sense = jvs_node_sense(k92x0249->jvs.next);
dprintf("K92X0249: Assign addr %02x sense %i\n", req.addr, sense);
if (sense) {
/* That address is for somebody else */
return S_OK;
}
dprintf("K92X0249: Assign addr %02x sense %i\n", req.addr, sense);
k92x0249->addr = req.addr;
k92x0249->jvs.sense_out = true;
k92x0249->jvs.sense_out = false;
return iobuf_write_8(resp_buf, 0x01);
}
+1 -1
View File
@@ -8,7 +8,7 @@ enable=1
default=localhost
[cert]
path=client.p12
path=client_gc.p12
[reader]
card_serial=7020392000000000
+6 -3
View File
@@ -22,9 +22,12 @@ HRESULT gc_reader_init(struct jvs_node **out)
dprintf("Gc Nesica Reader: Init\n");
dongle_init(&gc_dongle, NULL, NULL);
k92x0249_init(&gc_jvs_reader, dongle_to_jvs_node(&gc_dongle), NULL);
*out = k92x0249_to_jvs_node(&gc_jvs_reader);
k92x0249_init(&gc_jvs_reader, NULL, NULL);
//dongle_init(&gc_dongle, NULL, NULL);
dongle_init(&gc_dongle, k92x0249_to_jvs_node(&gc_jvs_reader), NULL);
//k92x0249_init(&gc_jvs_reader, dongle_to_jvs_node(&gc_dongle), NULL);
//*out = k92x0249_to_jvs_node(&gc_jvs_reader);
*out = dongle_to_jvs_node(&gc_dongle);
return S_OK;
}
+4 -6
View File
@@ -70,7 +70,7 @@ static int WSAAPI hook_getaddrinfo(
const ADDRINFOA *pHints,
ADDRINFOA **ppResult);
static BOOL my_WinHttpCrackUrl(
static BOOL WINAPI my_WinHttpCrackUrl(
LPCWSTR pwszUrl,
DWORD dwUrlLength,
DWORD dwFlags,
@@ -105,7 +105,7 @@ static int (WSAAPI *next_getaddrinfo)(
const ADDRINFOA *pHints,
ADDRINFOA **ppResult);
static BOOL (*next_WinHttpCrackUrl)(
static BOOL (WINAPI *next_WinHttpCrackUrl)(
LPCWSTR pwszUrl,
DWORD dwUrlLength,
DWORD dwFlags,
@@ -542,7 +542,7 @@ bool match_domain(const wchar_t* target, const wchar_t* pattern) {
return pattern[pattern_ptr_index] == '\0' && (proto[target_ptr_index] == '\0' || proto[target_ptr_index] == '/');
}
static BOOL my_WinHttpCrackUrl(
static BOOL WINAPI my_WinHttpCrackUrl(
LPCWSTR pwszUrl,
DWORD dwUrlLength,
DWORD dwFlags,
@@ -550,9 +550,8 @@ static BOOL my_WinHttpCrackUrl(
{
const struct dns_hook_entry *pos;
size_t i;
EnterCriticalSection(&dns_hook_lock);
//WinHttpCrackUrl()
for (i = 0 ; i < dns_hook_nentries ; i++) {
pos = &dns_hook_entries[i];
@@ -605,5 +604,4 @@ static BOOL my_WinHttpCrackUrl(
dwFlags,
lpUrlComponents
);
}
+9 -4
View File
@@ -113,7 +113,7 @@ static HRESULT jvs_handle_irp_locked(struct irp *irp)
case IOCTL_SERIAL_GET_MODEMSTATUS:
//jvs_uart.cts_on = jvs_root->sense_out;
//dprintf("JVS: Set CTS to %X\n", jvs_root->sense_out);
jvs_uart.cts_on = jvs_root->sense_out;
jvs_uart.cts_on = !jvs_root->sense_out; // ??
break;
case IOCTL_SERIAL_GET_COMMSTATUS:
//dprintf("JVS: Set cbInQue to %d\n", (int)tmp.pos);
@@ -123,12 +123,18 @@ static HRESULT jvs_handle_irp_locked(struct irp *irp)
}
if (irp->op == IRP_OP_READ) {
if (irp->read.nbytes > 1) {
if (irp->read.nbytes == 1) {
iobuf_write_8(&irp->read, 1);
return S_OK;
}
if (irp->read.nbytes >= tmp.pos) {
//dprintf("JVS: Readable buffer is %d / %d\n", (int)irp->read.nbytes, (int)tmp.pos);
iobuf_write(&irp->read, tmp.bytes, tmp.pos);
tmp.pos = 0;
} else {
dprintf("JVS: Readable buffer is 1!\n");
dprintf("JVS: READ need %d bytes but only have room for %d\n", tmp.pos, irp->read.nbytes);
iobuf_write(&irp->read, tmp.bytes, irp->read.nbytes);
tmp.pos -= irp->read.nbytes;
}
}
@@ -138,7 +144,6 @@ static HRESULT jvs_handle_irp_locked(struct irp *irp)
return hr;
}
//jvs_bus_transact(jvs_root, irp->write.bytes, irp->write.nbytes, &irp->read);
jvs_bus_transact(jvs_root, irp->write.bytes, irp->write.nbytes, &tmp);
jvs_uart.written.pos = 0;
+6 -1
View File
@@ -20,7 +20,12 @@ openssl req -newkey rsa:2048 -nodes -keyout pki/client.key -out pki/client.csr -
# Generate client cert
openssl x509 -req -sha256 -days 3650 -in pki/client.csr -CA pki/nesys.cer -CAkey pki/nesys.key -out pki/client.cer -set_serial 0
# Package as a p12 file for Theatrhythm
# Package as a p12 file
openssl pkcs12 -export -out pki/client.p12 -inkey pki/client.key -in pki/client.cer
# Generate GC client certs
openssl req -newkey rsa:2048 -nodes -keyout pki/client_gc.key -out pki/client_gc.csr -subj "/C=JP/ST=A/L=A/CN=PREMIUM"
openssl x509 -req -sha256 -days 3650 -in pki/client_gc.csr -CA pki/ca.cer -CAkey pki/ca.key -out pki/client_gc.cer -set_serial 0
openssl pkcs12 -export -out pki/client_gc.p12 -inkey pki/client_gc.key -in pki/client_gc.cer
rm pki/*.csr
+1
View File
@@ -113,6 +113,7 @@ HRESULT jvs_frame_encode(
checksum = 0;
if (dest->pos + 1 > dest->nbytes) {
dprintf("JVS Frame: Require %d bytes but only have space for %d\n", dest->pos + 1, dest->nbytes);
return HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
}
+6 -6
View File
@@ -47,15 +47,15 @@ void jvs_crack_request(
return;
}
#if 0
dprintf("Decoded request:\n");
dump_iobuf(&decode);
#endif
if (req_bytes[0] != jvs_addr && req_bytes[0] != 0xFF) {
if (req_bytes[0] != jvs_addr && jvs_addr != 0xFF) {
return;
}
#if 0
dprintf("Decoded request checked by %02X:\n", jvs_addr);
dump_iobuf(&decode);
#endif
iobuf_flip(&segments, &decode);
segments.pos = 2;
+20
View File
@@ -0,0 +1,20 @@
-----BEGIN CERTIFICATE-----
MIIDOzCCAiOgAwIBAgIBADANBgkqhkiG9w0BAQsFADBHMQswCQYDVQQGEwJKUDEK
MAgGA1UECAwBQTEKMAgGA1UEBwwBQTEgMB4GA1UEAwwXVGFpdG8gQXJjYWRlIE1h
Y2hpbmUgQ0EwHhcNMjYwMzE0MDI0NjU5WhcNMzYwMzExMDI0NjU5WjA3MQswCQYD
VQQGEwJKUDEKMAgGA1UECAwBQTEKMAgGA1UEBwwBQTEQMA4GA1UEAwwHUFJFTUlV
TTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALQGviNLFLOLc2U5uRBC
vVtxuF83UhkX81crmPJssr/9E/97P/XetAhYJklexKlGYvr/Y73hA4oVQKFFk2Vr
ASjXYjF8MCGgyXh1ShZ6V43kDjs+sWxoAAzsEoG/PhMfrxQHmgTpRkV/MiHLIoAa
4dhuYYrXRZpZjCiIiqC4lctDmbs0o0ubVPP0wp2Y47JCZd+FEwacnh1GN6ns3juv
LX2UUPTD4rcm5LQ1GOPUCzLPWxe5qRsQkX2C2wA3ZNLdkViEZEmwgQktK/9FG6vP
PfbmlS3gnQSm2SEBHhPE0y7DzS5mE3PhteWEHrOOpVkEZlzXkn7oZAnT2LiHL1Bw
v2UCAwEAAaNCMEAwHQYDVR0OBBYEFKxkTfZiZnWpIQttx24gX+3KB04PMB8GA1Ud
IwQYMBaAFMbnTayEU9K2mel1yhpgjhAZnIeMMA0GCSqGSIb3DQEBCwUAA4IBAQCe
jwRFCcSYro6aaKSzNkArQhKyqJ7hYxkPWHFxEaS0lZFQVr2oxWY1WQa6C1fHEaFh
g5MzD3kKCAvYdVb6Pi2nlLP5ZyO/Oy1d95zaI7uEosKyGNVAaFXN22O43CkrkX2P
19YLTcI0uCREngMCSr+LPm/7L9JWECxSAMCG6OxqP6mmzFS2x3Mwl+tVQqLk8Xsr
o3bEeXy3egvFBKcxwaMrtpaErunrqNAWMbY5U1pA4W19yUIr9XVEyPwgbApUrxfi
Ze+51WI/QG7XQ4m+TB6JDyt18eZGcu4vSnJX3mxp4vvZujDixyUSmvkRik4EKVpK
smkSLdTzGTArSH81Ojkl
-----END CERTIFICATE-----
+16
View File
@@ -0,0 +1,16 @@
-----BEGIN CERTIFICATE REQUEST-----
MIICfDCCAWQCAQAwNzELMAkGA1UEBhMCSlAxCjAIBgNVBAgMAUExCjAIBgNVBAcM
AUExEDAOBgNVBAMMB1BSRU1JVU0wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
AoIBAQC0Br4jSxSzi3NlObkQQr1bcbhfN1IZF/NXK5jybLK//RP/ez/13rQIWCZJ
XsSpRmL6/2O94QOKFUChRZNlawEo12IxfDAhoMl4dUoWeleN5A47PrFsaAAM7BKB
vz4TH68UB5oE6UZFfzIhyyKAGuHYbmGK10WaWYwoiIqguJXLQ5m7NKNLm1Tz9MKd
mOOyQmXfhRMGnJ4dRjep7N47ry19lFD0w+K3JuS0NRjj1Asyz1sXuakbEJF9gtsA
N2TS3ZFYhGRJsIEJLSv/RRurzz325pUt4J0EptkhAR4TxNMuw80uZhNz4bXlhB6z
jqVZBGZc15J+6GQJ09i4hy9QcL9lAgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAQEA
gFeA40KfDp9nmEVNi6jL3QAnpMH7vsS+LkuqR9ZhhRX/GWyGxFdg5bLsEPs44X+z
U2PbR5oXm8EvoxkwsjPdO4xHsGttQTzWWhDdsAYdktK0SYAjDE63ixt5ZkS3OtWU
eqZgPr6aBEzvioM7OkSb74KI+0aUnAKa2ot2D1Whqvn6FN/cBUy8bZahsAe43QXj
b5uLXdQUFHMr5ebe8n0036j8IArh3jSQyy08uwWeGC0Z87FNDeTZ6u6H9VUQzmHj
sgjOe8y+V8bQX1rn5MOzhKr/bsmuoV+dGaA7L1w7yxqlKT2H3NnTi+SZhQsi9n66
BnUDXxrsywiGd4GXWs5gJw==
-----END CERTIFICATE REQUEST-----
+28
View File
@@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQC0Br4jSxSzi3Nl
ObkQQr1bcbhfN1IZF/NXK5jybLK//RP/ez/13rQIWCZJXsSpRmL6/2O94QOKFUCh
RZNlawEo12IxfDAhoMl4dUoWeleN5A47PrFsaAAM7BKBvz4TH68UB5oE6UZFfzIh
yyKAGuHYbmGK10WaWYwoiIqguJXLQ5m7NKNLm1Tz9MKdmOOyQmXfhRMGnJ4dRjep
7N47ry19lFD0w+K3JuS0NRjj1Asyz1sXuakbEJF9gtsAN2TS3ZFYhGRJsIEJLSv/
RRurzz325pUt4J0EptkhAR4TxNMuw80uZhNz4bXlhB6zjqVZBGZc15J+6GQJ09i4
hy9QcL9lAgMBAAECggEAANCuADlpDtYRD/KGtr7inh0h9VZqCgCMgsbJAsIAvjNO
aZ/8fmfDf20swTTLZavSq2nIIRY5fqDRgdlvjSxCnVV6VZiHHEPe3auESh1EM7mG
YfjK8192LpjMDafYx1vjnk7ZgO+weISWrMX/cj6M6r63NNp8L3J72rwhipBDZ1/1
SqXYx3yBa1iCwcZCpKqPwF7zwRktq5Fz9unWhaw6h09p3kUS3Bw3W1o2rCsaweFa
6G4X7iKhOH2rsKa3amrihaZCsDFLoRJkvyx7M+kIPP3qocNN/3ciOGhy4w2CA7fZ
QFfsx8XAAIgXVGfUS/4/I9MPlcdHur6z5p2snBBQgQKBgQDb67uAyoKGg2zHAwXv
A69bqM+g3m/CpzMi0GeYON91WO/yqN6NU6uMEyQ7tPfsRI9XTA+rOxxpZBFQyocZ
AKepWwf7uZUwEZSDoxBYvcHayksLNF3lIQpQZQUBkikabVa0SVR6ihzIuHOJ3nob
Q7qWyGG3VjbtyV9BAWUUPlcBgQKBgQDRj4P7Lj/si8QQ7Lq1xQsF9WaeU14DlCl7
n60DJOL0tnwZjigUUDi7j/eb79xmi87BVsUSKoYS3BJF/v07h8LKafCUKy/1bAnT
OGyCwP2D73CDkL/1jalQaJcjnz7s9+Saxyd9Ixx3m9avlAbHDiI6faRNmkBxs3dF
RTHe6MHn5QKBgFV6pdGkZOFlueUMjsTdGM62qaUscCInnN+eQ3XOPUS+Qd1+t6oU
6Gu0kPPIHkkuSMy0mq6CdkOcioJthd84+vH/mPXFp3AclS4pNlRXxT6GPG7pdsl1
cy3WZgC7T9CeyQGgMv7CKff2gaoH2Ew6og6zag+5qfX4vFZm9WPN60GBAoGAFeGR
W1nR7OYPG+FMAYzIgN/FzkRQLbl7t1/N1eU1GW4weQ6h2rUhp1v587tQ3Rg+B2wC
+cmc5D08Xzinwl6DlVUIfMAhqtOUFwzuL5ztG6iVq/ciRAZ9plq1ZU/MZzvfD9Y5
plRTNZ39BapEJuav5kGWNVAk6Hpfusjl0yuki40CgYA5FQg15B9Wr8oPzz0gd8Ie
1J62Lg+Hk0RzGJkWiNPsH2IR/umjSJeu0CxVHrDtI8YAdFkZVBKb5e8RsQ5+IoAY
GLmbbvuvTX/A0mU6Em7Lyy/Fl0gky/9o6/Cvq3W748VOjOvpb9itqje67scilBW9
fYFIDPbqNfkp5hHC3MnQ0Q==
-----END PRIVATE KEY-----
BIN
View File
Binary file not shown.
+3 -3
View File
@@ -46,7 +46,7 @@ static HCERTSTORE WINAPI my_CertOpenStore(
const void *pvPara
);
static BOOL my_WinHttpSetOption(
static BOOL WINAPI my_WinHttpSetOption(
HINTERNET hInternet,
DWORD dwOption,
LPVOID lpBuffer,
@@ -70,7 +70,7 @@ static HCERTSTORE (WINAPI *next_CertOpenStore)(
const void *pvPara
);
static BOOL (*next_WinHttpSetOption)(
static BOOL (WINAPI *next_WinHttpSetOption)(
HINTERNET hInternet,
DWORD dwOption,
LPVOID lpBuffer,
@@ -272,7 +272,7 @@ static HCERTSTORE WINAPI my_CertOpenStore(
return ret;
}
static BOOL my_WinHttpSetOption(
static BOOL WINAPI my_WinHttpSetOption(
HINTERNET hInternet,
DWORD dwOption,
LPVOID lpBuffer,