Add custom QZ Tray fork with pairing key authentication

- Custom fork of QZ Tray 2.2.x with certificate validation bypassed
- Implemented pairing key (HMAC) authentication as replacement
- Modified files: PrintSocketClient.java (certificate check disabled)
- New files: PairingAuth.java, PairingConfigDialog.java
- Excluded build artifacts (out/, lib/javafx*) from repository
- Library JARs included for dependency management
This commit is contained in:
2025-10-02 02:27:45 +03:00
parent 755400a269
commit c7266c32ee
444 changed files with 63195 additions and 1 deletions

View File

@@ -0,0 +1,20 @@
package qz.installer.provision;
import org.codehaus.jettison.json.JSONException;
import qz.common.Constants;
import java.io.IOException;
import java.io.InputStream;
public class ProvisionerInstallerTests {
public static void main(String ... args) throws JSONException, IOException {
InputStream in = ProvisionerInstallerTests.class.getResourceAsStream("resources/" + Constants.PROVISION_FILE);
// Parse the JSON
ProvisionInstaller provisionInstaller = new ProvisionInstaller(ProvisionerInstallerTests.class, in);
// Invoke all parsed steps
provisionInstaller.invoke();
}
}

View File

@@ -0,0 +1,60 @@
-----BEGIN CERTIFICATE-----
MIIFAzCCAuugAwIBAgICEAIwDQYJKoZIhvcNAQEFBQAwgZgxCzAJBgNVBAYTAlVT
MQswCQYDVQQIDAJOWTEbMBkGA1UECgwSUVogSW5kdXN0cmllcywgTExDMRswGQYD
VQQLDBJRWiBJbmR1c3RyaWVzLCBMTEMxGTAXBgNVBAMMEHF6aW5kdXN0cmllcy5j
b20xJzAlBgkqhkiG9w0BCQEWGHN1cHBvcnRAcXppbmR1c3RyaWVzLmNvbTAeFw0x
NTAzMTkwMjM4NDVaFw0yNTAzMTkwMjM4NDVaMHMxCzAJBgNVBAYTAkFBMRMwEQYD
VQQIDApTb21lIFN0YXRlMQ0wCwYDVQQKDAREZW1vMQ0wCwYDVQQLDAREZW1vMRIw
EAYDVQQDDAlsb2NhbGhvc3QxHTAbBgkqhkiG9w0BCQEWDnJvb3RAbG9jYWxob3N0
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtFzbBDRTDHHmlSVQLqjY
aoGax7ql3XgRGdhZlNEJPZDs5482ty34J4sI2ZK2yC8YkZ/x+WCSveUgDQIVJ8oK
D4jtAPxqHnfSr9RAbvB1GQoiYLxhfxEp/+zfB9dBKDTRZR2nJm/mMsavY2DnSzLp
t7PJOjt3BdtISRtGMRsWmRHRfy882msBxsYug22odnT1OdaJQ54bWJT5iJnceBV2
1oOqWSg5hU1MupZRxxHbzI61EpTLlxXJQ7YNSwwiDzjaxGrufxc4eZnzGQ1A8h1u
jTaG84S1MWvG7BfcPLW+sya+PkrQWMOCIgXrQnAsUgqQrgxQ8Ocq3G4X9UvBy5VR
CwIDAQABo3sweTAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdl
bmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUpG420UhvfwAFMr+8vf3pJunQ
gH4wHwYDVR0jBBgwFoAUkKZQt4TUuepf8gWEE3hF6Kl1VFwwDQYJKoZIhvcNAQEF
BQADggIBAFXr6G1g7yYVHg6uGfh1nK2jhpKBAOA+OtZQLNHYlBgoAuRRNWdE9/v4
J/3Jeid2DAyihm2j92qsQJXkyxBgdTLG+ncILlRElXvG7IrOh3tq/TttdzLcMjaR
8w/AkVDLNL0z35shNXih2F9JlbNRGqbVhC7qZl+V1BITfx6mGc4ayke7C9Hm57X0
ak/NerAC/QXNs/bF17b+zsUt2ja5NVS8dDSC4JAkM1dD64Y26leYbPybB+FgOxFu
wou9gFxzwbdGLCGboi0lNLjEysHJBi90KjPUETbzMmoilHNJXw7egIo8yS5eq8RH
i2lS0GsQjYFMvplNVMATDXUPm9MKpCbZ7IlJ5eekhWqvErddcHbzCuUBkDZ7wX/j
unk/3DyXdTsSGuZk3/fLEsc4/YTujpAjVXiA1LCooQJ7SmNOpUa66TPz9O7Ufkng
+CoTSACmnlHdP7U9WLr5TYnmL9eoHwtb0hwENe1oFC5zClJoSX/7DRexSJfB7YBf
vn6JA2xy4C6PqximyCPisErNp85GUcZfo33Np1aywFv9H+a83rSUcV6kpE/jAZio
5qLpgIOisArj1HTM6goDWzKhLiR/AeG3IJvgbpr9Gr7uZmfFyQzUjvkJ9cybZRd+
G8azmpBBotmKsbtbAU/I/LVk8saeXznshOVVpDRYtVnjZeAneso7
-----END CERTIFICATE-----
--START INTERMEDIATE CERT--
-----BEGIN CERTIFICATE-----
MIIFEjCCA/qgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwgawxCzAJBgNVBAYTAlVT
MQswCQYDVQQIDAJOWTESMBAGA1UEBwwJQ2FuYXN0b3RhMRswGQYDVQQKDBJRWiBJ
bmR1c3RyaWVzLCBMTEMxGzAZBgNVBAsMElFaIEluZHVzdHJpZXMsIExMQzEZMBcG
A1UEAwwQcXppbmR1c3RyaWVzLmNvbTEnMCUGCSqGSIb3DQEJARYYc3VwcG9ydEBx
emluZHVzdHJpZXMuY29tMB4XDTE1MDMwMjAwNTAxOFoXDTM1MDMwMjAwNTAxOFow
gZgxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJOWTEbMBkGA1UECgwSUVogSW5kdXN0
cmllcywgTExDMRswGQYDVQQLDBJRWiBJbmR1c3RyaWVzLCBMTEMxGTAXBgNVBAMM
EHF6aW5kdXN0cmllcy5jb20xJzAlBgkqhkiG9w0BCQEWGHN1cHBvcnRAcXppbmR1
c3RyaWVzLmNvbTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANTDgNLU
iohl/rQoZ2bTMHVEk1mA020LYhgfWjO0+GsLlbg5SvWVFWkv4ZgffuVRXLHrwz1H
YpMyo+Zh8ksJF9ssJWCwQGO5ciM6dmoryyB0VZHGY1blewdMuxieXP7Kr6XD3GRM
GAhEwTxjUzI3ksuRunX4IcnRXKYkg5pjs4nLEhXtIZWDLiXPUsyUAEq1U1qdL1AH
EtdK/L3zLATnhPB6ZiM+HzNG4aAPynSA38fpeeZ4R0tINMpFThwNgGUsxYKsP9kh
0gxGl8YHL6ZzC7BC8FXIB/0Wteng0+XLAVto56Pyxt7BdxtNVuVNNXgkCi9tMqVX
xOk3oIvODDt0UoQUZ/umUuoMuOLekYUpZVk4utCqXXlB4mVfS5/zWB6nVxFX8Io1
9FOiDLTwZVtBmzmeikzb6o1QLp9F2TAvlf8+DIGDOo0DpPQUtOUyLPCh5hBaDGFE
ZhE56qPCBiQIc4T2klWX/80C5NZnd/tJNxjyUyk7bjdDzhzT10CGRAsqxAnsjvMD
2KcMf3oXN4PNgyfpbfq2ipxJ1u777Gpbzyf0xoKwH9FYigmqfRH2N2pEdiYawKrX
6pyXzGM4cvQ5X1Yxf2x/+xdTLdVaLnZgwrdqwFYmDejGAldXlYDl3jbBHVM1v+uY
5ItGTjk+3vLrxmvGy5XFVG+8fF/xaVfo5TW5AgMBAAGjUDBOMB0GA1UdDgQWBBSQ
plC3hNS56l/yBYQTeEXoqXVUXDAfBgNVHSMEGDAWgBQDRcZNwPqOqQvagw9BpW0S
BkOpXjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQAJIO8SiNr9jpLQ
eUsFUmbueoxyI5L+P5eV92ceVOJ2tAlBA13vzF1NWlpSlrMmQcVUE/K4D01qtr0k
gDs6LUHvj2XXLpyEogitbBgipkQpwCTJVfC9bWYBwEotC7Y8mVjjEV7uXAT71GKT
x8XlB9maf+BTZGgyoulA5pTYJ++7s/xX9gzSWCa+eXGcjguBtYYXaAjjAqFGRAvu
pz1yrDWcA6H94HeErJKUXBakS0Jm/V33JDuVXY+aZ8EQi2kV82aZbNdXll/R6iGw
2ur4rDErnHsiphBgZB71C5FD4cdfSONTsYxmPmyUb5T+KLUouxZ9B0Wh28ucc1Lp
rbO7BnjW
-----END CERTIFICATE-----

