mirror of
https://gitea.tendokyu.moe/TeamTofuShop/taitools.git
synced 2026-09-22 22:28:06 +03:00
redo cert stuff, build out winusb hook
This commit is contained in:
Vendored
+6
-1
@@ -24,6 +24,11 @@
|
||||
"assert.h": "c",
|
||||
"io4.h": "c",
|
||||
"jvs-bus.h": "c",
|
||||
"jvs.h": "c"
|
||||
"jvs.h": "c",
|
||||
"guid.h": "c",
|
||||
"hidclass.h": "c",
|
||||
"winusb.h": "c",
|
||||
"setupapi.h": "c",
|
||||
"table.h": "c"
|
||||
}
|
||||
}
|
||||
+4
-3
@@ -10,8 +10,9 @@ $(BUILD_DIR_ZIP)/siva.zip:
|
||||
$(BUILD_DIR_ZIP)/siva
|
||||
$(V)mv $(BUILD_DIR_ZIP)/siva/iDmacDrv.dll \
|
||||
$(BUILD_DIR_ZIP)/siva/iDmacDrv64.dll
|
||||
$(V)cp pki/nesys.cer \
|
||||
$(BUILD_DIR_ZIP)/siva/cert
|
||||
$(V)cp pki/client.cer \
|
||||
pki/client.p12 \
|
||||
$(BUILD_DIR_ZIP)/siva
|
||||
$(V)strip $(BUILD_DIR_ZIP)/siva/*.{exe,dll}
|
||||
$(V)cd $(BUILD_DIR_ZIP)/siva ; zip -r ../siva.zip *
|
||||
|
||||
@@ -23,7 +24,7 @@ $(BUILD_DIR_ZIP)/ll3.zip:
|
||||
$(DIST_DIR)/ll3/taitools.ini \
|
||||
$(DIST_DIR)/ll3/start.bat \
|
||||
$(BUILD_DIR_ZIP)/ll3
|
||||
$(V)cp pki/cert.p12 \
|
||||
$(V)cp pki/client.p12 \
|
||||
$(BUILD_DIR_ZIP)/ll3
|
||||
$(V)strip $(BUILD_DIR_ZIP)/ll3/*.{exe,dll}
|
||||
$(V)cd $(BUILD_DIR_ZIP)/ll3 ; zip -r ../ll3.zip *
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@ DEFINE_GUID(
|
||||
|
||||
DEFINE_GUID(
|
||||
usbio_guid,
|
||||
0x46C3136FL,
|
||||
0x46C3136F,
|
||||
0x0FD5,
|
||||
0x4973,
|
||||
0xBC, 0x5A, 0xF4, 0xA9, 0xF3, 0x52, 0x81, 0x39);
|
||||
|
||||
+39
-6
@@ -14,13 +14,15 @@
|
||||
#include "hook/iobuf.h"
|
||||
#include "hook/iohook.h"
|
||||
|
||||
#include "hooklib/setupapi.h"
|
||||
#include "hooklib/winusb.h"
|
||||
|
||||
#include "util/dprintf.h"
|
||||
|
||||
// USB IO
|
||||
|
||||
static HRESULT usbio_handle_irp(struct irp *irp);
|
||||
static HRESULT winusb_handle_irp(struct irp *irp);
|
||||
static void read_pipe(void *ctx, uint8_t *bfr, uint32_t bfr_len, uint32_t *len_tx);
|
||||
static void write_pipe(void *ctx, uint8_t *bfr, uint32_t bfr_len, uint32_t *len_tx);
|
||||
|
||||
static const wchar_t usbio_path[] = L"$usbio";
|
||||
|
||||
@@ -37,18 +39,49 @@ HRESULT usbio_hook_init()
|
||||
return hr;
|
||||
}
|
||||
|
||||
iohook_push_handler(usbio_handle_irp);
|
||||
// only idVendor, idProduct and bcdDevice are actually read it seems
|
||||
struct _USB_DEVICE_DESCRIPTOR desc = {
|
||||
.bLength = sizeof(USB_DEVICE_DESCRIPTOR),
|
||||
.bDescriptorType = USB_DEVICE_DESCRIPTOR_TYPE,
|
||||
.bcdUSB = 301, // USB 3.01 spec (BCD makes no sense)
|
||||
.bDeviceClass = 0x03, // HID
|
||||
.bDeviceSubClass = 0x00, // ??
|
||||
.bDeviceProtocol = 0x00, // ??
|
||||
.bMaxPacketSize0 = 64,
|
||||
.idVendor = 0x0AE4,
|
||||
.idProduct = 0x0901,
|
||||
.bcdDevice = 0x32, // Needs to be 32 after some processing by the game
|
||||
.iManufacturer = 0,
|
||||
.iProduct = 0,
|
||||
.iSerialNumber = 0,
|
||||
.bNumConfigurations = 1,
|
||||
};
|
||||
|
||||
hr = setupapi_add_phantom_dev(&usbio_guid, usbio_path);
|
||||
struct winusb_dev dev = {
|
||||
.fd = usbio_fd,
|
||||
.path = L"$usbio",
|
||||
.descriptor = desc,
|
||||
.read_pipe = read_pipe,
|
||||
.write_pipe = write_pipe,
|
||||
};
|
||||
|
||||
hr = winusb_add_phantom_dev(&dev);
|
||||
|
||||
if (FAILED(hr)) {
|
||||
return hr;
|
||||
}
|
||||
|
||||
dprintf("USBIO: Init\n");
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT usbio_handle_irp(struct irp *irp)
|
||||
static void read_pipe(void *ctx, uint8_t *bfr, uint32_t bfr_len, uint32_t *len_tx)
|
||||
{
|
||||
return S_OK;
|
||||
|
||||
}
|
||||
|
||||
static void write_pipe(void *ctx, uint8_t *bfr, uint32_t bfr_len, uint32_t *len_tx)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
+3
-18
@@ -239,24 +239,9 @@ Default: 1
|
||||
|
||||
If 1, hooks functions related to server and client certificate processing.
|
||||
|
||||
### `server_cert`
|
||||
|
||||
Default: `cert/Server.pfx`
|
||||
|
||||
Location of the PKCS #12 file containing the certificates used to verify the server
|
||||
|
||||
### `client_cert`
|
||||
### `path`
|
||||
|
||||
Default: ``
|
||||
|
||||
Location of the PKCS #12 containing the certificates used by the client to do mTLS. If
|
||||
your data already came with a cert and the server you're connecting to doesn't use mTLS
|
||||
you can leave this blank to let the game use it's own (TODO verify)
|
||||
|
||||
### `insecure`
|
||||
|
||||
Default: 0
|
||||
|
||||
If 1, overrides `WinHttpSetOption`s `WINHTTP_OPTION_SECURITY_FLAGS` behavior to ignore almost all SSL errors.
|
||||
Useful for testing or if your server sysadmin is lazy. Should be disabled otherwise.
|
||||
|
||||
Path to a cert file (base64 with headers) that contains the client cert to be used for mTLS.
|
||||
Leave this blank to disable mTLS, if the server you're connecting to supports it.
|
||||
|
||||
+3
-3
@@ -68,7 +68,7 @@ static int WSAAPI hook_getaddrinfo(
|
||||
const ADDRINFOA *pHints,
|
||||
ADDRINFOA **ppResult);
|
||||
|
||||
static BOOL hook_WinHttpCrackUrl(
|
||||
static BOOL my_WinHttpCrackUrl(
|
||||
LPCWSTR pwszUrl,
|
||||
DWORD dwUrlLength,
|
||||
DWORD dwFlags,
|
||||
@@ -137,7 +137,7 @@ static const struct hook_symbol dns_hook_syms_ws2[] = {
|
||||
static const struct hook_symbol dns_hook_syms_winhttp[] = {
|
||||
{
|
||||
.name = "WinHttpCrackUrl",
|
||||
.patch = hook_WinHttpCrackUrl,
|
||||
.patch = my_WinHttpCrackUrl,
|
||||
.link = (void **) &next_WinHttpCrackUrl,
|
||||
}
|
||||
};
|
||||
@@ -492,7 +492,7 @@ end:
|
||||
return result;
|
||||
}
|
||||
|
||||
static BOOL hook_WinHttpCrackUrl(
|
||||
static BOOL my_WinHttpCrackUrl(
|
||||
LPCWSTR pwszUrl,
|
||||
DWORD dwUrlLength,
|
||||
DWORD dwFlags,
|
||||
|
||||
+229
-4
@@ -5,7 +5,10 @@
|
||||
#include <stdint.h>
|
||||
|
||||
#include "hook/table.h"
|
||||
#include "hook/iohook.h"
|
||||
|
||||
#include "board/guid.h"
|
||||
#include "hooklib/setupapi.h"
|
||||
#include "hooklib/winusb.h"
|
||||
|
||||
#include "util/dprintf.h"
|
||||
@@ -16,6 +19,7 @@ static struct winusb_dev *winusb_classes;
|
||||
static size_t winusb_nclasses;
|
||||
|
||||
static void winusb_hook_init();
|
||||
static HRESULT winusb_handle_irp(struct irp *irp);
|
||||
|
||||
BOOL my_WinUsb_QueryPipe(
|
||||
WINUSB_INTERFACE_HANDLE InterfaceHandle,
|
||||
@@ -169,7 +173,7 @@ static const struct hook_symbol winusb_syms[] = {
|
||||
|
||||
HRESULT winusb_add_phantom_dev(const struct winusb_dev *dev)
|
||||
{
|
||||
struct winusb_dev *class_;
|
||||
//struct winusb_dev *class_;
|
||||
struct winusb_dev *new_array;
|
||||
HRESULT hr;
|
||||
|
||||
@@ -191,10 +195,14 @@ HRESULT winusb_add_phantom_dev(const struct winusb_dev *dev)
|
||||
|
||||
winusb_classes = new_array;
|
||||
|
||||
// TODO: Copy the dev class to the new slot in the array
|
||||
class_ = &winusb_classes[winusb_nclasses++];
|
||||
memcpy_s(&winusb_classes[winusb_nclasses++], sizeof(struct winusb_dev), dev, sizeof(*dev));
|
||||
hr = S_OK;
|
||||
|
||||
setupapi_add_phantom_dev(&usbio_guid, dev->path);
|
||||
iohook_push_handler(winusb_handle_irp);
|
||||
|
||||
dprintf("WinUSB: Init\n");
|
||||
|
||||
end:
|
||||
LeaveCriticalSection(&winusb_lock);
|
||||
|
||||
@@ -217,7 +225,224 @@ void winusb_hook_insert_hooks(HMODULE target)
|
||||
{
|
||||
hook_table_apply(
|
||||
target,
|
||||
"winusb.dll",
|
||||
"WINUSB.dll",
|
||||
winusb_syms,
|
||||
_countof(winusb_syms));
|
||||
}
|
||||
|
||||
static HRESULT winusb_handle_irp(struct irp *irp)
|
||||
{
|
||||
bool found = false;
|
||||
if (irp->op != IRP_OP_OPEN && irp->op != IRP_OP_CLOSE) {
|
||||
return iohook_invoke_next(irp);
|
||||
}
|
||||
|
||||
if (irp->open_filename == NULL || irp->open_filename[0] == L'\0') {
|
||||
return iohook_invoke_next(irp);
|
||||
}
|
||||
|
||||
for (int i = 0; i < winusb_nclasses; i++) {
|
||||
if (!wcscmp(irp->open_filename, winusb_classes[i].path)) {
|
||||
dprintf("WinUSB: Open/close %ls\n", winusb_classes[i].path);
|
||||
irp->fd = winusb_classes[i].fd;
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!found) {
|
||||
return iohook_invoke_next(irp);
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
// FIXME
|
||||
int get_winusb_fake_dev_idx(WINUSB_INTERFACE_HANDLE InterfaceHandle)
|
||||
{
|
||||
for (int i = 0; i < winusb_nclasses; i++) {
|
||||
if (winusb_classes[i].fd == InterfaceHandle) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
BOOL my_WinUsb_QueryPipe(WINUSB_INTERFACE_HANDLE InterfaceHandle, UCHAR AlternateInterfaceNumber, UCHAR PipeIndex, PWINUSB_PIPE_INFORMATION PipeInformation)
|
||||
{
|
||||
dprintf("WinUSB: my_WinUsb_QueryPipe\n");
|
||||
UCHAR this_pipeid = 0;
|
||||
|
||||
int idx = 0;
|
||||
/*int idx = get_winusb_fake_dev_idx(InterfaceHandle);
|
||||
if (idx == -1) {
|
||||
return next_WinUsb_QueryPipe(InterfaceHandle, AlternateInterfaceNumber, PipeIndex, PipeInformation);
|
||||
}*/
|
||||
|
||||
switch (PipeIndex) {
|
||||
case 0: this_pipeid = 0x02; break;
|
||||
case 1: this_pipeid = 0x81; break;
|
||||
}
|
||||
|
||||
if (!this_pipeid) {
|
||||
return false;
|
||||
}
|
||||
|
||||
//PipeInformation = (PWINUSB_PIPE_INFORMATION)malloc(sizeof(WINUSB_PIPE_INFORMATION));
|
||||
|
||||
PipeInformation->PipeType = UsbdPipeTypeBulk;
|
||||
PipeInformation->PipeId = this_pipeid;
|
||||
PipeInformation->Interval = 0xff; // never checked?
|
||||
PipeInformation->MaximumPacketSize = 128; // never checked?
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL my_WinUsb_QueryInterfaceSettings(WINUSB_INTERFACE_HANDLE InterfaceHandle, UCHAR AlternateInterfaceNumber, PUSB_INTERFACE_DESCRIPTOR UsbAltInterfaceDescriptor)
|
||||
{
|
||||
dprintf("WinUSB: my_WinUsb_QueryInterfaceSettings\n");
|
||||
int idx = 0;
|
||||
/*int idx = get_winusb_fake_dev_idx(InterfaceHandle);
|
||||
if (idx == -1) {
|
||||
return next_WinUsb_QueryInterfaceSettings(InterfaceHandle, AlternateInterfaceNumber, UsbAltInterfaceDescriptor);
|
||||
}*/
|
||||
|
||||
UsbAltInterfaceDescriptor->bNumEndpoints = 2; // nothing else is checked
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL my_WinUsb_GetDescriptor(
|
||||
WINUSB_INTERFACE_HANDLE InterfaceHandle,
|
||||
UCHAR DescriptorType,
|
||||
UCHAR Index,
|
||||
USHORT LanguageID,
|
||||
PUCHAR Buffer,
|
||||
ULONG BufferLength,
|
||||
PULONG LengthTransferred
|
||||
)
|
||||
{
|
||||
int idx = 0;
|
||||
/*int idx = get_winusb_fake_dev_idx(InterfaceHandle);
|
||||
if (idx == -1) {
|
||||
return next_WinUsb_GetDescriptor(
|
||||
InterfaceHandle,
|
||||
DescriptorType,
|
||||
Index,
|
||||
LanguageID,
|
||||
Buffer,
|
||||
BufferLength,
|
||||
LengthTransferred
|
||||
);
|
||||
}*/
|
||||
|
||||
dprintf("WinUSB: my_WinUsb_GetDescriptor %d\n", idx);
|
||||
|
||||
if (BufferLength < winusb_classes[idx].descriptor.bLength) {
|
||||
SetLastError(ERROR_INSUFFICIENT_BUFFER);
|
||||
return false;
|
||||
}
|
||||
|
||||
// Surly this won't explode
|
||||
memcpy_s(Buffer, BufferLength, &winusb_classes[idx].descriptor, winusb_classes[(uintptr_t)InterfaceHandle].descriptor.bLength);
|
||||
|
||||
*LengthTransferred = winusb_classes[idx].descriptor.bLength;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL my_WinUsb_WritePipe(
|
||||
WINUSB_INTERFACE_HANDLE InterfaceHandle,
|
||||
UCHAR PipeID,
|
||||
PUCHAR Buffer,
|
||||
ULONG BufferLength,
|
||||
PULONG LengthTransferred,
|
||||
LPOVERLAPPED Overlapped
|
||||
)
|
||||
{
|
||||
int idx = 0;
|
||||
/*int idx = get_winusb_fake_dev_idx(InterfaceHandle);
|
||||
if (idx == -1) {
|
||||
return next_WinUsb_WritePipe(
|
||||
InterfaceHandle,
|
||||
PipeID,
|
||||
Buffer,
|
||||
BufferLength,
|
||||
LengthTransferred,
|
||||
Overlapped
|
||||
);
|
||||
}*/
|
||||
#if 1
|
||||
dprintf("WritePipe %d\t", (int)BufferLength);
|
||||
for (int i = 0; i < BufferLength; i++) {
|
||||
dprintf("%02X", (char)Buffer[i]);
|
||||
}
|
||||
dprintf("\n");
|
||||
#endif
|
||||
winusb_classes[idx].write_pipe(NULL, Buffer, BufferLength, (uint32_t *)LengthTransferred);
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL my_WinUsb_QueryDeviceInformation(
|
||||
WINUSB_INTERFACE_HANDLE InterfaceHandle,
|
||||
ULONG InformationType,
|
||||
PULONG BufferLength,
|
||||
PVOID Buffer
|
||||
)
|
||||
{
|
||||
//dprintf("WinUSB: my_WinUsb_QueryDeviceInformation\n");
|
||||
memset(Buffer, 0x03, 1);
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL my_WinUsb_ReadPipe(
|
||||
WINUSB_INTERFACE_HANDLE InterfaceHandle,
|
||||
UCHAR PipeID,
|
||||
PUCHAR Buffer,
|
||||
ULONG BufferLength,
|
||||
PULONG LengthTransferred,
|
||||
LPOVERLAPPED Overlapped
|
||||
)
|
||||
{
|
||||
int idx = 0;
|
||||
/*int idx = get_winusb_fake_dev_idx(InterfaceHandle);
|
||||
if (idx == -1) {
|
||||
return next_WinUsb_WritePipe(
|
||||
InterfaceHandle,
|
||||
PipeID,
|
||||
Buffer,
|
||||
BufferLength,
|
||||
LengthTransferred,
|
||||
Overlapped
|
||||
);
|
||||
}*/
|
||||
#if 1
|
||||
dprintf("ReadPipe %d\n", (int)BufferLength);
|
||||
#endif
|
||||
winusb_classes[idx].read_pipe(NULL, Buffer, BufferLength, (uint32_t *)LengthTransferred);
|
||||
return true;
|
||||
}
|
||||
|
||||
BOOL my_WinUsb_Initialize(HANDLE DeviceHandle, PWINUSB_INTERFACE_HANDLE InterfaceHandle)
|
||||
{
|
||||
dprintf("WinUSB: my_WinUsb_Initialize\n");
|
||||
for (int i = 0; i < winusb_nclasses; i++) {
|
||||
if (winusb_classes[i].fd == DeviceHandle) {
|
||||
dprintf("WinUSB: Init %ls\n", winusb_classes[i].path);
|
||||
InterfaceHandle = winusb_classes[i].fd;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return next_WinUsb_Initialize(DeviceHandle, InterfaceHandle);
|
||||
}
|
||||
|
||||
BOOL my_WinUsb_Free(WINUSB_INTERFACE_HANDLE InterfaceHandle)
|
||||
{
|
||||
if (get_winusb_fake_dev_idx(InterfaceHandle) == -1) {
|
||||
return next_WinUsb_Free(InterfaceHandle);
|
||||
}
|
||||
|
||||
InterfaceHandle = NULL;
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
+4
-3
@@ -9,15 +9,16 @@
|
||||
// usio - providor for winusb, passes along read/write
|
||||
// ll3io - gives usio the data to write
|
||||
|
||||
typedef void (*winusb_pipe_op_t) (void *ctx, uint8_t *bfr, uint32_t bfr_len, uint32_t *len_tx);
|
||||
|
||||
struct winusb_dev {
|
||||
HANDLE fd;
|
||||
GUID class_guid;
|
||||
const wchar_t *path;
|
||||
//uint8_t read_pipe_id; // duno if this ever needs to change?
|
||||
//uint8_t write_pipe_id;
|
||||
struct _USB_DEVICE_DESCRIPTOR descriptor;
|
||||
void (*read_pipe)(void *ctx, uint8_t pipe_id, uint8_t *bfr, uint32_t bfr_len);
|
||||
void (*write_pipe)(void *ctx, uint8_t pipe_id, uint8_t *bfr, uint32_t bfr_len);
|
||||
winusb_pipe_op_t read_pipe;
|
||||
winusb_pipe_op_t write_pipe;
|
||||
};
|
||||
|
||||
#pragma pack(pop)
|
||||
|
||||
@@ -7,19 +7,20 @@ openssl req -newkey rsa:2048 -nodes -keyout pki/ca.key -x509 -days 3650 -out pki
|
||||
# -addext "subjectAltName = DNS:cert.nesys.jp,DNS:cert3.nesys.jp,DNS:data.nesys.jp,DNS:proxy.nesys.jp,DNS:nesys.taito.co.jp,DNS:fjm170920zero.nesica.net"
|
||||
|
||||
# Generate Nesys CSR and key
|
||||
openssl req -newkey rsa:2048 -nodes -keyout pki/nesys.key -out pki/nesys.csr -subj "/C=JP/ST=A/L=A/CN=nesys"
|
||||
# -addext "subjectAltName = DNS:cert.nesys.jp,DNS:cert3.nesys.jp,DNS:data.nesys.jp,DNS:proxy.nesys.jp,DNS:nesys.taito.co.jp,DNS:fjm170920zero.nesica.net" -days 3650
|
||||
openssl req -newkey rsa:2048 -nodes -keyout pki/nesys.key -out pki/nesys.csr -subj "/C=JP/ST=A/L=A/CN=nesys"
|
||||
#-addext "subjectAltName = DNS:cert.nesys.jp,DNS:cert3.nesys.jp,DNS:data.nesys.jp,DNS:proxy.nesys.jp,DNS:nesys.taito.co.jp,DNS:fjm170920zero.nesica.net"
|
||||
|
||||
# Generate Nesys cert
|
||||
openssl x509 -req -sha256 -days 3650 -in pki/nesys.csr -CA pki/ca.cer -CAkey pki/ca.key -out pki/nesys.cer -set_serial 0
|
||||
|
||||
# Generate client CSR and key
|
||||
openssl req -newkey rsa:2048 -nodes -keyout pki/PREMIUM.key -out pki/PREMIUM.csr -subj "/C=JP/ST=A/L=A/CN=PREMIUM"
|
||||
openssl req -newkey rsa:2048 -nodes -keyout pki/client.key -out pki/client.csr -subj "/C=JP/ST=A/L=A/CN=PREMIUM"
|
||||
#-addext "subjectAltName = DNS:cert.nesys.jp,DNS:cert3.nesys.jp,DNS:data.nesys.jp,DNS:proxy.nesys.jp,DNS:nesys.taito.co.jp,DNS:fjm170920zero.nesica.net"
|
||||
|
||||
# Generate client cert
|
||||
openssl x509 -req -sha256 -days 3650 -in pki/PREMIUM.csr -CA pki/nesys.cer -CAkey pki/nesys.key -out pki/PREMIUM.cer -set_serial 0
|
||||
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
|
||||
|
||||
# Generate server cert and key
|
||||
openssl req -newkey rsa:2048 -nodes -keyout pki/server.key -out pki/server.csr -subj "/C=JP/ST=A/L=A/CN=*.nesys.jp"
|
||||
openssl x509 -req -sha256 -days 3650 -in pki/server.csr -CA pki/nesys.cer -CAkey pki/nesys.key -out pki/server.cer -set_serial 0
|
||||
# Package as a p12 file for Theatrhythm
|
||||
openssl pkcs12 -export -out pki/client.p12 -inkey pki/client.key -in pki/client.cer
|
||||
|
||||
rm pki/*.csr
|
||||
+6
-1
@@ -1,7 +1,7 @@
|
||||
#include <windows.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "board/io4.h"
|
||||
#include "board/j9100647a.h"
|
||||
|
||||
#include "hook/process.h"
|
||||
|
||||
@@ -40,6 +40,11 @@ static DWORD CALLBACK ll3_pre_startup(void)
|
||||
gfx_hook_init(&ll3_hook_cfg.gfx);
|
||||
gfx_d3d11_hook_init(&ll3_hook_cfg.gfx, ll3_hook_mod);
|
||||
|
||||
hr = usbio_hook_init();
|
||||
if (FAILED(hr)) {
|
||||
goto fail;
|
||||
}
|
||||
|
||||
/* Initialize emulation hooks */
|
||||
|
||||
hr = platform_hook_init(
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIC4DCCAcgCAQAwDQYJKoZIhvcNAQELBQAwNTELMAkGA1UEBhMCSlAxCjAIBgNV
|
||||
BAgMAUExCjAIBgNVBAcMAUExDjAMBgNVBAMMBW5lc3lzMB4XDTI0MDIyMTAwNDcw
|
||||
N1oXDTM0MDIxODAwNDcwN1owNzELMAkGA1UEBhMCSlAxCjAIBgNVBAgMAUExCjAI
|
||||
BgNVBAcMAUExEDAOBgNVBAMMB1BSRU1JVU0wggEiMA0GCSqGSIb3DQEBAQUAA4IB
|
||||
DwAwggEKAoIBAQC8r+G6iwuoHnz1FaBMJKDgV7ZnITlzmlN/3dFI+pvlpWa9ttdG
|
||||
o5/teD/55IKIVlbwGd4pIzKy6HHEejWP3dJRmaPAg14hD397r2KKdVebBEPH/DtS
|
||||
hlPVHtdLNFHoqBQXxutBtSL7j4AukTcxx/H0aIQ+9T342IFhJ//VRUN8rFjjyjMC
|
||||
rSxHL4VPSYKqKFtTJAY4vfHSNRKBVNQJKJXA7DVJFnQTvALpSK3vTA7qGqKUx7Vl
|
||||
7g3lHyoTKUfKzCNo8ARZsJspmlmFOKdR2vIh/Z/tzI/Ugp3nvSjbKndM7EK3u9IB
|
||||
I83GIM+ouf9vBY0Zgr/uZjscURWlkXDE0ifvAgMBAAEwDQYJKoZIhvcNAQELBQAD
|
||||
ggEBADdY4wDumvnbpdjUI66fWKeLtgZV7W3KdzryxstnYkHyffQ1fNHJlP7C3Y60
|
||||
sIF7ggweuRDdEq6ADgdzWQ1Qd/ngYQgNqBgGOmrPKQajFnf3AjeJvQbiW/AmkX7c
|
||||
o3GoqXV62caD5JHqV/jS8qPmmBHvymVrT8AWecRU/d/k0e+bamdenMAqPON7A+NN
|
||||
QHIeKC+zaE/rrauODAND2LfiVjLCJ9cBIm/8wIrSP8bc/+SuFI5chRm4W7b2E6iz
|
||||
Yll1Jx6eKQxUQIjX/gNbDIHCbKVnm9HLRBJwCs3DfcME2if6SMVgWRMFJDKBgy+Y
|
||||
EXE5ZLdXTjg2hg9/uQIaRA+73Dw=
|
||||
-----END CERTIFICATE-----
|
||||
@@ -1,16 +0,0 @@
|
||||
-----BEGIN CERTIFICATE REQUEST-----
|
||||
MIICfDCCAWQCAQAwNzELMAkGA1UEBhMCSlAxCjAIBgNVBAgMAUExCjAIBgNVBAcM
|
||||
AUExEDAOBgNVBAMMB1BSRU1JVU0wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
|
||||
AoIBAQC8r+G6iwuoHnz1FaBMJKDgV7ZnITlzmlN/3dFI+pvlpWa9ttdGo5/teD/5
|
||||
5IKIVlbwGd4pIzKy6HHEejWP3dJRmaPAg14hD397r2KKdVebBEPH/DtShlPVHtdL
|
||||
NFHoqBQXxutBtSL7j4AukTcxx/H0aIQ+9T342IFhJ//VRUN8rFjjyjMCrSxHL4VP
|
||||
SYKqKFtTJAY4vfHSNRKBVNQJKJXA7DVJFnQTvALpSK3vTA7qGqKUx7Vl7g3lHyoT
|
||||
KUfKzCNo8ARZsJspmlmFOKdR2vIh/Z/tzI/Ugp3nvSjbKndM7EK3u9IBI83GIM+o
|
||||
uf9vBY0Zgr/uZjscURWlkXDE0ifvAgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAQEA
|
||||
EmY4+uARSH5nPSHBBCRnwtGLs/0sU/dZDl6lC4aUz36aL+qPyQMuOhZ/P2muvb0r
|
||||
9+IvqXhfvh7VpwNsJYWTj3K3fD6tCL789MDbp5gJcflTSqFxrFwV4rjibIa5fpBk
|
||||
q6NCT7uQOJdEZwPJohaIBZXGLELktJCU5Z0Odhg+cm5BcxNqm7i8gcC3LL9CypnI
|
||||
R9Heluo2LTKGwrLHr8QjexUM8vcKNSGRsVE/ujTiTjm62UaIdEbFipwc6reZY37O
|
||||
FbjvXDQFuYZ+yTaX4cih9JHDMwh7g1GzMDT5+M+k+qtVttEhxsrSAnp/kq+CfGV/
|
||||
5wBFbKlQfM4bHEuNmTXFow==
|
||||
-----END CERTIFICATE REQUEST-----
|
||||
@@ -1,28 +0,0 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC8r+G6iwuoHnz1
|
||||
FaBMJKDgV7ZnITlzmlN/3dFI+pvlpWa9ttdGo5/teD/55IKIVlbwGd4pIzKy6HHE
|
||||
ejWP3dJRmaPAg14hD397r2KKdVebBEPH/DtShlPVHtdLNFHoqBQXxutBtSL7j4Au
|
||||
kTcxx/H0aIQ+9T342IFhJ//VRUN8rFjjyjMCrSxHL4VPSYKqKFtTJAY4vfHSNRKB
|
||||
VNQJKJXA7DVJFnQTvALpSK3vTA7qGqKUx7Vl7g3lHyoTKUfKzCNo8ARZsJspmlmF
|
||||
OKdR2vIh/Z/tzI/Ugp3nvSjbKndM7EK3u9IBI83GIM+ouf9vBY0Zgr/uZjscURWl
|
||||
kXDE0ifvAgMBAAECggEAbM5/vLKx5iCuriXqaf41RylNZesi1icIP5QKO6tIewUG
|
||||
WiA1w+ZXMvlE6zV6kGQ5fftswQwrEEA6WrKecHfZ8HRImZsnjKkDOq/Ig09nVV0A
|
||||
OTKagtwzO5KtVBC3qxJBg/SRdTKfGbGGmVPkIDDMtcQPfr6tHfK7qOsH/FQUtq8s
|
||||
/sr0EDdBqGKeOi0MtmXOY32BejCqrEhiUEMI8YpBfndvDMWrYv0QIgdjLqw0Daz0
|
||||
WW3/LchZJz/NQrGcpeOskQxXsPOqOlDxBKHnhREnkKzUcfaGeK8evAdk1VWrPlKD
|
||||
d4qmxbzLe1GwyF+ClozLZK9n3NtVBrPdEx2v8FCkAQKBgQD16aIBr7H+mav6gG+x
|
||||
FLWaVnJ7o6PpUdorkTyZx+8VT+0yVBk5JgT4XcL4jVIa4pvwm+cxzgR4ul9m3bPt
|
||||
TMdjCmCwn5ctVv9tyVJFjHVfOX1rpILLB3tpFa1NUulLZDdGWUjYMTdasHmPIc5n
|
||||
vCByw9E0EjElPGs7G5v9Ac/pHwKBgQDEbVBiIQxmCgsxTjuIgq5U+ZQHD+KCIKHm
|
||||
/Nj6Yujz6xU/MHWWj8xfFvW9r+hgdBZq1HHMBYt1oV4UQx9NU79C8EY3yFQ0gHvY
|
||||
urAbtWffaf0GxhIcfOU7dvqb00rsC2eWo0jvS+Opi89FjYeW5ioFaCdhuYDVDEZJ
|
||||
6LiFOZNXMQKBgQC7gi5aAtJCRILyO8Tuzc+7o3cf96MgYZ1t4wzGZcFUCuHeommp
|
||||
PehESZpFU9zrSyeEzBv5yhF2zQW5tgtgQk82oc8gXlAz7kZOPFhTV8qXlYqg7Ywd
|
||||
q9LaSgEfGL1zEzNinOoCj2SZ7j6CeVCdoMFNQSrf/Y8jyXIqW98RiLQ0GQKBgQC7
|
||||
xvCwTn2m0nUutmYtMxhrPYgoVCQqV/3ObusSOhoOjC5skOvoeiFayf00UASqqG+B
|
||||
wwPikW5njlL8tconxyaxXDcUPptY8XbzkkymwH3DU3RC1Hkd6LvPZAdhjdUy4Bgw
|
||||
Jnqj4H2MaI5GJG15cSC8uHvlbUve33QWVbaIDalwEQKBgBDw8c9aJe7zKMM6oX8X
|
||||
WoGvf6t/qYXLoniC06A/VDEFShfR1n7lEavO/SibqN+k5T4E8Hayv0witjtIfF+6
|
||||
4EOzMdGHDdvnpmtRgLCQXzTnK4FLV4Kig0qeLjKyknxrVp/ZiD7qgREG3uhrahu/
|
||||
q6p2INBRts2uQQtVrBmOIJ87
|
||||
-----END PRIVATE KEY-----
|
||||
+16
-16
@@ -1,21 +1,21 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDYTCCAkmgAwIBAgIJANXp0K4mLJbJMA0GCSqGSIb3DQEBCwUAMEcxCzAJBgNV
|
||||
MIIDYTCCAkmgAwIBAgIJALbvDPgrR0wxMA0GCSqGSIb3DQEBCwUAMEcxCzAJBgNV
|
||||
BAYTAkpQMQowCAYDVQQIDAFBMQowCAYDVQQHDAFBMSAwHgYDVQQDDBdUYWl0byBB
|
||||
cmNhZGUgTWFjaGluZSBDQTAeFw0yNDAyMjEwMDM3MjRaFw0zNDAyMTgwMDM3MjRa
|
||||
cmNhZGUgTWFjaGluZSBDQTAeFw0yNTAyMDUyMzUwMDJaFw0zNTAyMDMyMzUwMDJa
|
||||
MEcxCzAJBgNVBAYTAkpQMQowCAYDVQQIDAFBMQowCAYDVQQHDAFBMSAwHgYDVQQD
|
||||
DBdUYWl0byBBcmNhZGUgTWFjaGluZSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP
|
||||
ADCCAQoCggEBAMeFW/ELRe8zoq9UKqs38o+NBeCfF85vGiB0ofpY83juq/ScKZ93
|
||||
y3/0KDkKywIxZM9OOL8rRZ+n+hRtKE3dh0NOULyWZaaXnhc8dFegj2f/CfW67RtA
|
||||
UMKkFoWgWy4s850aB7/1koCI9dCMJ9Kxo9WAHIEH/DHN05m2WVmUR2rpxgy1qX1N
|
||||
ZEfnWWcybFO05GBoWlnMuTewAoDUna+hrMR9yVZEVPo+5zXELT1Q+fdJaeCMes7u
|
||||
EvA309jlbN/jyauhE6oKtxOLmfUW/ug+o0i3WhHOnA7q/2awx6QBxeeJJ+jqHZ03
|
||||
Wo56M0YSpYK6qUAgvbDyG7cdC492VevlBQkCAwEAAaNQME4wHQYDVR0OBBYEFICi
|
||||
OTELnKwR7eleqpDecLGpDXq0MB8GA1UdIwQYMBaAFICiOTELnKwR7eleqpDecLGp
|
||||
DXq0MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAAiMFrLniD8lFKhI
|
||||
aFIdvOgU87qpfpe/FzTiHQZds751ktAl25n8QFon33SEsC8YUJjxN97Ng5xN4FM7
|
||||
0Sj0FBfC+SjrcfvUH7fMuatFHE2Z4bNkjXv+13k5vZDxRA8DUV17D3dSo6QSAcYs
|
||||
DgFednjyVb8ihJrKbhdRb/j3JQh8MVYoJ0YX43u//XJAvJJI4XNp6++HE748eGNa
|
||||
RZnaOCpcXxpGtuuoAgwmiIN/uMPTLAIzGecmagw2o0jlS67PuFzyMlCfvIC9dmYQ
|
||||
9Ep92SU8Ode73sPlT/CaKd6ajIL3JUxp2LBMRWBYcZXee7zwE1VphmOonHrIJkn3
|
||||
y+IxMMg=
|
||||
ADCCAQoCggEBANHF3SFgIV+Gz+zv/KOdkLHvWBjr1dTZC3jOyeiP6eBZGbqnOWH5
|
||||
L9MSUUva9BTWbxgOU1p5fihWLQHUrgHv8jM1QAeSrCiz7flAmSCNK3nN3KA0JiL/
|
||||
kK1g2+DfyS1aFqTbeKQpQ1rR61kqGFKtbFQBmWPLzPdNvdC72XBxKpyIieCX8j/G
|
||||
5zc6vTrNV6m74AFCVQLK56Q7s2aMC8cJnW7zjmItgd/wtty/Tw90ksAfgJvXv+te
|
||||
zR4WezxSlMeK22fHrUgpPK3O04NsBOhOpYRn1EJRLplDUOOWty1ESTe4tbA0o8hb
|
||||
eR+ZhuzjX5+yPdULzW7MsVapvxdEXB47w2ECAwEAAaNQME4wHQYDVR0OBBYEFMbn
|
||||
TayEU9K2mel1yhpgjhAZnIeMMB8GA1UdIwQYMBaAFMbnTayEU9K2mel1yhpgjhAZ
|
||||
nIeMMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAGRb8Yl6FeV85bWx
|
||||
X9k2XOaQQJa55WyVSLy6MQH9HihIge313JJxRvpGCRjAgnBYI4uawyzj1rs+Q7Xk
|
||||
v+YH6lMHMkM550lwGN9McujBGHATT37gYFNv9jDbeG4DKwUVwJPdIA1iANnxtqdP
|
||||
BmGhpoIDwK3pTbQ72LLMjc5GtXBRsMhH9uJH6HEKrnT7OCwfKb6WdLKhKNSBccwg
|
||||
X/CreLdx2x5fPjnFuE3jAAMV6LwJ/rJWl/P88HSrHv0y+jGmokupbMgX2kbTmW8g
|
||||
q2ZUamblmBhP2ch7PuyX+qM4/JTuPAdTjkX97SYnRFY1+7lVTqFHrHa2Hh5T6kq8
|
||||
nozJRpc=
|
||||
-----END CERTIFICATE-----
|
||||
|
||||
+26
-26
@@ -1,28 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDHhVvxC0XvM6Kv
|
||||
VCqrN/KPjQXgnxfObxogdKH6WPN47qv0nCmfd8t/9Cg5CssCMWTPTji/K0Wfp/oU
|
||||
bShN3YdDTlC8lmWml54XPHRXoI9n/wn1uu0bQFDCpBaFoFsuLPOdGge/9ZKAiPXQ
|
||||
jCfSsaPVgByBB/wxzdOZtllZlEdq6cYMtal9TWRH51lnMmxTtORgaFpZzLk3sAKA
|
||||
1J2voazEfclWRFT6Puc1xC09UPn3SWngjHrO7hLwN9PY5Wzf48mroROqCrcTi5n1
|
||||
Fv7oPqNIt1oRzpwO6v9msMekAcXniSfo6h2dN1qOejNGEqWCuqlAIL2w8hu3HQuP
|
||||
dlXr5QUJAgMBAAECggEAe18O9wGNgNdg5SEaMT0rE3CUDczSH6e7dA4qim6uPjz2
|
||||
vw5A/oZIoxoKNRtjZDu+piEsHalYJ9zqWe8VWPB+TzQB4FrvCBAAhUWweu6hPiEJ
|
||||
u5SWQJ+IUJK+CmqZdvf8u0v5Ns1WhXwq44WGqlWFhOLuvSp+2xz2lrmWjjmN36EM
|
||||
aIrZKwVyt2FpF3lhCXbkfhrKMNiRKN9hJ1EnQXHxxNfaMVsGz+I8RZuLPKEh1D+o
|
||||
EUY70BC3KBu4h7pVnskRB6pKVrlo1IcAoRmwAUKE4UkwTNawwYzeMV1a8OAHwgip
|
||||
sF+GSpC/dY9rjc/EkTWpRQIRnFSMxVyuY6AevjsiAQKBgQD/d3LYeiLDmIyQnv+h
|
||||
qwkMTn5QXZE7liH6EOy+QpAHyfmNidXW7+OY782bq2MLBFwkxHcDiQP0BaReK/IA
|
||||
Xul1gsLDGH5Sq8GzUjWptyo8BbzqefNx37RmXUp0Z4GSPjVEyrN0BhcBtR44URDR
|
||||
n514dAmr3W1dwrPuBAf7BHN+0QKBgQDH8AGv/9CB7WoYJXNZw68qy1et4dWLA7is
|
||||
l7cP5prpFgyquMO/sjY8NPvLQg1G02G7kJWmCA2Ak2E/BbPjnVz64TW7k4VeyJHl
|
||||
xsXVSWxM9TZqGNXZJTJNvw+tBzcLSzkt+8OlgkKf0KYJYLuqfYs/IhWpzdHBQL0v
|
||||
1mNmDuBguQKBgQCHrvGYeIYuTL+bsFcljqnnl2kPViLk+wBgyMx04PWOrX+V5Tdm
|
||||
SVMgz3zsyUJ5f39RJ+fuQL+Qw85hFgYanE5y01iONlwhnIfsriVCVr5f0sxb3Rmn
|
||||
yaEPHU2GNdNj0RaJyv81CGb/ySqbzrKYI6aHa1oXpiuIOPlH2WxDrkGJgQKBgBl6
|
||||
FMz3fPtBZHaFNyimDckXNin7D/nx1HNxtar6CJ1Q6PZMKu1faRfM7JTe6tAumVKM
|
||||
PvV0KzxKC2c7c8u6PqHdVrp7NtB4IFc2N/lQrNM1n+RvG7jay4kqonW66KGwyS15
|
||||
2llZuuGgdbfWMrOr4bV+w2HqzyKf/Dt/RxU3KhJJAoGBAJTISS+1XD/GuO5EXnMJ
|
||||
xkfhaG3Ju+D7zJJwDa96OQ4+X+aon99HDyyiz1SHbotzhzrCscoHCg6UL+cFHq8Q
|
||||
E5hnGrMUxqs/Z+vE7LXNydg8yOyvxIbkThsRDcBMhR+Rb6FF6DG+iaZ2SPaC5iCs
|
||||
RVI7MDPkI6tophsf9b4pKfF+
|
||||
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDRxd0hYCFfhs/s
|
||||
7/yjnZCx71gY69XU2Qt4zsnoj+ngWRm6pzlh+S/TElFL2vQU1m8YDlNaeX4oVi0B
|
||||
1K4B7/IzNUAHkqwos+35QJkgjSt5zdygNCYi/5CtYNvg38ktWhak23ikKUNa0etZ
|
||||
KhhSrWxUAZljy8z3Tb3Qu9lwcSqciIngl/I/xuc3Or06zVepu+ABQlUCyuekO7Nm
|
||||
jAvHCZ1u845iLYHf8Lbcv08PdJLAH4Cb17/rXs0eFns8UpTHittnx61IKTytztOD
|
||||
bAToTqWEZ9RCUS6ZQ1DjlrctREk3uLWwNKPIW3kfmYbs41+fsj3VC81uzLFWqb8X
|
||||
RFweO8NhAgMBAAECggEAXBdUK8nK/OfvMiJtM9sBYcwkTdSC7E1YpvGJXEqJrw8O
|
||||
p42wOF2v7Ca3f+igjOFSpinr1+VMSCME4S/gMEOJfYecE3cFk1ziVTFRyCOReYix
|
||||
mbcrIuQ1PJgwDznPVNSe6kLbZJ4kzqMngd5kDS/LRdnp4BDha5Q6h39gRue3gD34
|
||||
0ctkujwXfvDtza9TWW+KdGaJLHThKMO/yptucE7ji20wvgan45lX2efjuGaH5CRW
|
||||
ofWdVzN5JIemCcWuYXnVtZyI6hn3+uX97V2PZmvxhrA8eHjnaJBkfvh6pVMAm0Pk
|
||||
mGuSwW6uG1FTC9SBBTdCy41gCwDlds7NGa7Ee+lwPQKBgQD6Gkfv/0iwSMCYsTmV
|
||||
9qvS4mx21NOlo2SoiEBF0HZt6c8r1OVR0jYb0DDScAlBJKBIWM5D5Hq9dSpO6Zxn
|
||||
TatZx7eh39DfDNMX7cGBgVhiqdc5P/SVz43cXw8sIGpwZ+GyT3RrcbDrmv4+EoQI
|
||||
gV2g5U5xXnFkotY4Uy2wCXDGQwKBgQDWuCLo7E2d7sjmXNi28/bvAHMIzOGGF8C2
|
||||
ely9t5oZvobWkapCs4U9wwSnT+ENcaOxreOc0S9jJfmKovR2EnyvaNu2LafwP6+D
|
||||
7Oe2+7IBl2EbfOQBXnuMI2RR6zqn+B2y7gCxO8p0qE0InjoaqPuyXTnoCp45noN5
|
||||
Km7LhSofiwKBgQCEL4vB7v0uHuWcTl8PQbaC2SVWkRnju74hzRGbVJijcyYKFpW1
|
||||
bxMmFB0ZvBlIEuGcG0O5YnL0244m8xW1C7n607Hcnny4xwBy7ziNCB3816NnIMRW
|
||||
wcJKrPtJ6UAYdO823QO9HfPSMrMZf5PFIwqnVUrmZHIuLFponp3RIsw2HQKBgDg6
|
||||
XBn215SGFWIN6kputLl9uqIRVPWSfsrKXELqM5aOSC0kVBvHexrjWPKffmXQ3ncG
|
||||
/FXyiaBDL4fYiH/q82/T28VnS1UkuEep4DwQyVqVU76pA+Q/48ac9gZlvSSDWvOi
|
||||
U9gVujy2XgXluX2FxvO8ag+TyD96fR9bt0vggVllAoGADi1agqRzS8TllTDwcPH7
|
||||
+yXCmZ7n7cnbzNpwAa8/naceqS+/C1lS4UyE/TIQgI0vlKajHrOpFebd2xMTUk0P
|
||||
1J+8lQ6HNd++iYmNu4RuuM+TxtqXDRd8Ozik6vx6WReWbKfX2DaPmazA5P6XNmMn
|
||||
FcFEA3V2cehp0Y+ED/vtx4s=
|
||||
-----END PRIVATE KEY-----
|
||||
|
||||
Binary file not shown.
@@ -0,0 +1,18 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIC4DCCAcgCAQAwDQYJKoZIhvcNAQELBQAwNTELMAkGA1UEBhMCSlAxCjAIBgNV
|
||||
BAgMAUExCjAIBgNVBAcMAUExDjAMBgNVBAMMBW5lc3lzMB4XDTI1MDIwNTIzNTAw
|
||||
MloXDTM1MDIwMzIzNTAwMlowNzELMAkGA1UEBhMCSlAxCjAIBgNVBAgMAUExCjAI
|
||||
BgNVBAcMAUExEDAOBgNVBAMMB1BSRU1JVU0wggEiMA0GCSqGSIb3DQEBAQUAA4IB
|
||||
DwAwggEKAoIBAQC/FcSrSWvg3t/oHTQOq+R/r1+DFk5cUMhfz/pwwtRjNICXBOtK
|
||||
kbj/VjLfNgI1g/s44Uxk2AXlgR5wDR/osHGydsqfwAJozj7IFlaj7d2Xs+hyjxXO
|
||||
7DtGBhT39wvLDIiKrcsFrfz7WrsQK1Bzx7hGZT2LaksA/qbYfFslcARlVrQej9Pu
|
||||
vnAaiqRwUDtrx2DLFRqesvQS5pJMEMX0MTvJcusq5qZkEr0j2SJ65RjErZxFLqre
|
||||
KWgSn1HuEqGnHzeqhqqV4bl+71cWplHlxKixkEuqwpfchxWW2T3WgQMVAUp7XhtV
|
||||
z8uedzn1FYq6jdo7JUd9qw0bOrHHdBQDSjQ7AgMBAAEwDQYJKoZIhvcNAQELBQAD
|
||||
ggEBAFNw2Lah4i155AGnTuifH3pv4Y959m9PmBHWSxyiuadSlFMZfrcWqMcjBfDA
|
||||
A7/HiOmmpG5sgo9Q2SIRWrWsP5lq1IeWAjPlinlVLE7EsmnsPpTUc0fni3P6bql+
|
||||
fpTb1ngku3Ys3N/r5AhEFQ+y3Zd1G4aapw/aym40F8txI1evp8GX2p+HNp49KHTJ
|
||||
s+UFEYLXUJi6PjGV8Egj3vDf1brrRGiy1b5pVUDyy3QdqkM1ztiC4cVY2WvEjRUm
|
||||
cITNyijzPcOLUXu0ZjIM4zWFVc4va2e7oKt8rGR2FzvieIZwZUo9XmTb6MPCbQN+
|
||||
YSnkqWt84LJRVZk4s1rbUV10h/c=
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC/FcSrSWvg3t/o
|
||||
HTQOq+R/r1+DFk5cUMhfz/pwwtRjNICXBOtKkbj/VjLfNgI1g/s44Uxk2AXlgR5w
|
||||
DR/osHGydsqfwAJozj7IFlaj7d2Xs+hyjxXO7DtGBhT39wvLDIiKrcsFrfz7WrsQ
|
||||
K1Bzx7hGZT2LaksA/qbYfFslcARlVrQej9PuvnAaiqRwUDtrx2DLFRqesvQS5pJM
|
||||
EMX0MTvJcusq5qZkEr0j2SJ65RjErZxFLqreKWgSn1HuEqGnHzeqhqqV4bl+71cW
|
||||
plHlxKixkEuqwpfchxWW2T3WgQMVAUp7XhtVz8uedzn1FYq6jdo7JUd9qw0bOrHH
|
||||
dBQDSjQ7AgMBAAECggEBAI6J923qU/2nY5DrD+UN1mJk+LN5VTTJ0d6e7utkejgS
|
||||
dwWwVrAGaeCWdVZKHHW9IQ56CZmEB0n++iyNrcrOq9F7iYSHH4T8rJpnB3Q7QLwk
|
||||
KPYjxBnZ4BFJAiVCdNqfW89O+w4ejoMVWEskdFwZlF12seUoghCY5O7CPN99YtoP
|
||||
+71wUIUxlT3gveS/Aluw1KPhnGGfQYpGFiqKZTioOD1Njr71v2aL93CjukYXMTAu
|
||||
ikKV0i2YGB5+vzl254wOqubDS+tqINL//wuJWpNBWxsDqDXX3JzTpK0zpcjqBuDJ
|
||||
jze9OIYfCxF6mwrwceD7Ejoq+dYimtFg9kLcudp7J7kCgYEA6nvQcs7hHOA8mYQ/
|
||||
GnO+9gAf8zx6h7EQ5DdCNV9eV3/QY1cm/uRTh2T/YydLWLs+f5kLlXYey9u1FMM8
|
||||
ZErpYTdcKWXb8RFmf6FNkGHRQm2knQm/zqvlbYcnqwaGQyN+nDWvieZXZAeoui2e
|
||||
Pq0IRuq+30YAChO1NCEXgY3u5ocCgYEA0J59bifW3GRWvz2gfrR5lo0SEZvbH2Qy
|
||||
xfugZSzYH6WITjuQ8+TLhWwDMKQ9w17euiKihvQ1CdK+1Esj/KbzYBtA5zEyAST6
|
||||
RUmOc3oYjmbS1rT+RQPzpeORkqmw0i7u35gGTNcBNtQk7QmJ1zkJtBFJseqSrtiv
|
||||
zzR+F8UT/a0CgYEAr1AJBn2Es5k31bOZloZphPWM7cgO+Hq7XVWvS8ZU++iU/mD/
|
||||
x90gUn+BrjmHzPyZ+r6LeaDJ37MRzUc3VOjpWoUQg+cjLTbMQqpwGn33/cmKJNtQ
|
||||
LA47R8ugLe9/3JyiIdrFtr2gIyrSzPgkc0ndgWArezWT+/TGKwZ+058xuesCgYEA
|
||||
p5F2jKGhevt5ljkJDl0mgOAlUFGRK2DPS6m3By2DF8BdgQFliBIRy8Sbt1llZuVw
|
||||
H7CsPZwwcgh+UYVdjZYITPz3H/yq/rJV+IuByY2b5d3/oohU6Niov2nQRy7YIauj
|
||||
IaQ6A0R77C9wzZjoyCA/hAyS1j7lvV29scCnO66IRS0CgYAQYHmHSeybhpZfEMts
|
||||
dHTNDxTLyObVxgqRhMMx4s9sACYv1D0gby2gzbSz7O2jhPyE6ZT9U7aswnq+ejL4
|
||||
oBg0kkM8/1zvZRIbWAlqlFQXxG4K//yqaVTa2BpsRB1OPXyVKZ1q0WoWp/omdvIO
|
||||
nMJf7B6LZm4yaoIdqyBqdHVJhQ==
|
||||
-----END PRIVATE KEY-----
|
||||
Binary file not shown.
+13
-13
@@ -1,18 +1,18 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIC8DCCAdgCAQAwDQYJKoZIhvcNAQELBQAwRzELMAkGA1UEBhMCSlAxCjAIBgNV
|
||||
BAgMAUExCjAIBgNVBAcMAUExIDAeBgNVBAMMF1RhaXRvIEFyY2FkZSBNYWNoaW5l
|
||||
IENBMB4XDTI0MDIyMTAwNDIwMFoXDTM0MDIxODAwNDIwMFowNTELMAkGA1UEBhMC
|
||||
IENBMB4XDTI1MDIwNTIzNTAwMloXDTM1MDIwMzIzNTAwMlowNTELMAkGA1UEBhMC
|
||||
SlAxCjAIBgNVBAgMAUExCjAIBgNVBAcMAUExDjAMBgNVBAMMBW5lc3lzMIIBIjAN
|
||||
BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/RZZRet/bPypA5hGZCDEHwqDELdn
|
||||
IVdochdXVbESMUqiDMAI8njtuEMK4iqIKvHzGGWEV1zzm9+zKPpPLsZKOkjfKfHq
|
||||
8S9Hjy/kPaqXkuZupCPnlnuFNtp4zl/wyhFC0MQOhau12aXV72f458LYISPwahhk
|
||||
Mo5unyA0y6Bzp/BwmoIGpF2dKn0hBdAAT1D39X8tQY+sT0njp5a5v8z25tv4eDrw
|
||||
Fijy0N75YjUPiobzlO0uqyfK0oGefUwVuCb/hNIJzvg102JoLX8Wpk+X+0CxpYT8
|
||||
xP9MiYyEm1/w3GQplF6Bf7XGVXCyB+XPU/nYPsyaJ/KOHcImhUKyeIP7BQIDAQAB
|
||||
MA0GCSqGSIb3DQEBCwUAA4IBAQCz4UKaRZdRErTs7naLiFNfBo4bLiID/lTQ+Jax
|
||||
8t8LvpGCycKalthlbW5SRqt8W1CIrOTlOdGEsCC0ehBYAWHzYAHfRVn4u9l1U06U
|
||||
246GNKFqhfr6pHHyJWVY1SvXHLZStuPxxS0y0Gb/T6nRzy3yaAB3hJSkRs9Lm6cd
|
||||
HTEWmFLmP/NffC2eziidVaTA/2Dp3rWgQknTIqIOadNMJkl91sceE0lYSxDf/2oJ
|
||||
69Ocubp26JCn106dTbd0osOyH7/OFiwdTXag/F0hQWry6FTtp/VdWEl8SUKQdFSf
|
||||
hF14QZAMRCAQoz+epHLZDa9crqeEqirYJJikdF+HsiJl5SrH
|
||||
BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4NAgMuu9k07MDMNgrcksgbdfsyVW
|
||||
+Qkq888cBY10DSS5CLoPS+Ga4/YpA7cNDEXKdnk/Dl3+DD0Gmel0C8AENhSN45jw
|
||||
F1y4ElJh/kc5AIE30ogXns4oCcDGAOGNMkehOqwpoAXB748fTA3Xxs4tm0t+o0G2
|
||||
UbfTy0MdeUpttJVgrGUhFePD6+U8mJ2Q3AveDGL4F3aGGgfILbwierzIYY3mQwjG
|
||||
P1jjCNyK9aD+Pm/H3rxDBkAKPYEgsUO7uPZ2aaxBz+XEJ3gAqgh5EIQvk3CYSBCa
|
||||
HHUePyII4Q3xv20gUu89BE412LyLtvFHGgZi/dwEw8iHzvQhvFBWr3uRDQIDAQAB
|
||||
MA0GCSqGSIb3DQEBCwUAA4IBAQC/dJqdOdBxJb8fopg5Y+HPBJEWNuvkrQsvAyoB
|
||||
j7Cz62i+idueR67mebX3PzRAgY0hcLJ2tcRYCMwJ5znpZOJq5v0Kg/z3s2TWB8Tw
|
||||
ghd/QIzyE2WIl5kBArKsjsjFrBDzF/5IoZhV8X7uvCqFcd6637mG8urpMammoJgr
|
||||
LepICRAbShAkUVR1fBgcsxGXxKiCwQBa6/ftqPjXpfUqOG/mxSeLeMZLfgatGU8H
|
||||
QKZRAYe88RBmK23dDMNV6wqi935F0OY8FWv3gBHs/Q5fABm87sOj/j/idlBrToEs
|
||||
LKVdsiqdhZdmbG4B/z3Z/etb8yQ0lQCLLoTUP+hzVrSpZ/zA
|
||||
-----END CERTIFICATE-----
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
-----BEGIN CERTIFICATE REQUEST-----
|
||||
MIICejCCAWICAQAwNTELMAkGA1UEBhMCSlAxCjAIBgNVBAgMAUExCjAIBgNVBAcM
|
||||
AUExDjAMBgNVBAMMBW5lc3lzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
|
||||
AQEA/RZZRet/bPypA5hGZCDEHwqDELdnIVdochdXVbESMUqiDMAI8njtuEMK4iqI
|
||||
KvHzGGWEV1zzm9+zKPpPLsZKOkjfKfHq8S9Hjy/kPaqXkuZupCPnlnuFNtp4zl/w
|
||||
yhFC0MQOhau12aXV72f458LYISPwahhkMo5unyA0y6Bzp/BwmoIGpF2dKn0hBdAA
|
||||
T1D39X8tQY+sT0njp5a5v8z25tv4eDrwFijy0N75YjUPiobzlO0uqyfK0oGefUwV
|
||||
uCb/hNIJzvg102JoLX8Wpk+X+0CxpYT8xP9MiYyEm1/w3GQplF6Bf7XGVXCyB+XP
|
||||
U/nYPsyaJ/KOHcImhUKyeIP7BQIDAQABoAAwDQYJKoZIhvcNAQELBQADggEBANF+
|
||||
3vv0YO3XD1Zy9RuaVjRQbho+d8eB5ahA0Efd37xJccZgU9T9DioTw06Ja8ZQi0qt
|
||||
JscKRHPFhA1j20ahfUki40eEL+HoX/PyOIRxtgbas8qOpbPuwPeWGYH/OrSGs2yF
|
||||
Q2y35m8oDL/PisMqx00OBPvjFYmZXZtAOfbdsjQAoaefdLwYVgX5fPKvQ7CD1Pxq
|
||||
hwwsfbkzgACVk99Krn1UNe8fuoFYwJtFQFeaHtKiKq/flkfB0kbzHqQy5EgHCanh
|
||||
bNlpEzv/9ag1FMI2FsayJcZll3mpYb8NcgF9HqE4KTaVcVR/zxbDlGJCCsnRoWsP
|
||||
7S5ZtMqNI3SppEl/msU=
|
||||
-----END CERTIFICATE REQUEST-----
|
||||
+26
-26
@@ -1,28 +1,28 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQD9FllF639s/KkD
|
||||
mEZkIMQfCoMQt2chV2hyF1dVsRIxSqIMwAjyeO24QwriKogq8fMYZYRXXPOb37Mo
|
||||
+k8uxko6SN8p8erxL0ePL+Q9qpeS5m6kI+eWe4U22njOX/DKEULQxA6Fq7XZpdXv
|
||||
Z/jnwtghI/BqGGQyjm6fIDTLoHOn8HCaggakXZ0qfSEF0ABPUPf1fy1Bj6xPSeOn
|
||||
lrm/zPbm2/h4OvAWKPLQ3vliNQ+KhvOU7S6rJ8rSgZ59TBW4Jv+E0gnO+DXTYmgt
|
||||
fxamT5f7QLGlhPzE/0yJjISbX/DcZCmUXoF/tcZVcLIH5c9T+dg+zJon8o4dwiaF
|
||||
QrJ4g/sFAgMBAAECggEBAK83Fb8udx3BHlH6zmDrvluvL2YXUzLmDM1QE4qj+HBf
|
||||
tykUmh0kU4/J+nLx9yukLiSpw6GoHI/Bo4uvH7rGVQVdBgNIFNu9W9Fp2p5GyIFP
|
||||
PzIsGV05TtTXE+Ps0AtVP+jAkz0/z7pK8X25gb0STAdFlmAdWuEVcsh/x41iHDAb
|
||||
CaZ8XxNgVETq7g6E/UtFsOImEKdZk2MD55Xvzo3cXwEyNSKxVoRQftAndOgOyj5D
|
||||
Z1XMlBfNzyQks92TMoppOE7gPRjiEScxbQiyTOLBkQIgEcBcBXIbSI5lGA5aB1Ul
|
||||
Y7Hkgt9pnwntM+sqlNYC19odTJFJl98geE+ZWdtEkdECgYEA//aF7Si6mOMqBHsx
|
||||
j/INnx29EEMERpHIFX5q9sueS1uZSY7k9dKm7lCIqAVaFp/BROM//cJAMUmltVBh
|
||||
kqgu/aKMSkv7vProXh/nWFb1f6qscupyBn5vwuovx2DEAqLypRe0AlMVjXJ9ou8z
|
||||
oQHQh4zJrabjXDfLNbFUAjInCasCgYEA/R+4FyMf5JWwTfthAdeu150bfkI3YVYC
|
||||
ep9kBfOljwIIwhFE3QzULHHbjyMDRH6iiJF4mDp7GBFhNAYgEUh11jCVcHf/9XEe
|
||||
aGyzw+DodiLCCcgQVXWodhdDEH0yy3NC1xIpa6FIPAayhhnD5cfn1QMM1sz95olR
|
||||
JvKpdhapPg8CgYEAwFQgtd8QtqiafduDlkGu8oyJ75orsEsCKQRgoyjEvKMLPzZb
|
||||
3Ep4nEFvLbE3zCAmPPj0sFwxl9da6C6J4oT1Kiflej413f46c99NGhfdSByaj46S
|
||||
N0bx+2e0lv+iyMhfwqVY4RZE74/Dz5YlGSof4nprYEwyMqzJyIKCOVQt+RkCgYBo
|
||||
4IWUAJesTGE6TleJPeZRq+TCUYlEqTBpwjTdSnBkaoFad3FC7ZfTunEwQ1+NN7L8
|
||||
RtniqQhrlnfh6E/NGWrJjmO8r9u7xFzHA5MQK9XlbM1c5CnwXsmn9EdzQ4ySQ3WE
|
||||
SyAiWjbluBir+2zxffyOg68EKPdiV67qJk0Ugpso/QKBgHGZMxR8HUxMXvQAe4a1
|
||||
IzO7BB1p603QpJhjiEdGk0hebdTlgidH/K66qXF/yC65WUKRrkmB9FJn2XHRixYm
|
||||
LfkK/Ri+E7HvU3Jh+TA9EIFjfBEwmyW5e3lRnsUTPvWqpYfkZ4CpVWvK9ToiVSvk
|
||||
54cxC1xymzbdz2s2j0t6PKcB
|
||||
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDg0CAy672TTswM
|
||||
w2CtySyBt1+zJVb5CSrzzxwFjXQNJLkIug9L4Zrj9ikDtw0MRcp2eT8OXf4MPQaZ
|
||||
6XQLwAQ2FI3jmPAXXLgSUmH+RzkAgTfSiBeezigJwMYA4Y0yR6E6rCmgBcHvjx9M
|
||||
DdfGzi2bS36jQbZRt9PLQx15Sm20lWCsZSEV48Pr5TyYnZDcC94MYvgXdoYaB8gt
|
||||
vCJ6vMhhjeZDCMY/WOMI3Ir1oP4+b8fevEMGQAo9gSCxQ7u49nZprEHP5cQneACq
|
||||
CHkQhC+TcJhIEJocdR4/IgjhDfG/bSBS7z0ETjXYvIu28UcaBmL93ATDyIfO9CG8
|
||||
UFave5ENAgMBAAECggEAcrFbq/7fAbcynNRUj3TR8v+1oDTNkVHfCvG/rwmCim4Q
|
||||
xGYABct8dQ6R0CZkTr2QVC75P4Auatn7cyxKGvCEdX65AMN2wcR42EgVXF/DsgE6
|
||||
lHr/6fHtNUSW/74ShfNLSx6oQc6OKYSQCAIL8o4fcFnsqqeMt1YchFeiQs34+CZE
|
||||
aQQRdwL7mU6NyLz1VlMg52ra+03itW74nLKdW4S6P/oKHQDddx8qBFD83CCE0L4k
|
||||
TanIFqLdvxD/XXiqUdyNGxnS94Ltpo5ouATbjktJsa6gYn8Hv+CD/0emu34p8Rgh
|
||||
MWYU8Yg4/wgVqUw5cb+up4A1NKd0ELPGDcXDL2enQQKBgQD5mX98FBXHUxJSTczq
|
||||
HnG5l6ZD9arXgyXLQeIRh5SnaQWH/B8EK8lGTXIWuyRTBYMCrMzAmzWh0RzcpOTZ
|
||||
pGMUybzjkAt5TDHkD6ynH6nVjPbt8lM97SYWonEwZwSL38HJeh3MlGJU0TFJYlXS
|
||||
67Ibh0R88EIqY6bvHsq94+BGvQKBgQDmk+phXhwYW5W4+zAZOHzclDFF5eYREwuf
|
||||
3WzKRTJzpFSQDXM8vmA/RXkJ4HMXP3ypS7ULkYX3y22MzkxHcVROXvYVIDlRXGkR
|
||||
41ZhJFZhvFtArg5R0YNDrCEZgOXaOtQrgZtXpd5uDiig5wipne55KUDQSjKmN6S1
|
||||
GIEcQjmAkQKBgGU+9o+GNi9caxonpO9y2f7GnRMEHAC/mh0Q5Hrn3EzsNOosQwiW
|
||||
GlcCIz1FPD7RBYuYPJYEX4T8JhD6cjo2jFpqWsyUKZNSbQptsUM5fNK7E48BtPJx
|
||||
t/mGexN/NkDmytzHRD8wEZMGKE/0K4wbP2wbOpTTgINhWN22R9cvEFKhAoGAdne5
|
||||
DJ3VwY4MtyYX6F1lic96IXelZVBrwI97vdEfwtrDt9+xPZxyxw9iyPhRKbiszC7h
|
||||
rjfupQoYFyhHeM15i2qu9NvBl1PriA1N7EtHNqAYIntLUC5dSv+9YeUgM6fWKyRE
|
||||
NBw81D7iEQmjIcLLK+VOL7Zvn4cnUQRuEZ7U/IECgYA/KZe7PJsM8iAFjxvVi4Jm
|
||||
r2QnU7f7VSEPq/6CnYnjQbLNBj54dL47YLsBF5hZ+PJYSYCX4SgRSNae65FK3GcD
|
||||
B7S6AJaaVKuQnRFyQcMGH0aAQMIEnM537JzD07+pfRAyTAowNkmv2r/MHGRwa8dU
|
||||
PJNKw7RQVIY6sHzv+eXiuA==
|
||||
-----END PRIVATE KEY-----
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
AF42C2A18772915D
|
||||
@@ -1,18 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIC7DCCAdQCCQCvQsKhh3KRXTANBgkqhkiG9w0BAQsFADA1MQswCQYDVQQGEwJK
|
||||
UDEKMAgGA1UECAwBQTEKMAgGA1UEBwwBQTEOMAwGA1UEAwwFbmVzeXMwHhcNMjQw
|
||||
MjIxMDQzMDQ0WhcNMzQwMjE4MDQzMDQ0WjA7MQswCQYDVQQGEwJKUDEKMAgGA1UE
|
||||
CAwBQTEKMAgGA1UEBwwBQTEUMBIGA1UEAwwLKi5oYXkxdHMubWUwggEiMA0GCSqG
|
||||
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCfa3fEOLumZsrY4l8gK6FwAefAawAVH6SZ
|
||||
suNSY3x3gizZcbKlUlEb+Ctm9rgiagO78eyX5vHggW3WdUshN38OULWSXLsl6dRB
|
||||
qw4i9KYZjMZ7qD38qqplbeq0llOJwpcZYLgh981yb6KtFlNlFXG7/Wc5VAoahjn8
|
||||
wBVMbU5hpHWO2qWer+ih3zS2U53nVVVlgGkN9uBhQXtaknW53zNEyoeI3TdpT6Eu
|
||||
5yyO97UL08V2JolZY9e24GkUbvc4yvy5NofOeXTlaW1mIxmrwLxA4Pmjng1jn67C
|
||||
9m6p4skRjw4Xm+LgvkbJzJqpGRuqb2TurNjxhuXjLu5WZKJH3y1pAgMBAAEwDQYJ
|
||||
KoZIhvcNAQELBQADggEBAGqKO9qH0kwoCzpVZErKA6rtArHWU+Qd+lYmrzN4ZH9H
|
||||
w7Gl4/z+GVhna6CLlgvrD/g7J5jU9Yo/5s0Td5ScckBR8v9GJ32IvcvK2yvvYHvE
|
||||
6A8j5TkPpnPrXViNOYtb97irnU1sDnFy8CU1rSMfG6sPr7QF+D7h8IEuMo+IXaAW
|
||||
+2rRG5o5E21c4nXmDSuATm4B/YadnHek86AHAsQMbJXVBUhBZ3+olyttvGJQAE3j
|
||||
mXza8btMoEy24/Xw3FkuK21JlwS5W3Oy6M4kJUSQnJ1zGUYk34i5UsABpDoIOdVQ
|
||||
gmWgzoRLisvVVaeAk9V04T+4qBLFJmHr+w+9rW0O8jw=
|
||||
-----END CERTIFICATE-----
|
||||
@@ -1,16 +0,0 @@
|
||||
-----BEGIN CERTIFICATE REQUEST-----
|
||||
MIICgDCCAWgCAQAwOzELMAkGA1UEBhMCSlAxCjAIBgNVBAgMAUExCjAIBgNVBAcM
|
||||
AUExFDASBgNVBAMMCyouaGF5MXRzLm1lMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
|
||||
MIIBCgKCAQEAn2t3xDi7pmbK2OJfICuhcAHnwGsAFR+kmbLjUmN8d4Is2XGypVJR
|
||||
G/grZva4ImoDu/Hsl+bx4IFt1nVLITd/DlC1kly7JenUQasOIvSmGYzGe6g9/Kqq
|
||||
ZW3qtJZTicKXGWC4IffNcm+irRZTZRVxu/1nOVQKGoY5/MAVTG1OYaR1jtqlnq/o
|
||||
od80tlOd51VVZYBpDfbgYUF7WpJ1ud8zRMqHiN03aU+hLucsjve1C9PFdiaJWWPX
|
||||
tuBpFG73OMr8uTaHznl05WltZiMZq8C8QOD5o54NY5+uwvZuqeLJEY8OF5vi4L5G
|
||||
ycyaqRkbqm9k7qzY8Ybl4y7uVmSiR98taQIDAQABoAAwDQYJKoZIhvcNAQELBQAD
|
||||
ggEBAHQoS2g/eIlzHJvpwuUIJCGeoI/O80Nubt9m9Oz+Bzw0BoUrBjS6RGd6fswm
|
||||
nuvjFeOObLEkMWHot45ESLcBtc+yBjBaJwSRUpwWpHtPL5ROzZTAr+iXuOohJ9LU
|
||||
WBDXC+phSuHqVPsPnWqofBYlQubWDjIXIlSuWQe9zTRCVYhPpPwopr9QGnBkt/Nb
|
||||
pufDIs31D38BzP8QOCpzgAfD2c+7M4T+4rgtqYEs3TeXZnQ1g7kEl8VVkaDegdCZ
|
||||
3lqe6yo5i2oQofN2gcNYkBm2plv5hr3EYSa/3QXpTyB/U74lGjyHU1cAvgXepSmh
|
||||
N61JkbrECSGG0nWBi4IbVEqJeRc=
|
||||
-----END CERTIFICATE REQUEST-----
|
||||
@@ -1,28 +0,0 @@
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCfa3fEOLumZsrY
|
||||
4l8gK6FwAefAawAVH6SZsuNSY3x3gizZcbKlUlEb+Ctm9rgiagO78eyX5vHggW3W
|
||||
dUshN38OULWSXLsl6dRBqw4i9KYZjMZ7qD38qqplbeq0llOJwpcZYLgh981yb6Kt
|
||||
FlNlFXG7/Wc5VAoahjn8wBVMbU5hpHWO2qWer+ih3zS2U53nVVVlgGkN9uBhQXta
|
||||
knW53zNEyoeI3TdpT6Eu5yyO97UL08V2JolZY9e24GkUbvc4yvy5NofOeXTlaW1m
|
||||
IxmrwLxA4Pmjng1jn67C9m6p4skRjw4Xm+LgvkbJzJqpGRuqb2TurNjxhuXjLu5W
|
||||
ZKJH3y1pAgMBAAECggEASetW2VFFEV9QZ0hvu0b/0CPSBdKXczP86peb+DPRHsjp
|
||||
atnhb+6/VSy5U0DLGIn3uUnv3m9jcCoTeAFjGL/W1hhuWLNOw8GsfdaG84ZlDivM
|
||||
TMIyG9o2sFlLHvklOxdTYJ0MRBPW210QHRnhCVnsJrLVDiv9k1bxxFR8i7eTRIp1
|
||||
68EIIOdcLGVvTvLE1LmIWlF+RpoVBf8fIMZt+xV9litfM5BShYVibx4g1OPvBCsg
|
||||
FEzSme7C4Dh5SbiJmMUD0LiLJnu0J98bfECtEGQyDMDy6b+20C2/OoYCRCCElxHN
|
||||
D+ExJWNcR6TPI4ZAIhXcXmu5GEe6STMZdVRs4UUbEQKBgQDMl0cYcFriA5leJ/15
|
||||
XaooxyV75aJc0aAtYnzUKhji3mTGHDUQqtATaD4AoecZNbAqFOBp6fxU9ggzI55n
|
||||
Hk0l+qUFkES1zuMGBjca/NUcfRX796mWIX3hGdMgA3beiUDEmwXeruiKFLaMxD45
|
||||
GLzUtDjpwGVwMVGNHrAHldOKBwKBgQDHendhoKNuTruuSMRvwT/n8b2wVS2ykYQU
|
||||
UEH8zT5OJSapirgSnHbteQRbg+N0cXdxvBTD47d32AiwT8JH6ZMQN73bE+zhkGpF
|
||||
lNv6Oel7BsrCAR7AYgFS7pyckw5DxFWqa5VeE/DiHrf7J8Q+QdnvY0KBEYP4Oyui
|
||||
/dS7q8txDwKBgDMyaAgllZiZbfex6ixE1CAANdEbVdYEXyD8VGCDaFbdcDpjNKRH
|
||||
GmrA20MtQLd+R+c/8iiO9SYNq1+gujLz0jp+zmzl/UvBye3oAEIwouPOKYI0J6v6
|
||||
FZYO8FZCh6yIjDymzoE7I9Xp+QSg1zFSj25q6xMTok7BCLdXxpUfWSBhAoGAOXQw
|
||||
hlH6QH8011HmIjoK6gdalzsxWklHPYKQPvvught5M0PdGJ8wMd21P5aRIKy9tmhx
|
||||
oqon4cC7X+zZDFVeIkGr0Tm/9Iff1AK4CS487U5bf91KuiaAMx6+xOomJaaa9ebe
|
||||
sqYTr00huJkPkM7usmBoezxMQmbofp2VdChbBEkCgYBXrCTpXvyE7xrOOk3xq1/d
|
||||
6QoD0IlXQ3jFrvfq0nbP2mbkqfLihXBKhk210SlQc29tYreQjXDUYz2AtFY6Y1Lg
|
||||
Udk9w6brlMdMKfSIWinar+WHIlLeddB+2lSoh3HlwBaXOxSRsCwxt6r40zNB69Ed
|
||||
//VqFxmwfwxpJGZZqPhC6Q==
|
||||
-----END PRIVATE KEY-----
|
||||
+98
-78
@@ -15,24 +15,21 @@
|
||||
#include "util/str.h"
|
||||
|
||||
/*
|
||||
* There are 2 certs we care about within this hook, the client cert,
|
||||
* and server cert. The client cert is usually stored in a p12 file and
|
||||
* identifies the game cabinet, and what nesica plan the game should use
|
||||
* for billing. It's used in mTLS so the server can verify the client.
|
||||
* The server cert is used for SSL cert pinning so the client can verify
|
||||
* the server. Unless the server you're connecting to requires a proper
|
||||
* mTLS setup, you can pretty safely disregard the client cert as long as
|
||||
* it exists and the game can find it. The server cert is traditionally
|
||||
* gotten around by adding the server's CA cert to the PCs root store, but
|
||||
* that sucks for UX and is generally not a good idea, so this hook aims
|
||||
* to replace (or disable the need for, if able) the server cert without
|
||||
* having to mess with CA stores.
|
||||
* The game uses a client cert to do mTLS. We can either bypass this if we're
|
||||
* connecting to a server that doesn't care, or splice in our own if it does.
|
||||
* For server TLS verification the client just uses whatever certs are trusted
|
||||
* on the PCBs root store, which we can't easily modify, but we can just set
|
||||
* security flags such that it ignores any issues with the server's cert. As
|
||||
* far as I can tell, no actual client-side validation of the client cert is
|
||||
* done, so ANY cert here should work.
|
||||
*/
|
||||
|
||||
static CRITICAL_SECTION cert_lock;
|
||||
static wchar_t path[MAX_PATH];
|
||||
HCERTSTORE p12store;
|
||||
PCCERT_CONTEXT client_cert_ctx = NULL;
|
||||
|
||||
PCCERT_CONTEXT WINAPI hook_CertFindCertificateInStore(
|
||||
PCCERT_CONTEXT WINAPI my_CertFindCertificateInStore(
|
||||
HCERTSTORE hCertStore,
|
||||
DWORD dwCertEncodingType,
|
||||
DWORD dwFindFlags,
|
||||
@@ -41,7 +38,7 @@ PCCERT_CONTEXT WINAPI hook_CertFindCertificateInStore(
|
||||
PCCERT_CONTEXT pPrevCertContext
|
||||
);
|
||||
|
||||
HCERTSTORE WINAPI hook_CertOpenStore(
|
||||
HCERTSTORE WINAPI my_CertOpenStore(
|
||||
LPCSTR lpszStoreProvider,
|
||||
DWORD dwEncodingType,
|
||||
HCRYPTPROV_LEGACY hCryptProv,
|
||||
@@ -49,7 +46,7 @@ HCERTSTORE WINAPI hook_CertOpenStore(
|
||||
const void *pvPara
|
||||
);
|
||||
|
||||
static BOOL hook_WinHttpSetOption(
|
||||
static BOOL my_WinHttpSetOption(
|
||||
HINTERNET hInternet,
|
||||
DWORD dwOption,
|
||||
LPVOID lpBuffer,
|
||||
@@ -85,12 +82,12 @@ void ca_error_cb(HINTERNET hInternet, DWORD_PTR dwContext, DWORD dwInternetStatu
|
||||
static const struct hook_symbol cert_syms[] = {
|
||||
{
|
||||
.name = "CertFindCertificateInStore",
|
||||
.patch = hook_CertFindCertificateInStore,
|
||||
.patch = my_CertFindCertificateInStore,
|
||||
.link = (void **) &next_CertFindCertificateInStore,
|
||||
},
|
||||
{
|
||||
.name = "CertOpenStore",
|
||||
.patch = hook_CertOpenStore,
|
||||
.patch = my_CertOpenStore,
|
||||
.link = (void **) &next_CertOpenStore,
|
||||
},
|
||||
};
|
||||
@@ -98,7 +95,7 @@ static const struct hook_symbol cert_syms[] = {
|
||||
static const struct hook_symbol winhttp_syms[] = {
|
||||
{
|
||||
.name = "WinHttpSetOption",
|
||||
.patch = hook_WinHttpSetOption,
|
||||
.patch = my_WinHttpSetOption,
|
||||
.link = (void **) &next_WinHttpSetOption,
|
||||
},
|
||||
};
|
||||
@@ -128,6 +125,64 @@ HRESULT cert_hook_init(const struct cert_config *cfg)
|
||||
(struct hook_symbol *) winhttp_syms,
|
||||
_countof(winhttp_syms));
|
||||
|
||||
if (cfg->path[0] != L'\0') {
|
||||
char client_cert_bfr[4096] = {0};
|
||||
BYTE client_cert_decode_bfr[4096] = {0};
|
||||
DWORD pcbBinary = 4096;
|
||||
DWORD cert_size = 0;
|
||||
HRESULT cert_hr;
|
||||
|
||||
HANDLE client_cert_file = CreateFileW(cfg->path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||
if (client_cert_file == INVALID_HANDLE_VALUE) {
|
||||
cert_hr = HRESULT_FROM_WIN32(GetLastError());
|
||||
dprintf("Cert: CreateFileW Failed to open cert %ls because %X, using WINHTTP_NO_CLIENT_CERT_CONTEXT\n", cfg->path, (int)cert_hr);
|
||||
//SetLastError(0);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
if (!ReadFile(client_cert_file, client_cert_bfr, 4096, &cert_size, NULL)) {
|
||||
cert_hr = HRESULT_FROM_WIN32(GetLastError());
|
||||
dprintf("Cert: ReadFile Failed to open cert %ls because %X, using WINHTTP_NO_CLIENT_CERT_CONTEXT\n", cfg->path, (int)cert_hr);
|
||||
//SetLastError(0);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
dprintf("Cert: Read %d bytes\n", (int)cert_size);
|
||||
|
||||
if (wcsstr(cfg->path, L".p12") == NULL) {
|
||||
if (!CryptStringToBinaryA(client_cert_bfr, cert_size, CRYPT_STRING_BASE64X509CRLHEADER, client_cert_decode_bfr, &pcbBinary, NULL, NULL)) {
|
||||
cert_hr = HRESULT_FROM_WIN32(GetLastError());
|
||||
dprintf("Cert: CryptStringToBinaryA Failed to decode cert %ls because %X, using WINHTTP_NO_CLIENT_CERT_CONTEXT\n", cfg->path, (int)cert_hr);
|
||||
//SetLastError(0);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
client_cert_ctx = CertCreateCertificateContext(X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, client_cert_decode_bfr, pcbBinary);
|
||||
if (client_cert_ctx == NULL) {
|
||||
dprintf("Cert: CertCreateCertificateContext Failed to parse cert %ls, using WINHTTP_NO_CLIENT_CERT_CONTEXT\n", cfg->path);
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
struct _CRYPTOAPI_BLOB blob = {
|
||||
.cbData = cert_size,
|
||||
.pbData = (BYTE *)client_cert_bfr
|
||||
};
|
||||
|
||||
//p12store = CertOpenStore(CERT_STORE_PROV_PKCS12, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, 0, CERT_STORE_READONLY_FLAG, &blob);
|
||||
p12store = PFXImportCertStore(&blob, NULL, 0);
|
||||
if (p12store == NULL) {
|
||||
cert_hr = HRESULT_FROM_WIN32(GetLastError());
|
||||
dprintf("Cert: CertOpenStore Failed to decode p12 data %ls because %X, using WINHTTP_NO_CLIENT_CERT_CONTEXT\n", cfg->path, (int)cert_hr);
|
||||
//SetLastError(0);
|
||||
return S_OK;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
dprintf("Cert: Using client cert from %ls\n", cfg->path);
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
@@ -145,7 +200,7 @@ void cert_hook_insert_hooks(HMODULE target)
|
||||
_countof(winhttp_syms));
|
||||
}
|
||||
|
||||
PCCERT_CONTEXT WINAPI hook_CertFindCertificateInStore(
|
||||
PCCERT_CONTEXT WINAPI my_CertFindCertificateInStore(
|
||||
HCERTSTORE hCertStore,
|
||||
DWORD dwCertEncodingType,
|
||||
DWORD dwFindFlags,
|
||||
@@ -157,36 +212,20 @@ PCCERT_CONTEXT WINAPI hook_CertFindCertificateInStore(
|
||||
char bfr[4096] = {0};
|
||||
uint8_t bfr_decode[4096] = {0};
|
||||
DWORD pcbBinary = 4096;
|
||||
wchar_t cert_path[MAX_PATH] = {0};
|
||||
DWORD num_read = 0;
|
||||
PCCERT_CONTEXT cert_ctx = NULL;
|
||||
|
||||
if (dwFindType == CERT_FIND_ISSUER_STR || dwFindType == CERT_FIND_SUBJECT_STR) {
|
||||
wcscat_s(cert_path, _countof(cert_path), path);
|
||||
wcscat_s(cert_path, _countof(cert_path), L"/");
|
||||
wcscat_s(cert_path, _countof(cert_path), (wchar_t *)pvFindPara); // use the search string as a name
|
||||
wcscat_s(cert_path, _countof(cert_path), L".cer");
|
||||
if (client_cert_ctx != NULL) {
|
||||
if (dwFindType == CERT_FIND_ISSUER_STR || dwFindType == CERT_FIND_SUBJECT_STR) {
|
||||
wchar_t cert_issuer[129];
|
||||
|
||||
// dprintf("Cert: Look for override cert at %S\n", cert_path);
|
||||
|
||||
HANDLE f = CreateFileW((LPCWSTR)cert_path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||
|
||||
if (f != INVALID_HANDLE_VALUE) {
|
||||
//dprintf("Cert: Read file %S\n", cert_path);
|
||||
ReadFile(f, bfr, sizeof(bfr), &num_read, NULL);
|
||||
CloseHandle(f);
|
||||
|
||||
if (bfr[0]) {
|
||||
dprintf("Cert: Override %S\n", cert_path);
|
||||
if (CryptStringToBinary(bfr, 0, CRYPT_STRING_BASE64X509CRLHEADER, bfr_decode, &pcbBinary, NULL, NULL)) {
|
||||
cert_ctx = CertCreateCertificateContext(X509_ASN_ENCODING, bfr_decode, num_read);
|
||||
if (cert_ctx != NULL) {
|
||||
return cert_ctx;
|
||||
}
|
||||
dprintf("Cert: Override FAIL %08X\n", (int)GetLastError());
|
||||
}
|
||||
dprintf("Cert: CryptStringToBinary FAIL %08X\n", (int)GetLastError());
|
||||
CertGetNameStringW(client_cert_ctx, CERT_NAME_FRIENDLY_DISPLAY_TYPE, CERT_NAME_ISSUER_FLAG, NULL, cert_issuer, 129);
|
||||
if (!wcscmp(cert_issuer, (wchar_t *)pvFindPara)) {
|
||||
dprintf("Cert: Issuer %ls found, sending cert context %p\n", (wchar_t *)pvFindPara, cert_issuer);
|
||||
return CertDuplicateCertificateContext(client_cert_ctx);
|
||||
}
|
||||
|
||||
dprintf("Cert: Issuer %ls requested, found %ls in loaded cert context %p\n", (wchar_t *)pvFindPara, cert_issuer, client_cert_ctx);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -200,7 +239,7 @@ PCCERT_CONTEXT WINAPI hook_CertFindCertificateInStore(
|
||||
);
|
||||
}
|
||||
|
||||
HCERTSTORE WINAPI hook_CertOpenStore(
|
||||
HCERTSTORE WINAPI my_CertOpenStore(
|
||||
LPCSTR lpszStoreProvider,
|
||||
DWORD dwEncodingType,
|
||||
HCRYPTPROV_LEGACY hCryptProv,
|
||||
@@ -215,6 +254,10 @@ HCERTSTORE WINAPI hook_CertOpenStore(
|
||||
dprintf("Cert: Open store for %s\n", lpszStoreProvider);
|
||||
}
|
||||
|
||||
if (p12store != NULL) {
|
||||
return CertDuplicateStore(p12store);
|
||||
}
|
||||
|
||||
HCERTSTORE ret = next_CertOpenStore(lpszStoreProvider, dwEncodingType, hCryptProv, dwFlags, pvPara);
|
||||
if (ret == NULL) {
|
||||
int err = GetLastError();
|
||||
@@ -227,30 +270,9 @@ HCERTSTORE WINAPI hook_CertOpenStore(
|
||||
dprintf("Cert: Failed to open store %08X\n", (int)err);
|
||||
}
|
||||
return ret;
|
||||
/*HANDLE f = CreateFileW(path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||
|
||||
if (f != INVALID_HANDLE_VALUE) {
|
||||
dprintf("Cert: Read file %S\n", path);
|
||||
ReadFile(f, bfr, sizeof(bfr), &num_read, NULL);
|
||||
CloseHandle(f);
|
||||
|
||||
if (bfr[0]) {
|
||||
CRYPT_INTEGER_BLOB blob = {
|
||||
.pbData = bfr,
|
||||
.cbData = num_read
|
||||
};
|
||||
dprintf("Cert: detour open of %S to %S\n", (wchar_t *)pvPara, path);
|
||||
HCERTSTORE ret = next_CertOpenStore(CERT_STORE_PROV_PKCS12, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, hCryptProv, dwFlags, &blob);
|
||||
dprintf("Cert: Open %p\n", ret);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
return next_CertOpenStore(lpszStoreProvider, dwEncodingType, hCryptProv, dwFlags, pvPara);*/
|
||||
|
||||
}
|
||||
|
||||
static BOOL hook_WinHttpSetOption(
|
||||
static BOOL my_WinHttpSetOption(
|
||||
HINTERNET hInternet,
|
||||
DWORD dwOption,
|
||||
LPVOID lpBuffer,
|
||||
@@ -258,25 +280,23 @@ static BOOL hook_WinHttpSetOption(
|
||||
)
|
||||
{
|
||||
if (dwOption == WINHTTP_OPTION_CLIENT_CERT_CONTEXT) {
|
||||
// This is U G L Y and will fail on servers that actually check the client cert.
|
||||
dprintf("Cert: Block WINHTTP_OPTION_CLIENT_CERT_CONTEXT\n");
|
||||
dprintf("Cert: Set client cert\n");
|
||||
|
||||
// Set our SSL error callback
|
||||
WINHTTP_STATUS_CALLBACK cb_check = WinHttpSetStatusCallback(hInternet, (WINHTTP_STATUS_CALLBACK)ca_error_cb, WINHTTP_CALLBACK_FLAG_SECURE_FAILURE, 0);
|
||||
if (cb_check == WINHTTP_INVALID_STATUS_CALLBACK) {
|
||||
dprintf("Cert: Failed to set SSL error callback: %08lX\n", GetLastError());
|
||||
SetLastError(0);
|
||||
}
|
||||
|
||||
// Sneak in security disable while we're here
|
||||
int value = SECURITY_FLAG_IGNORE_UNKNOWN_CA | SECURITY_FLAG_IGNORE_CERT_DATE_INVALID | SECURITY_FLAG_IGNORE_CERT_CN_INVALID; // the kitchen sink
|
||||
if (!next_WinHttpSetOption(hInternet, WINHTTP_OPTION_SECURITY_FLAGS, &value, 4)) {
|
||||
dprintf("Cert: Failed to set ignore security flags: %08lX\n", GetLastError());
|
||||
SetLastError(0);
|
||||
}
|
||||
return true;
|
||||
// Some games don't call WINHTTP_OPTION_SECURITY_FLAGS, so we do it here
|
||||
int value = SECURITY_FLAG_IGNORE_UNKNOWN_CA | SECURITY_FLAG_IGNORE_CERT_DATE_INVALID | SECURITY_FLAG_IGNORE_CERT_CN_INVALID;
|
||||
next_WinHttpSetOption(hInternet, WINHTTP_OPTION_SECURITY_FLAGS, &value, dwBufferLength);
|
||||
}
|
||||
else if (dwOption == WINHTTP_OPTION_SECURITY_FLAGS) {
|
||||
dprintf("Cert: Add all security ignore flags\n");
|
||||
|
||||
// Set our SSL error callback
|
||||
WINHTTP_STATUS_CALLBACK cb_check = WinHttpSetStatusCallback(hInternet, (WINHTTP_STATUS_CALLBACK)ca_error_cb, WINHTTP_CALLBACK_FLAG_SECURE_FAILURE, 0);
|
||||
if (cb_check == WINHTTP_INVALID_STATUS_CALLBACK) {
|
||||
dprintf("Cert: Failed to set SSL error callback: %08lX\n", GetLastError());
|
||||
@@ -286,7 +306,7 @@ static BOOL hook_WinHttpSetOption(
|
||||
int value = SECURITY_FLAG_IGNORE_UNKNOWN_CA | SECURITY_FLAG_IGNORE_CERT_DATE_INVALID | SECURITY_FLAG_IGNORE_CERT_CN_INVALID; // the kitchen sink
|
||||
return next_WinHttpSetOption(hInternet, dwOption, &value, dwBufferLength);
|
||||
} else {
|
||||
dprintf("Cert: hook_WinHttpSetOption %p %08X\n", hInternet, (int)dwOption);
|
||||
dprintf("Cert: my_WinHttpSetOption %p %08X\n", hInternet, (int)dwOption);
|
||||
}
|
||||
|
||||
return next_WinHttpSetOption(hInternet, dwOption, lpBuffer, dwBufferLength);
|
||||
@@ -295,4 +315,4 @@ static BOOL hook_WinHttpSetOption(
|
||||
void ca_error_cb(HINTERNET hInternet, DWORD_PTR dwContext, DWORD dwInternetStatus, LPVOID lpvStatusInformation, DWORD dwStatusInformationLength)
|
||||
{
|
||||
dprintf("Cert: HTTP Secure connection failure: %04lX\n", *(DWORD *)lpvStatusInformation);
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -44,7 +44,7 @@ void cert_config_load(struct cert_config *cfg, const wchar_t *filename)
|
||||
GetPrivateProfileStringW(
|
||||
L"cert",
|
||||
L"path",
|
||||
L"cert",
|
||||
L"\0",
|
||||
cfg->path,
|
||||
_countof(cfg->path),
|
||||
filename);
|
||||
|
||||
Reference in New Issue
Block a user