View File

@@ -0,0 +1,158 @@
[
{
"description": "[ERROR EXPECTED] missing 'type' and 'phase'",
"os": "*",
"data": "foo.bar=1"
},
{
"description": "[ERROR EXPECTED] invalid 'remover' id",
"type": "remover",
"os": "*",
"phase": "install",
"data": "bbb"
},
{
"description": "[ERROR EXPECTED] missing 'type'",
"os": "*",
"phase": "install",
"data": "this_file_does_not_exist"
},
{
"description": "[ERROR EXPECTED] 'data' file missing",
"type": "script",
"os": "*",
"phase": "install",
"data": "this_file_does_not_exist"
},
{
"description": "[ERROR EXPECTED] 'arch' is invalid",
"type": "property",
"os": "*",
"arch": "sparc",
"data": "bar.foo=2"
},
{
"description": "[ERROR EXPECTED] 'os' is invalid",
"type": "property",
"os": "quake",
"arch": "*",
"data": "bar.foo=2"
},
{
"description": "[WINDOWS SCRIPT] powershell at 'install'",
"type": "script",
"os": "windows",
"phase": "install",
"data": "script1.ps1"
},
{
"description": "[MAC SCRIPT] powershell at 'install'",
"type": "script",
"os": "mac",
"phase": "install",
"data": "script1.ps1"
},
{
"description": "[LINUX SCRIPT] python at 'startup'",
"type": "script",
"os": "linux",
"phase": "startup",
"data": "script4.py"
},
{
"description": "[LINUX & MAC SCRIPT] bash without extension at 'install'",
"type": "script",
"os": "linux|mac",
"phase": "install",
"data": "script2"
},
{
"description": "[ALL OS SCRIPT] with '.sh' extension at 'install'",
"type": "script",
"os": "*",
"phase": "install",
"data": "script3.sh"
},
{
"description": "[AARCH64 ONLY SCRIPT] with '.sh' extension at 'install'",
"type": "script",
"os": "*",
"arch": "aarch64",
"phase": "install",
"data": "script2"
},
{
"description": "[CERTIFICATE] at 'startup' (allowed.dat)",
"type": "cert",
"os": "*",
"data": "cert1.crt"
},
{
"description": "[PROPERTY] at wrong phase (qz-tray.properties)",
"type": "property",
"phase": "startup",
"os": "*",
"data": "foo=bar"
},
{
"description": "[PROPERTY] at 'install' (qz-tray.properties)",
"type": "property",
"phase": "install",
"os": "*",
"data": "websocket.secure.ports=9191,9292,9393,9494"
},
{
"description": "[PROPERTY] at 'certgen' (qz-tray.properties)",
"type": "property",
"phase": "install",
"os": "*",
"data": "websocket.insecure.ports=9192,9293,9394,9495"
},
{
"description": "[PROPERTY] at 'certgen' (qz-tray.properties)",
"type": "property",
"os": "*",
"data": "log.size=2097152"
},
{
"description": "[PREFERENCE] at 'startup' (prefs.properties)",
"type": "preference",
"os": "*",
"data": "tray.notifications=true"
},
{
"description": "[REMOVER] at 'install' ('QZ Tray' rebranded 'Cherry Connect')",
"type": "remover",
"os": "*",
"phase": "install",
"data": "Cherry Connect,cc-util,cc"
},
{
"description": "[REMOVER] at 'install' QZ-branded version",
"type": "remover",
"os": "*",
"phase": "install",
"data": "qz"
},
{
"description": "[CA] at 'install'",
"type": "ca",
"os": "*",
"data": "selfsigned1.crt"
},
{
"description": "[CONF] at 'install'",
"type": "conf",
"os": "*",
"data": "java.net.useSystemProxies=true",
"path": "net.properties"
},
{
"description": "[SOFTWARE] at 'install'",
"type": "software",
"os": "windows",
"data": "DCDSetup1.5.0.17.exe",
"args": "/S /v/qn"
}
]

View File

@@ -0,0 +1,5 @@
$shell="PowerShell"
$date="$(Get-Date -format "yyyy-MM-dd HH:mm:ss")"
$script="$($myInvocation.MyCommand.Name)"
# FIXME: ~/Desktop may try to write to /root/Desktop on Linux
echo "$date Successful provisioning test from '$shell': $script" >> ~/Desktop/provision.log

View File

@@ -0,0 +1,9 @@
#!/bin/bash
shell=$(ps -p $$ -oargs=|awk '{print $1}')
date=$(date "+%F %T")
script=$(basename "$0")
user="$(eval echo ~$(logname))"
echo "$date Successful provisioning test from '$shell': $script" >> "$user/Desktop/provision.log"
chmod 555 "$user/Desktop/provision.log"

View File

@@ -0,0 +1,7 @@
shell=$(ps -p $$ -oargs=|awk '{print $1}')
date=$(date "+%F %T")
script=$(basename "$0")
user="$(eval echo ~$(logname))"
echo "$date Successful provisioning test from '$shell': $script" >> "$user/Desktop/provision.log"
chmod 555 "$user/Desktop/provision.log"

View File

@@ -0,0 +1,15 @@
#!/usr/bin/env python3
import os
def notify(title, message):
os.system(f"notify-send '{title}' '{message}'")
title=os.getenv('APP_TITLE')
version=os.getenv('APP_VERSION')
printer="\U0001F5A8"
tada="\U0001F389"
notify("{} {}".format(printer, title), """{} This is a sample message from {} {}.
This message indicates that provisioning startup tasks are working.""".format(tada, title, version))

View File

@@ -0,0 +1,24 @@
-----BEGIN CERTIFICATE-----
MIID+TCCAuGgAwIBAgIUf1NN9L3Tw6UVqPiHcFsnS+sdm1kwDQYJKoZIhvcNAQEL
BQAwgaQxCzAJBgNVBAYTAlVTMREwDwYDVQQIDAhOZXcgWW9yazESMBAGA1UEBwwJ
Q2FuYXN0b3RhMRswGQYDVQQKDBJRWiBJbmR1c3RyaWVzLCBMTEMxGzAZBgNVBAsM
ElFaIEluZHVzdHJpZXMsIExMQzEZMBcGA1UEAwwQVHJlcyBGaW5vY2NoaWFybzEZ
MBcGCSqGSIb3DQEJARYKdHJlc0Bxei5pbzAeFw0yNTAyMTAxODQxNDlaFw0yNTAz
MTIxODQxNDlaMIGkMQswCQYDVQQGEwJVUzERMA8GA1UECAwITmV3IFlvcmsxEjAQ
BgNVBAcMCUNhbmFzdG90YTEbMBkGA1UECgwSUVogSW5kdXN0cmllcywgTExDMRsw
GQYDVQQLDBJRWiBJbmR1c3RyaWVzLCBMTEMxGTAXBgNVBAMMEFRyZXMgRmlub2Nj
aGlhcm8xGTAXBgkqhkiG9w0BCQEWCnRyZXNAcXouaW8wggEiMA0GCSqGSIb3DQEB
AQUAA4IBDwAwggEKAoIBAQCyLio0KuXpKr7rmFRP9UpbKvmMZlUytKeYKfiffJub
7V4kcD2dAWnl2DL6IK8MNVM6SuTOGUIl8XDV1MTxKhtZoIF2tFtG3UpX2heL76Ai
Q7A3cqXiNzZAIxxfppgIZZSZlEjr1r+OCsJEpTJJA6Dm0xOKBcC7c4C3fi7xPvEM
hu4EOmzO1EczFF3/mpgO+RG4MFNDPa8zz8SFZN6e9LRkPiPupiapvklgHikkRm3L
V7ktP/jmA0zp7JVKDvfNBVR8iZQ3Fbhtk06Iv0t/a0bov4NtyItD1O1oftLS7jEK
Erop9NMAofk/MAduevQTHkKLwwAGXXEtHnpaXx7FDpnLAgMBAAGjITAfMB0GA1Ud
DgQWBBTcQETEM4iqTfFf6Tq5GvzbhnA7bzANBgkqhkiG9w0BAQsFAAOCAQEASY6v
ep8asCIbdDjj1knYEMUMaHsvPbXQYY60Zt1HeQxACrUHCBZ375A+sl/INrH7gRJj
KygYKbI/LGM2lDErLTyOzWu1CBTIUUbaDwY5Fc+xl39N+EDctU82Gg8ddUoJDb6f
8w/gy2FtcCiRUKdIR5rYxIDl1izkBHPoV3jgUe5ydhlfHUjBZdIWWnZs2+fETG5B
62sG9MBwOlPJkE7Wdsf6Q7lQwnpUpnj08IY9+T7c3SA3pGKi2/e7di3G/47riMOd
vnldRfCl5erR0qR6J3Ksk6oZCYngLj3zR8R9qjUgEaiC76DGZd9s9wT867SMJJLs
iu9NclpILl4aZRJg0w==
-----END CERTIFICATE-----