Reorganized Repo
Added readme for filesystem tools.
This commit is contained in:
parent
a8d0530781
commit
c4eefa978e
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
files
|
@ -1,5 +1,3 @@
|
||||
# SEGA dumptools
|
||||
# SEGA Dump Tools
|
||||
|
||||
source: emuline.org and 1cc (websites and discord)
|
||||
|
||||
Additions and documentation appreciated.
|
||||
A compilation of scripts and documents regarding SEGA update encryption.
|
||||
|
3
docs/ALL.NET ID List/README.md
Normal file
3
docs/ALL.NET ID List/README.md
Normal file
@ -0,0 +1,3 @@
|
||||
# ALL.NET ID List
|
||||
|
||||
You'll find the most up to date info on DataMonster's [spreadsheet](https://docs.google.com/spreadsheets/d/1RMhj6GlQoehH7AEOl1sSRKCGD3pEUNd8spki5Bhw7sw/edit#gid=916792653).
|
0
docs/SEGA_PCB_CODES/SEGA_PCB_CODES.xlsx → docs/ALL.NET ID List/SEGA_PCB_CODES.xlsx
Executable file → Normal file
0
docs/SEGA_PCB_CODES/SEGA_PCB_CODES.xlsx → docs/ALL.NET ID List/SEGA_PCB_CODES.xlsx
Executable file → Normal file
3
docs/Decryption Keys/README.md
Normal file
3
docs/Decryption Keys/README.md
Normal file
@ -0,0 +1,3 @@
|
||||
# Encryption Keys
|
||||
|
||||
This folder contains most encryption keys used for sega games.
|
392
docs/Decryption Keys/sega encryption keys.html
Normal file
392
docs/Decryption Keys/sega encryption keys.html
Normal file
@ -0,0 +1,392 @@
|
||||
<html data-darkreader-mode="dynamic" data-darkreader-scheme="dark"><head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8"><style class="darkreader darkreader--fallback" media="screen"></style><style class="darkreader darkreader--text" media="screen"></style><style class="darkreader darkreader--invert" media="screen">.jfk-bubble.gtx-bubble, .captcheck_answer_label > input + img, span#closed_text > img[src^="https://www.gstatic.com/images/branding/googlelogo"], span[data-href^="https://www.hcaptcha.com/"] > #icon, ::-webkit-calendar-picker-indicator, img.Wirisformula {
|
||||
filter: invert(100%) hue-rotate(180deg) contrast(90%) !important;
|
||||
}</style><style class="darkreader darkreader--inline" media="screen">[data-darkreader-inline-bgcolor] {
|
||||
background-color: var(--darkreader-inline-bgcolor) !important;
|
||||
}
|
||||
[data-darkreader-inline-bgimage] {
|
||||
background-image: var(--darkreader-inline-bgimage) !important;
|
||||
}
|
||||
[data-darkreader-inline-border] {
|
||||
border-color: var(--darkreader-inline-border) !important;
|
||||
}
|
||||
[data-darkreader-inline-border-bottom] {
|
||||
border-bottom-color: var(--darkreader-inline-border-bottom) !important;
|
||||
}
|
||||
[data-darkreader-inline-border-left] {
|
||||
border-left-color: var(--darkreader-inline-border-left) !important;
|
||||
}
|
||||
[data-darkreader-inline-border-right] {
|
||||
border-right-color: var(--darkreader-inline-border-right) !important;
|
||||
}
|
||||
[data-darkreader-inline-border-top] {
|
||||
border-top-color: var(--darkreader-inline-border-top) !important;
|
||||
}
|
||||
[data-darkreader-inline-boxshadow] {
|
||||
box-shadow: var(--darkreader-inline-boxshadow) !important;
|
||||
}
|
||||
[data-darkreader-inline-color] {
|
||||
color: var(--darkreader-inline-color) !important;
|
||||
}
|
||||
[data-darkreader-inline-fill] {
|
||||
fill: var(--darkreader-inline-fill) !important;
|
||||
}
|
||||
[data-darkreader-inline-stroke] {
|
||||
stroke: var(--darkreader-inline-stroke) !important;
|
||||
}
|
||||
[data-darkreader-inline-outline] {
|
||||
outline-color: var(--darkreader-inline-outline) !important;
|
||||
}
|
||||
[data-darkreader-inline-stopcolor] {
|
||||
stop-color: var(--darkreader-inline-stopcolor) !important;
|
||||
}
|
||||
[data-darkreader-inline-bg] {
|
||||
background: var(--darkreader-inline-bg) !important;
|
||||
}
|
||||
[data-darkreader-inline-invert] {
|
||||
filter: invert(100%) hue-rotate(180deg);
|
||||
}</style><style class="darkreader darkreader--variables" media="screen">:root {
|
||||
--darkreader-neutral-background: #131516;
|
||||
--darkreader-neutral-text: #d8d4cf;
|
||||
--darkreader-selection-background: #004daa;
|
||||
--darkreader-selection-text: #e8e6e3;
|
||||
}</style><style class="darkreader darkreader--root-vars" media="screen"></style><style class="darkreader darkreader--user-agent" media="screen">@layer {
|
||||
html {
|
||||
background-color: #181a1b !important;
|
||||
}
|
||||
html {
|
||||
color-scheme: dark !important;
|
||||
}
|
||||
iframe {
|
||||
color-scheme: initial;
|
||||
}
|
||||
html, body, input, textarea, select, button, dialog {
|
||||
background-color: #181a1b;
|
||||
}
|
||||
html, body, input, textarea, select, button {
|
||||
border-color: #736b5e;
|
||||
color: #e8e6e3;
|
||||
}
|
||||
a {
|
||||
color: #3391ff;
|
||||
}
|
||||
table {
|
||||
border-color: #545b5e;
|
||||
}
|
||||
mark {
|
||||
color: #e8e6e3;
|
||||
}
|
||||
::placeholder {
|
||||
color: #b2aba1;
|
||||
}
|
||||
input:-webkit-autofill,
|
||||
textarea:-webkit-autofill,
|
||||
select:-webkit-autofill {
|
||||
background-color: #404400 !important;
|
||||
color: #e8e6e3 !important;
|
||||
}
|
||||
::-webkit-scrollbar {
|
||||
background-color: #202324;
|
||||
color: #aba499;
|
||||
}
|
||||
::-webkit-scrollbar-thumb {
|
||||
background-color: #454a4d;
|
||||
}
|
||||
::-webkit-scrollbar-thumb:hover {
|
||||
background-color: #575e62;
|
||||
}
|
||||
::-webkit-scrollbar-thumb:active {
|
||||
background-color: #484e51;
|
||||
}
|
||||
::-webkit-scrollbar-corner {
|
||||
background-color: #181a1b;
|
||||
}
|
||||
* {
|
||||
scrollbar-color: #454a4d #202324;
|
||||
}
|
||||
::selection {
|
||||
background-color: #004daa !important;
|
||||
color: #e8e6e3 !important;
|
||||
}
|
||||
::-moz-selection {
|
||||
background-color: #004daa !important;
|
||||
color: #e8e6e3 !important;
|
||||
}
|
||||
}</style><style>
|
||||
body {
|
||||
font-family: sans-serif;
|
||||
}
|
||||
table {
|
||||
white-space: nowrap;
|
||||
overflow-x: auto;
|
||||
border-collapse: separate;
|
||||
border-spacing: 0;
|
||||
}
|
||||
th {
|
||||
border-bottom: 3px solid #000 !important;
|
||||
position: sticky;
|
||||
top: 0;
|
||||
text-align: left;
|
||||
background: #fff;
|
||||
}
|
||||
th, td {
|
||||
margin: 0;
|
||||
padding: 2px 4px;
|
||||
border: 1px solid transparent;
|
||||
}
|
||||
td {
|
||||
border-bottom-color: #ddd;
|
||||
}
|
||||
th, td {
|
||||
border-left-color: #ddd;
|
||||
}
|
||||
th:last-child, td:last-child {
|
||||
border-right-color: #ddd;
|
||||
}
|
||||
</style><style class="darkreader darkreader--sync" media="screen"></style>
|
||||
|
||||
<meta name="darkreader" content="177331fe36154dd69715d81bbd21df4f"><style class="darkreader darkreader--override" media="screen">.vimvixen-hint {
|
||||
background-color: #7b5300 !important;
|
||||
border-color: #d8b013 !important;
|
||||
color: #f3e8c8 !important;
|
||||
}
|
||||
#vimvixen-console-frame {
|
||||
color-scheme: light !important;
|
||||
}
|
||||
::placeholder {
|
||||
opacity: 0.5 !important;
|
||||
}
|
||||
#edge-translate-panel-body,
|
||||
.MuiTypography-body1,
|
||||
.nfe-quote-text {
|
||||
color: var(--darkreader-neutral-text) !important;
|
||||
}
|
||||
gr-main-header {
|
||||
background-color: #0f3a48 !important;
|
||||
}
|
||||
.tou-z65h9k,
|
||||
.tou-mignzq,
|
||||
.tou-1b6i2ox,
|
||||
.tou-lnqlqk {
|
||||
background-color: var(--darkreader-neutral-background) !important;
|
||||
}
|
||||
.tou-75mvi {
|
||||
background-color: #032029 !important;
|
||||
}
|
||||
.tou-ta9e87,
|
||||
.tou-1w3fhi0,
|
||||
.tou-1b8t2us,
|
||||
.tou-py7lfi,
|
||||
.tou-1lpmd9d,
|
||||
.tou-1frrtv8,
|
||||
.tou-17ezmgn {
|
||||
background-color: #0a0a0a !important;
|
||||
}
|
||||
.tou-uknfeu {
|
||||
background-color: #231603 !important;
|
||||
}
|
||||
.tou-6i3zyv {
|
||||
background-color: #19576c !important;
|
||||
}
|
||||
div.mermaid-viewer-control-panel .btn {
|
||||
background-color: var(--darkreader-neutral-background);
|
||||
fill: var(--darkreader-neutral-text);
|
||||
}
|
||||
svg g rect.er {
|
||||
fill: var(--darkreader-neutral-background) !important;
|
||||
}
|
||||
svg g rect.er.entityBox {
|
||||
fill: var(--darkreader-neutral-background) !important;
|
||||
}
|
||||
svg g rect.er.attributeBoxOdd {
|
||||
fill: var(--darkreader-neutral-background) !important;
|
||||
}
|
||||
svg g rect.er.attributeBoxEven {
|
||||
fill: var(--darkreader-selection-background);
|
||||
fill-opacity: 0.8 !important;
|
||||
}
|
||||
svg rect.er.relationshipLabelBox {
|
||||
fill: var(--darkreader-neutral-background) !important;
|
||||
}
|
||||
svg g g.nodes rect,
|
||||
svg g g.nodes polygon {
|
||||
fill: var(--darkreader-neutral-background) !important;
|
||||
}
|
||||
svg g rect.task {
|
||||
fill: var(--darkreader-selection-background) !important;
|
||||
}
|
||||
svg line.messageLine0,
|
||||
svg line.messageLine1 {
|
||||
stroke: var(--darkreader-neutral-text) !important;
|
||||
}
|
||||
div.mermaid .actor {
|
||||
fill: var(--darkreader-neutral-background) !important;
|
||||
}
|
||||
.google-material-icons {
|
||||
font-family: 'Google Material Icons' !important;
|
||||
}
|
||||
.google-symbols {
|
||||
font-family: 'Google Symbols Subset', 'Google Symbols' !important;
|
||||
}
|
||||
.material-icons-extended {
|
||||
font-family: 'Material Icons Extended' !important;
|
||||
}
|
||||
mitid-authenticators-code-app > .code-app-container {
|
||||
background-color: white !important;
|
||||
padding-top: 1rem;
|
||||
}
|
||||
iframe#unpaywall[src$="unpaywall.html"] {
|
||||
color-scheme: light !important;
|
||||
}
|
||||
.oui-icon {
|
||||
font-family: 'Oui Icons' !important;
|
||||
}
|
||||
embed[type="application/pdf"] { filter: invert(100%) contrast(90%); }</style></head><body><table><thead>
|
||||
<tr><th>Game ID</th><th>Region</th><th>Model Type</th><th>Flags</th><th>Develop</th><th>ALL.Net</th><th>Deliver</th><th>Binding</th><th>Billing</th><th>Rental</th><th>Billing Form</th><th>Platform ID</th><th>IPv4 Subnet</th><th>IPv6 Subnet</th><th>Game Key</th><th>Game IV</th><th>Opt Key</th><th>Opt IV</th></tr>
|
||||
</thead>
|
||||
<tbody><tr><td><code>SBZS</code></td><td><code>ALL</code></td><td><code>Satellite (ST)</code></td><td><code><code>24</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>0</code></td><td><code>Nu SX (AAW)</code></td><td><code>192.168.0.0</code></td><td><code>0000::0000</code></td><td><code><code>A53780999F0DF49CBD8075C86D150566</code></code></td><td><code><code>E2048E0E673CD0C8F3A79E72FEAF4A62</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SBZS</code></td><td><code>ALL</code></td><td><code>Satellite (ST)</code></td><td><code><code>25</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>0</code></td><td><code>Nu (AAV)</code></td><td><code>192.168.0.0</code></td><td><code>0000::0000</code></td><td><code><code>A53780999F0DF49CBD8075C86D150566</code></code></td><td><code><code>E2048E0E673CD0C8F3A79E72FEAF4A62</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SBZS</code></td><td><code>ALL</code></td><td><code>Satellite (ST)</code></td><td><code><code>25</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>0</code></td><td><code>Nu SX (AAW)</code></td><td><code>192.168.0.0</code></td><td><code>0000::0000</code></td><td><code><code>A53780999F0DF49CBD8075C86D150566</code></code></td><td><code><code>E2048E0E673CD0C8F3A79E72FEAF4A62</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SBZU</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>00</code></code></td><td><code></code></td><td><code></code></td><td><code></code></td><td><code></code></td><td><code></code></td><td><code></code></td><td><code>0</code></td><td><code>Nu (AAV)</code></td><td><code>192.168.1.0</code></td><td><code>0000::0000</code></td><td><code><code>E6EF248B72D31DEAB42FE73906C4C9F0</code></code></td><td><code><code>0A7D94EC3DAFD9CCCF9F599CB245BDB1</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SBZU</code></td><td><code>EXP</code></td><td><code>Satellite (ST)</code></td><td><code><code>24</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>0</code></td><td><code>Nu SX (AAW)</code></td><td><code>192.168.1.0</code></td><td><code>0000::0000</code></td><td><code><code>E6EF248B72D31DEAB42FE73906C4C9F0</code></code></td><td><code><code>0A7D94EC3DAFD9CCCF9F599CB245BDB1</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SBZU</code></td><td><code>ALL</code></td><td><code>Satellite (ST)</code></td><td><code><code>24</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>0</code></td><td><code>Nu SX (AAW)</code></td><td><code>192.168.1.0</code></td><td><code>0000::0000</code></td><td><code><code>E6EF248B72D31DEAB42FE73906C4C9F0</code></code></td><td><code><code>0A7D94EC3DAFD9CCCF9F599CB245BDB1</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SBZU</code></td><td><code>CHN</code></td><td><code>Satellite (ST)</code></td><td><code><code>24</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>0</code></td><td><code>Nu (AAV)</code></td><td><code>192.168.1.0</code></td><td><code>0000::0000</code></td><td><code><code>E6EF248B72D31DEAB42FE73906C4C9F0</code></code></td><td><code><code>0A7D94EC3DAFD9CCCF9F599CB245BDB1</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SBZU</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>24</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>0</code></td><td><code>Nu (AAV)</code></td><td><code>192.168.1.0</code></td><td><code>0000::0000</code></td><td><code><code>E6EF248B72D31DEAB42FE73906C4C9F0</code></code></td><td><code><code>0A7D94EC3DAFD9CCCF9F599CB245BDB1</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SBZU</code></td><td><code>ALL</code></td><td><code>Satellite (ST)</code></td><td><code><code>24</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>0</code></td><td><code>Nu (AAV)</code></td><td><code>192.168.1.0</code></td><td><code>0000::0000</code></td><td><code><code>E6EF248B72D31DEAB42FE73906C4C9F0</code></code></td><td><code><code>0A7D94EC3DAFD9CCCF9F599CB245BDB1</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SBZU</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>24</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>0</code></td><td><code>Nu SX (AAW)</code></td><td><code>192.168.1.0</code></td><td><code>0000::0000</code></td><td><code><code>E6EF248B72D31DEAB42FE73906C4C9F0</code></code></td><td><code><code>0A7D94EC3DAFD9CCCF9F599CB245BDB1</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SBZU</code></td><td><code>ALL</code></td><td><code>Satellite (ST)</code></td><td><code><code>24</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>0</code></td><td><code>Nu SX (AAW)</code></td><td><code>192.168.0.0</code></td><td><code>0000::0000</code></td><td><code><code>E6EF248B72D31DEAB42FE73906C4C9F0</code></code></td><td><code><code>0A7D94EC3DAFD9CCCF9F599CB245BDB1</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SBZU</code></td><td><code>EXP</code></td><td><code>Satellite (ST)</code></td><td><code><code>24</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>0</code></td><td><code>Nu (AAV)</code></td><td><code>192.168.1.0</code></td><td><code>0000::0000</code></td><td><code><code>E6EF248B72D31DEAB42FE73906C4C9F0</code></code></td><td><code><code>0A7D94EC3DAFD9CCCF9F599CB245BDB1</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SBZU</code></td><td><code>CHN</code></td><td><code>Satellite (ST)</code></td><td><code><code>24</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>0</code></td><td><code>Nu SX (AAW)</code></td><td><code>192.168.1.0</code></td><td><code>0000::0000</code></td><td><code><code>E6EF248B72D31DEAB42FE73906C4C9F0</code></code></td><td><code><code>0A7D94EC3DAFD9CCCF9F599CB245BDB1</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SBZU</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>24</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>0</code></td><td><code>Nu SX (AAW)</code></td><td><code>192.168.0.0</code></td><td><code>0000::0000</code></td><td><code><code>E6EF248B72D31DEAB42FE73906C4C9F0</code></code></td><td><code><code>0A7D94EC3DAFD9CCCF9F599CB245BDB1</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SBZV</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>Nu (AAV)</code></td><td><code>192.168.78.0</code></td><td><code>0000::0000</code></td><td><code><code>1EB26F806696CD872DEA14262F8C7B4C</code></code></td><td><code><code>EB0A261B4DB7ED9D89FE5EB24AF7054D</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SBZV</code></td><td><code>EXP</code></td><td><code>Satellite (ST)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>Nu (AAV)</code></td><td><code>192.168.78.0</code></td><td><code>0000::0000</code></td><td><code><code>1EB26F806696CD872DEA14262F8C7B4C</code></code></td><td><code><code>EB0A261B4DB7ED9D89FE5EB24AF7054D</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SBZV</code></td><td><code>EXP</code></td><td><code>Satellite (ST)</code></td><td><code><code>65</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>Nu (AAV)</code></td><td><code>192.168.78.0</code></td><td><code>0000::0000</code></td><td><code><code>1EB26F806696CD872DEA14262F8C7B4C</code></code></td><td><code><code>EB0A261B4DB7ED9D89FE5EB24AF7054D</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SBZV</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>65</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>Nu (AAV)</code></td><td><code>192.168.78.0</code></td><td><code>0000::0000</code></td><td><code><code>1EB26F806696CD872DEA14262F8C7B4C</code></code></td><td><code><code>EB0A261B4DB7ED9D89FE5EB24AF7054D</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDAP</code></td><td><code>JPN</code></td><td><code>Terminal (??)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>Nu (AAV)</code></td><td><code>192.168.126.0</code></td><td><code>0000::0000</code></td><td><code><code>A8FEEA8AF2950EA933392A7E7A515AC2</code></code></td><td><code><code>6C7E0E3B88CE678FB033E456E5343D72</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDAP</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>Nu (AAV)</code></td><td><code>192.168.126.0</code></td><td><code>0000::0000</code></td><td><code><code>A8FEEA8AF2950EA933392A7E7A515AC2</code></code></td><td><code><code>6C7E0E3B88CE678FB033E456E5343D72</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDAP</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>65</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>Nu (AAV)</code></td><td><code>192.168.126.0</code></td><td><code>0000::0000</code></td><td><code><code>A8FEEA8AF2950EA933392A7E7A515AC2</code></code></td><td><code><code>6C7E0E3B88CE678FB033E456E5343D72</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDAP</code></td><td><code>JPN</code></td><td><code>Terminal (??)</code></td><td><code><code>65</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>Nu (AAV)</code></td><td><code>192.168.126.0</code></td><td><code>0000::0000</code></td><td><code><code>A8FEEA8AF2950EA933392A7E7A515AC2</code></code></td><td><code><code>6C7E0E3B88CE678FB033E456E5343D72</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDAQ</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>04</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code></code></td><td><code></code></td><td><code>0</code></td><td><code>Nu SX (AAW)</code></td><td><code>192.168.125.0</code></td><td><code>0000::0000</code></td><td><code><code>C5DEF48491A17ABFAF14F70ACC068C4D</code></code></td><td><code><code>3E416A45DC0E442A13FC058F36DEBE89</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDAV</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>Nu SX (AAW)</code></td><td><code>192.168.130.0</code></td><td><code>0000::0000</code></td><td><code><code>6F239C60B73FB2259A40ECFDC1FF541A</code></code></td><td><code><code>A5E047B8A29F27014E4D512E08954FF0</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDBT</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>Nu (AAV)</code></td><td><code>192.168.139.0</code></td><td><code>0000::0000</code></td><td><code><code>F65A75BEC7F0DD4D08A690F219AB14EF</code></code></td><td><code><code>CAE2CEE2CC88188F661893E0696BBE2A</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDBT</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>65</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>Nu (AAV)</code></td><td><code>192.168.139.0</code></td><td><code>0000::0000</code></td><td><code><code>F65A75BEC7F0DD4D08A690F219AB14EF</code></code></td><td><code><code>CAE2CEE2CC88188F661893E0696BBE2A</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDBZ</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>Nu (AAV)</code></td><td><code>192.168.144.0</code></td><td><code>0000::0000</code></td><td><code><code>A09F1E9AED8E14B3F2D285E50FA4DCBC</code></code></td><td><code><code>3282AB559319FB67A168E0803B235091</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDBZ</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>65</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>Nu (AAV)</code></td><td><code>192.168.144.0</code></td><td><code>0000::0000</code></td><td><code><code>A09F1E9AED8E14B3F2D285E50FA4DCBC</code></code></td><td><code><code>3282AB559319FB67A168E0803B235091</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDCA</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>24</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>0</code></td><td><code>Nu (AAV)</code></td><td><code>192.168.150.0</code></td><td><code>0000::0000</code></td><td><code><code>48FF08937104B2A83CCB282468A5C702</code></code></td><td><code><code>D7782A8594B74BC91491EA9DBC693395</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDCD</code></td><td><code>EXP</code></td><td><code>Satellite (ST)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>Nu SX (AAW)</code></td><td><code>192.168.147.0</code></td><td><code>0000::0000</code></td><td><code><code>9DA25C8104D3CD5A3161229DE221ACE9</code></code></td><td><code><code>8BC818BEF7FF3C3431BA11EDA5C5FB48</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDCD</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>Nu SX (AAW)</code></td><td><code>192.168.147.0</code></td><td><code>0000::0000</code></td><td><code><code>9DA25C8104D3CD5A3161229DE221ACE9</code></code></td><td><code><code>8BC818BEF7FF3C3431BA11EDA5C5FB48</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDCF</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>24</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>0</code></td><td><code>Nu (AAV)</code></td><td><code>192.168.148.0</code></td><td><code>0000::0000</code></td><td><code><code>E45390726D4747CA28086C667214CFE7</code></code></td><td><code><code>36336C65FC649205231745CE6A9CE0B8</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDCH</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>Nu (AAV)</code></td><td><code>192.168.149.0</code></td><td><code>0000::0000</code></td><td><code><code>260B3364400E701920B6DED70BC39271</code></code></td><td><code><code>5EAB7342D2D79B09FE0E00F81E325307</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDDD</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>24</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>0</code></td><td><code>Nu (AAV)</code></td><td><code>192.168.157.0</code></td><td><code>0000::0000</code></td><td><code><code>619410D29DF4F940177ACCD859D97E8E</code></code></td><td><code><code>16497FE160E28E601A49D16DB18F2541</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDDD</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>25</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>0</code></td><td><code>Nu (AAV)</code></td><td><code>192.168.157.0</code></td><td><code>0000::0000</code></td><td><code><code>619410D29DF4F940177ACCD859D97E8E</code></code></td><td><code><code>16497FE160E28E601A49D16DB18F2541</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDDD</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>25</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>0</code></td><td><code>Nu (AAV)</code></td><td><code>192.169.96.10</code></td><td><code>0000::0000</code></td><td><code><code>6591D8D2E84B21D197753804D47C2E48</code></code></td><td><code><code>D842A5C6F75B35C7257C0EC9BA30DED1</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDDD</code></td><td><code>JPN</code></td><td><code>Server (SV)</code></td><td><code><code>2c</code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>0</code></td><td><code>Nu (AAV)</code></td><td><code>192.168.157.0</code></td><td><code>0000::0000</code></td><td><code><code>619410D29DF4F940177ACCD859D97E8E</code></code></td><td><code><code>16497FE160E28E601A49D16DB18F2541</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDDD</code></td><td><code>JPN</code></td><td><code>Server (SV)</code></td><td><code><code>2d</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>0</code></td><td><code>Nu (AAV)</code></td><td><code>192.168.157.0</code></td><td><code>0000::0000</code></td><td><code><code>619410D29DF4F940177ACCD859D97E8E</code></code></td><td><code><code>16497FE160E28E601A49D16DB18F2541</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDDD</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>Nu (AAV)</code></td><td><code>192.168.157.0</code></td><td><code>0000::0000</code></td><td><code><code>619410D29DF4F940177ACCD859D97E8E</code></code></td><td><code><code>16497FE160E28E601A49D16DB18F2541</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDDD</code></td><td><code>EXP</code></td><td><code>Satellite (ST)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>Nu (AAV)</code></td><td><code>192.168.157.0</code></td><td><code>0000::0000</code></td><td><code><code>619410D29DF4F940177ACCD859D97E8E</code></code></td><td><code><code>16497FE160E28E601A49D16DB18F2541</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDDD</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>65</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>Nu (AAV)</code></td><td><code>192.168.157.0</code></td><td><code>0000::0000</code></td><td><code><code>619410D29DF4F940177ACCD859D97E8E</code></code></td><td><code><code>16497FE160E28E601A49D16DB18F2541</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDDD</code></td><td><code>EXP</code></td><td><code>Satellite (ST)</code></td><td><code><code>65</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>Nu (AAV)</code></td><td><code>192.168.157.0</code></td><td><code>0000::0000</code></td><td><code><code>619410D29DF4F940177ACCD859D97E8E</code></code></td><td><code><code>16497FE160E28E601A49D16DB18F2541</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDDD</code></td><td><code>EXP</code></td><td><code>Server (SV)</code></td><td><code><code>6c</code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>Nu (AAV)</code></td><td><code>192.168.157.0</code></td><td><code>0000::0000</code></td><td><code><code>619410D29DF4F940177ACCD859D97E8E</code></code></td><td><code><code>16497FE160E28E601A49D16DB18F2541</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDDD</code></td><td><code>JPN</code></td><td><code>Server (SV)</code></td><td><code><code>6c</code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>Nu (AAV)</code></td><td><code>192.168.157.0</code></td><td><code>0000::0000</code></td><td><code><code>619410D29DF4F940177ACCD859D97E8E</code></code></td><td><code><code>16497FE160E28E601A49D16DB18F2541</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDDD</code></td><td><code>JPN</code></td><td><code>Server (SV)</code></td><td><code><code>6d</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>Nu (AAV)</code></td><td><code>192.168.157.0</code></td><td><code>0000::0000</code></td><td><code><code>619410D29DF4F940177ACCD859D97E8E</code></code></td><td><code><code>16497FE160E28E601A49D16DB18F2541</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDDD</code></td><td><code>EXP</code></td><td><code>Server (SV)</code></td><td><code><code>6d</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>Nu (AAV)</code></td><td><code>192.168.157.0</code></td><td><code>0000::0000</code></td><td><code><code>619410D29DF4F940177ACCD859D97E8E</code></code></td><td><code><code>16497FE160E28E601A49D16DB18F2541</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDDF</code></td><td><code>EXP</code></td><td><code>Satellite (ST)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>Nu (AAV)</code></td><td><code>192.168.158.0</code></td><td><code>0000::0000</code></td><td><code><code>A6497BC4BB114A1F8F24AA756D2AF2D2</code></code></td><td><code><code>00BBACA3CDCE3DCA0174C9F26DC65120</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDDF</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>Nu (AAV)</code></td><td><code>192.168.158.0</code></td><td><code>0000::0000</code></td><td><code><code>A6497BC4BB114A1F8F24AA756D2AF2D2</code></code></td><td><code><code>00BBACA3CDCE3DCA0174C9F26DC65120</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDDL</code></td><td><code>ALL</code></td><td><code>Satellite (ST)</code></td><td><code><code>25</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>0</code></td><td><code>Nu Lv 3.1 (AAZ)</code></td><td><code>192.168.0.0</code></td><td><code>0000::0000</code></td><td><code><code>5A837D9EC1B3FB37F844E3ECD40ACACD</code></code></td><td><code><code>AD46FDC45AC915D55C5DCBA55A600D39</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDDM</code></td><td><code>ALL</code></td><td><code>Satellite (ST)</code></td><td><code><code>00</code></code></td><td><code></code></td><td><code></code></td><td><code></code></td><td><code></code></td><td><code></code></td><td><code></code></td><td><code>0</code></td><td><code>Nu Lv 3.1 (AAZ)</code></td><td><code>192.168.69.0</code></td><td><code>0000::0000</code></td><td><code><code>7A5F4E97AB1790DFF41C1CA4A061AC12</code></code></td><td><code><code>410280B2458399D7CA59283AB4AB46E1</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDDN</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>24</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>0</code></td><td><code>ALLS X2 (ACB)</code></td><td><code>192.168.1.0</code></td><td><code>0000::0000</code></td><td><code><code>9B3B2090947A2486F0F3555C6DB98E56</code></code></td><td><code><code>D5BE04A1303C1DD9385486CF0DF68088</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDDN</code></td><td><code>EXP</code></td><td><code>Satellite (ST)</code></td><td><code><code>24</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.1.0</code></td><td><code>0000::0000</code></td><td><code><code>9B3B2090947A2486F0F3555C6DB98E56</code></code></td><td><code><code>D5BE04A1303C1DD9385486CF0DF68088</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDDN</code></td><td><code>CHN</code></td><td><code>Satellite (ST)</code></td><td><code><code>24</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.1.0</code></td><td><code>0000::0000</code></td><td><code><code>9B3B2090947A2486F0F3555C6DB98E56</code></code></td><td><code><code>D5BE04A1303C1DD9385486CF0DF68088</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDDN</code></td><td><code>EXP</code></td><td><code>Satellite (ST)</code></td><td><code><code>24</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>0</code></td><td><code>ALLS X2 (ACB)</code></td><td><code>192.168.1.0</code></td><td><code>0000::0000</code></td><td><code><code>9B3B2090947A2486F0F3555C6DB98E56</code></code></td><td><code><code>D5BE04A1303C1DD9385486CF0DF68088</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDDN</code></td><td><code>ALL</code></td><td><code>Satellite (ST)</code></td><td><code><code>24</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.1.0</code></td><td><code>0000::0000</code></td><td><code><code>9B3B2090947A2486F0F3555C6DB98E56</code></code></td><td><code><code>D5BE04A1303C1DD9385486CF0DF68088</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDDN</code></td><td><code>CHN</code></td><td><code>Satellite (ST)</code></td><td><code><code>24</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>0</code></td><td><code>Nu Lv 3.1 (AAZ)</code></td><td><code>192.168.1.0</code></td><td><code>0000::0000</code></td><td><code><code>9B3B2090947A2486F0F3555C6DB98E56</code></code></td><td><code><code>D5BE04A1303C1DD9385486CF0DF68088</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDDN</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>24</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>0</code></td><td><code>Nu Lv 3.1 (AAZ)</code></td><td><code>192.168.1.0</code></td><td><code>0000::0000</code></td><td><code><code>9B3B2090947A2486F0F3555C6DB98E56</code></code></td><td><code><code>D5BE04A1303C1DD9385486CF0DF68088</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDDN</code></td><td><code>CHN</code></td><td><code>Satellite (ST)</code></td><td><code><code>24</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>0</code></td><td><code>ALLS X2 (ACB)</code></td><td><code>192.168.1.0</code></td><td><code>0000::0000</code></td><td><code><code>9B3B2090947A2486F0F3555C6DB98E56</code></code></td><td><code><code>D5BE04A1303C1DD9385486CF0DF68088</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDDN</code></td><td><code>ALL</code></td><td><code>Satellite (ST)</code></td><td><code><code>24</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>0</code></td><td><code>Nu Lv 3.1 (AAZ)</code></td><td><code>192.168.1.0</code></td><td><code>0000::0000</code></td><td><code><code>9B3B2090947A2486F0F3555C6DB98E56</code></code></td><td><code><code>D5BE04A1303C1DD9385486CF0DF68088</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDDN</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>24</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.1.0</code></td><td><code>0000::0000</code></td><td><code><code>9B3B2090947A2486F0F3555C6DB98E56</code></code></td><td><code><code>D5BE04A1303C1DD9385486CF0DF68088</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDDN</code></td><td><code>EXP</code></td><td><code>Satellite (ST)</code></td><td><code><code>24</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>0</code></td><td><code>Nu Lv 3.1 (AAZ)</code></td><td><code>192.168.1.0</code></td><td><code>0000::0000</code></td><td><code><code>9B3B2090947A2486F0F3555C6DB98E56</code></code></td><td><code><code>D5BE04A1303C1DD9385486CF0DF68088</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDDN</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>34</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.1.0</code></td><td><code>0000::0000</code></td><td><code><code>9B3B2090947A2486F0F3555C6DB98E56</code></code></td><td><code><code>D5BE04A1303C1DD9385486CF0DF68088</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDDN</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>e4</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.69.0</code></td><td><code>0000::0000</code></td><td><code><code>9B3B2090947A2486F0F3555C6DB98E56</code></code></td><td><code><code>D5BE04A1303C1DD9385486CF0DF68088</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDDP</code></td><td><code>JPN</code></td><td><code>Terminal (??)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.155.0</code></td><td><code>0000::0000</code></td><td><code><code>E6E91C814845C68667950B52774E610F</code></code></td><td><code><code>43227E2DCD1A1A1134E4F60BDB6E1D89</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDDP</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.155.0</code></td><td><code>0000::0000</code></td><td><code><code>E6E91C814845C68667950B52774E610F</code></code></td><td><code><code>43227E2DCD1A1A1134E4F60BDB6E1D89</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDDP</code></td><td><code>JPN</code></td><td><code>Terminal (??)</code></td><td><code><code>65</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.155.0</code></td><td><code>0000::0000</code></td><td><code><code>E6E91C814845C68667950B52774E610F</code></code></td><td><code><code>43227E2DCD1A1A1134E4F60BDB6E1D89</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDDP</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>65</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.155.0</code></td><td><code>0000::0000</code></td><td><code><code>E6E91C814845C68667950B52774E610F</code></code></td><td><code><code>43227E2DCD1A1A1134E4F60BDB6E1D89</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDDS</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.160.0</code></td><td><code>0000::0000</code></td><td><code><code>5272EA6AE573FD2ED90FFBFF4E3B170C</code></code></td><td><code><code>45437CA754B19C4B9F70C4DD0331F432</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDDS</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>Nu Lv 3.1 (AAZ)</code></td><td><code>192.168.160.0</code></td><td><code>0000::0000</code></td><td><code><code>5272EA6AE573FD2ED90FFBFF4E3B170C</code></code></td><td><code><code>45437CA754B19C4B9F70C4DD0331F432</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDDT</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.162.0</code></td><td><code>0000::0000</code></td><td><code><code>764B8462192DBA6655E2A0E49635A90B</code></code></td><td><code><code>9BF8267AD7E3C7B3179F5ECD661DE76A</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDDW</code></td><td><code>ALL</code></td><td><code>Satellite (ST)</code></td><td><code><code>25</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>0</code></td><td><code>ALLS X2 (ACB)</code></td><td><code>192.168.0.0</code></td><td><code>0000::0000</code></td><td><code><code>C1F88053CCF85D67CB8556D9A0CA7CC3</code></code></td><td><code><code>085CA00674C1C4EB142FCF0A3495856B</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDDW</code></td><td><code>ALL</code></td><td><code>Satellite (ST)</code></td><td><code><code>25</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.0.0</code></td><td><code>0000::0000</code></td><td><code><code>C1F88053CCF85D67CB8556D9A0CA7CC3</code></code></td><td><code><code>085CA00674C1C4EB142FCF0A3495856B</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDEB</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>24</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.163.0</code></td><td><code>0000::0000</code></td><td><code><code>DFD69032CEA0AAB606EB2C4A409F2D35</code></code></td><td><code><code>F55F915DC3608ABB127C5D0CF7826AC9</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDEB</code></td><td><code>JPN</code></td><td><code>Terminal (??)</code></td><td><code><code>24</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.163.0</code></td><td><code>0000::0000</code></td><td><code><code>DFD69032CEA0AAB606EB2C4A409F2D35</code></code></td><td><code><code>F55F915DC3608ABB127C5D0CF7826AC9</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDEB</code></td><td><code>EXP</code></td><td><code>Terminal (??)</code></td><td><code><code>24</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.163.0</code></td><td><code>0000::0000</code></td><td><code><code>DFD69032CEA0AAB606EB2C4A409F2D35</code></code></td><td><code><code>F55F915DC3608ABB127C5D0CF7826AC9</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDEB</code></td><td><code>EXP</code></td><td><code>Satellite (ST)</code></td><td><code><code>24</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.163.0</code></td><td><code>0000::0000</code></td><td><code><code>DFD69032CEA0AAB606EB2C4A409F2D35</code></code></td><td><code><code>F55F915DC3608ABB127C5D0CF7826AC9</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDEB</code></td><td><code>EXP</code></td><td><code>Satellite (ST)</code></td><td><code><code>25</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.163.0</code></td><td><code>0000::0000</code></td><td><code><code>DFD69032CEA0AAB606EB2C4A409F2D35</code></code></td><td><code><code>F55F915DC3608ABB127C5D0CF7826AC9</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDEB</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>25</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.163.0</code></td><td><code>0000::0000</code></td><td><code><code>DFD69032CEA0AAB606EB2C4A409F2D35</code></code></td><td><code><code>F55F915DC3608ABB127C5D0CF7826AC9</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDEB</code></td><td><code>JPN</code></td><td><code>Terminal (??)</code></td><td><code><code>25</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.163.0</code></td><td><code>0000::0000</code></td><td><code><code>DFD69032CEA0AAB606EB2C4A409F2D35</code></code></td><td><code><code>F55F915DC3608ABB127C5D0CF7826AC9</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDEB</code></td><td><code>EXP</code></td><td><code>Terminal (??)</code></td><td><code><code>25</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.163.0</code></td><td><code>0000::0000</code></td><td><code><code>DFD69032CEA0AAB606EB2C4A409F2D35</code></code></td><td><code><code>F55F915DC3608ABB127C5D0CF7826AC9</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDEB</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.163.0</code></td><td><code>0000::0000</code></td><td><code><code>DFD69032CEA0AAB606EB2C4A409F2D35</code></code></td><td><code><code>F55F915DC3608ABB127C5D0CF7826AC9</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDEB</code></td><td><code>JPN</code></td><td><code>Terminal (??)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.163.0</code></td><td><code>0000::0000</code></td><td><code><code>DFD69032CEA0AAB606EB2C4A409F2D35</code></code></td><td><code><code>F55F915DC3608ABB127C5D0CF7826AC9</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDEB</code></td><td><code>EXP</code></td><td><code>Satellite (ST)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.163.0</code></td><td><code>0000::0000</code></td><td><code><code>DFD69032CEA0AAB606EB2C4A409F2D35</code></code></td><td><code><code>F55F915DC3608ABB127C5D0CF7826AC9</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDEB</code></td><td><code>JPN</code></td><td><code>Terminal (??)</code></td><td><code><code>65</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.163.0</code></td><td><code>0000::0000</code></td><td><code><code>DFD69032CEA0AAB606EB2C4A409F2D35</code></code></td><td><code><code>F55F915DC3608ABB127C5D0CF7826AC9</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDEB</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>65</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.163.0</code></td><td><code>0000::0000</code></td><td><code><code>DFD69032CEA0AAB606EB2C4A409F2D35</code></code></td><td><code><code>F55F915DC3608ABB127C5D0CF7826AC9</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDEC</code></td><td><code>JPN</code></td><td><code>Terminal (??)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.155.0</code></td><td><code>0000::0000</code></td><td><code><code>02AF292B025A67EE82BED12E8898BF34</code></code></td><td><code><code>4B143B304693B5238BAAF8FC5A6E5C01</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDEC</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.155.0</code></td><td><code>0000::0000</code></td><td><code><code>02AF292B025A67EE82BED12E8898BF34</code></code></td><td><code><code>4B143B304693B5238BAAF8FC5A6E5C01</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDEC</code></td><td><code>JPN</code></td><td><code>Terminal (??)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.164.0</code></td><td><code>0000::0000</code></td><td><code><code>02AF292B025A67EE82BED12E8898BF34</code></code></td><td><code><code>4B143B304693B5238BAAF8FC5A6E5C01</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDEC</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.164.0</code></td><td><code>0000::0000</code></td><td><code><code>02AF292B025A67EE82BED12E8898BF34</code></code></td><td><code><code>4B143B304693B5238BAAF8FC5A6E5C01</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDEC</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>65</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.164.0</code></td><td><code>0000::0000</code></td><td><code><code>02AF292B025A67EE82BED12E8898BF34</code></code></td><td><code><code>4B143B304693B5238BAAF8FC5A6E5C01</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDEC</code></td><td><code>JPN</code></td><td><code>Terminal (??)</code></td><td><code><code>65</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.164.0</code></td><td><code>0000::0000</code></td><td><code><code>02AF292B025A67EE82BED12E8898BF34</code></code></td><td><code><code>4B143B304693B5238BAAF8FC5A6E5C01</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDEC</code></td><td><code>JPN</code></td><td><code>Terminal (??)</code></td><td><code><code>65</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.155.0</code></td><td><code>0000::0000</code></td><td><code><code>02AF292B025A67EE82BED12E8898BF34</code></code></td><td><code><code>4B143B304693B5238BAAF8FC5A6E5C01</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDEC</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>65</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.155.0</code></td><td><code>0000::0000</code></td><td><code><code>02AF292B025A67EE82BED12E8898BF34</code></code></td><td><code><code>4B143B304693B5238BAAF8FC5A6E5C01</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDED</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.165.0</code></td><td><code>0000::0000</code></td><td><code><code>2687C32336142426FD927613D0925133</code></code></td><td><code><code>A1CAE504C8C5E08C04D992EDBC5A4E3A</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDEE</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.69.0</code></td><td><code>0000::0000</code></td><td><code><code>3A72741FF61D178AFB79FF1BB160728F</code></code></td><td><code><code>2DA1CD60559BC9F3450AFD13F220A49E</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDEG</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.166.0</code></td><td><code>0000::0000</code></td><td><code><code>8F14C90D89EC333DF010F9942CDC5676</code></code></td><td><code><code>E1F1BC99B8E3BA5F63322363DB7C6D51</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDEG</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>65</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.166.0</code></td><td><code>0000::0000</code></td><td><code><code>8F14C90D89EC333DF010F9942CDC5676</code></code></td><td><code><code>E1F1BC99B8E3BA5F63322363DB7C6D51</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDEJ</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.167.0</code></td><td><code>0000::0000</code></td><td><code><code>F4A506F8906C19C4639110EA0D84ABFE</code></code></td><td><code><code>5E1F6C4A1188EECBB758787DF1FDD2D9</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDEM</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.168.0</code></td><td><code>0000::0000</code></td><td><code><code>464B92E7D9E50CE6D92C9E370D5FDF2B</code></code></td><td><code><code>5076349FDD5839D0C94E6271D1B7E2FB</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDEM</code></td><td><code>JPN</code></td><td><code>UNKNOWN:5</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.168.0</code></td><td><code>0000::0000</code></td><td><code><code>464B92E7D9E50CE6D92C9E370D5FDF2B</code></code></td><td><code><code>5076349FDD5839D0C94E6271D1B7E2FB</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDEM</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>65</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.168.0</code></td><td><code>0000::0000</code></td><td><code><code>464B92E7D9E50CE6D92C9E370D5FDF2B</code></code></td><td><code><code>5076349FDD5839D0C94E6271D1B7E2FB</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDEP</code></td><td><code>JPN</code></td><td><code>UNKNOWN:22</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.175.0</code></td><td><code>0000::0000</code></td><td><code><code>ABDCD0D2E165F26C4CAEB58CEE0734B4</code></code></td><td><code><code>CEA3E44F35FD6C3D1D74B78BE7384782</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDEP</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.175.0</code></td><td><code>0000::0000</code></td><td><code><code>ABDCD0D2E165F26C4CAEB58CEE0734B4</code></code></td><td><code><code>CEA3E44F35FD6C3D1D74B78BE7384782</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDEP</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>65</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.175.0</code></td><td><code>0000::0000</code></td><td><code><code>ABDCD0D2E165F26C4CAEB58CEE0734B4</code></code></td><td><code><code>CEA3E44F35FD6C3D1D74B78BE7384782</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDER</code></td><td><code>CHN</code></td><td><code>Satellite (ST)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>Nu (AAV)</code></td><td><code>192.168.158.0</code></td><td><code>0000::0000</code></td><td><code><code>F0903BC3FF83434CC45893290257A7F7</code></code></td><td><code><code>B8151112A3E81CA7049EAE11A36F7362</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDEZ</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.172.0</code></td><td><code>0000::0000</code></td><td><code><code>EB7B708E6D996ED3241F1769F82BA4F0</code></code></td><td><code><code>110BB7D93549498351E4E4A455E113EB</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDFG</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>65</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.176.0</code></td><td><code>0000::0000</code></td><td><code><code>5703455E6C6387B456240FFB1D37D9D5</code></code></td><td><code><code>2E6B48A1B83FB3F157F4203EF0E74FDB</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDFL</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>Nu SX (AAW)</code></td><td><code>192.168.179.0</code></td><td><code>0000::0000</code></td><td><code><code>E06C1C41A89E29724479CB3546D9BF5C</code></code></td><td><code><code>014FA325941612C624490F496854A79A</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDFL</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>65</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>Nu SX (AAW)</code></td><td><code>192.168.179.0</code></td><td><code>0000::0000</code></td><td><code><code>E06C1C41A89E29724479CB3546D9BF5C</code></code></td><td><code><code>014FA325941612C624490F496854A79A</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDFT</code></td><td><code>JPN</code></td><td><code>Live (LV)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.86.0</code></td><td><code>0000::0000</code></td><td><code><code>F23FCA0721136FEF222343A9971C8D6C</code></code></td><td><code><code>A915572D4AC5CF70BDF3ED5F592D5619</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDFT</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.86.0</code></td><td><code>0000::0000</code></td><td><code><code>F23FCA0721136FEF222343A9971C8D6C</code></code></td><td><code><code>A915572D4AC5CF70BDF3ED5F592D5619</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDFT</code></td><td><code>JPN</code></td><td><code>UNKNOWN:22</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.86.0</code></td><td><code>0000::0000</code></td><td><code><code>F23FCA0721136FEF222343A9971C8D6C</code></code></td><td><code><code>A915572D4AC5CF70BDF3ED5F592D5619</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDFT</code></td><td><code>JPN</code></td><td><code>UNKNOWN:12</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.86.0</code></td><td><code>0000::0000</code></td><td><code><code>F23FCA0721136FEF222343A9971C8D6C</code></code></td><td><code><code>A915572D4AC5CF70BDF3ED5F592D5619</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDFT</code></td><td><code>JPN</code></td><td><code>Live (LV)</code></td><td><code><code>65</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.86.0</code></td><td><code>0000::0000</code></td><td><code><code>F23FCA0721136FEF222343A9971C8D6C</code></code></td><td><code><code>A915572D4AC5CF70BDF3ED5F592D5619</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDFT</code></td><td><code>JPN</code></td><td><code>UNKNOWN:12</code></td><td><code><code>65</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.86.0</code></td><td><code>0000::0000</code></td><td><code><code>F23FCA0721136FEF222343A9971C8D6C</code></code></td><td><code><code>A915572D4AC5CF70BDF3ED5F592D5619</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDFT</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>65</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.86.0</code></td><td><code>0000::0000</code></td><td><code><code>F23FCA0721136FEF222343A9971C8D6C</code></code></td><td><code><code>A915572D4AC5CF70BDF3ED5F592D5619</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDFT</code></td><td><code>JPN</code></td><td><code>UNKNOWN:11</code></td><td><code><code>6c</code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.86.0</code></td><td><code>0000::0000</code></td><td><code><code>F23FCA0721136FEF222343A9971C8D6C</code></code></td><td><code><code>A915572D4AC5CF70BDF3ED5F592D5619</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDFT</code></td><td><code>JPN</code></td><td><code>UNKNOWN:21</code></td><td><code><code>6c</code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.86.0</code></td><td><code>0000::0000</code></td><td><code><code>F23FCA0721136FEF222343A9971C8D6C</code></code></td><td><code><code>A915572D4AC5CF70BDF3ED5F592D5619</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDFT</code></td><td><code>JPN</code></td><td><code>Server (SV)</code></td><td><code><code>6c</code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.86.0</code></td><td><code>0000::0000</code></td><td><code><code>F23FCA0721136FEF222343A9971C8D6C</code></code></td><td><code><code>A915572D4AC5CF70BDF3ED5F592D5619</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDFT</code></td><td><code>JPN</code></td><td><code>Server (SV)</code></td><td><code><code>6d</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.86.0</code></td><td><code>0000::0000</code></td><td><code><code>F23FCA0721136FEF222343A9971C8D6C</code></code></td><td><code><code>A915572D4AC5CF70BDF3ED5F592D5619</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDFT</code></td><td><code>JPN</code></td><td><code>UNKNOWN:11</code></td><td><code><code>6d</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.86.0</code></td><td><code>0000::0000</code></td><td><code><code>F23FCA0721136FEF222343A9971C8D6C</code></code></td><td><code><code>A915572D4AC5CF70BDF3ED5F592D5619</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDFV</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>Nu (AAV)</code></td><td><code>192.168.149.0</code></td><td><code>0000::0000</code></td><td><code><code>41E88EF71E353A8118C265CA1C5411DE</code></code></td><td><code><code>D973F89D7E1B730FC5B69AF73047ADAB</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDFV</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.149.0</code></td><td><code>0000::0000</code></td><td><code><code>41E88EF71E353A8118C265CA1C5411DE</code></code></td><td><code><code>D973F89D7E1B730FC5B69AF73047ADAB</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDGA</code></td><td><code>EXP</code></td><td><code>Satellite (ST)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.172.0</code></td><td><code>0000::0000</code></td><td><code><code>48E025DB167E6DDBD644470761B8F13A</code></code></td><td><code><code>77A5DAB4A96DA910769F8177B5CC8314</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDGB</code></td><td><code>CHN</code></td><td><code>Satellite (ST)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.172.0</code></td><td><code>0000::0000</code></td><td><code><code>65BF2FD5B58BD9F152201493B26D22C4</code></code></td><td><code><code>496836BEFDAD86ACD968A2B00576042A</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDGH</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>01</code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code></code></td><td><code></code></td><td><code></code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.185.0</code></td><td><code>0000::0000</code></td><td><code><code>36D93AA95A3AF61F381B1A966B022D4A</code></code></td><td><code><code>C9B6E4E9DDE93B52981AC59C43BA405A</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDGK</code></td><td><code>EXP</code></td><td><code>Terminal (??)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.163.0</code></td><td><code>0000::0000</code></td><td><code><code>9B6A779462BADCA6AB9D31EB4CAA82D3</code></code></td><td><code><code>47E4949A368E6FBEEC411AB6593BA6E1</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDGK</code></td><td><code>EXP</code></td><td><code>Satellite (ST)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.163.0</code></td><td><code>0000::0000</code></td><td><code><code>9B6A779462BADCA6AB9D31EB4CAA82D3</code></code></td><td><code><code>47E4949A368E6FBEEC411AB6593BA6E1</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDGK</code></td><td><code>EXP</code></td><td><code>Satellite (ST)</code></td><td><code><code>65</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.163.0</code></td><td><code>0000::0000</code></td><td><code><code>9B6A779462BADCA6AB9D31EB4CAA82D3</code></code></td><td><code><code>47E4949A368E6FBEEC411AB6593BA6E1</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDGK</code></td><td><code>EXP</code></td><td><code>Terminal (??)</code></td><td><code><code>65</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.163.0</code></td><td><code>0000::0000</code></td><td><code><code>9B6A779462BADCA6AB9D31EB4CAA82D3</code></code></td><td><code><code>47E4949A368E6FBEEC411AB6593BA6E1</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDGQ</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.187.0</code></td><td><code>0000::0000</code></td><td><code><code>4BA8B06F1D06642D95C2FE3637E8AA14</code></code></td><td><code><code>3276BFD62B11A0623CF7E00D3D35A969</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDGS</code></td><td><code>EXP</code></td><td><code>Satellite (ST)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.139.0</code></td><td><code>0000::0000</code></td><td><code><code>9359E460857ADE9D8C6848FFC6DBCE12</code></code></td><td><code><code>DEE1137D3075F6342E5414EE020C8DDA</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDGS</code></td><td><code>EXP</code></td><td><code>Satellite (ST)</code></td><td><code><code>74</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.139.0</code></td><td><code>0000::0000</code></td><td><code><code>9359E460857ADE9D8C6848FFC6DBCE12</code></code></td><td><code><code>DEE1137D3075F6342E5414EE020C8DDA</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDGT</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.158.0</code></td><td><code>0000::0000</code></td><td><code><code>B7317E58BA349BD5083BEDE40ED46011</code></code></td><td><code><code>3496BD50B3A8219CA683AEDF65F88012</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDGT</code></td><td><code>EXP</code></td><td><code>Satellite (ST)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.158.0</code></td><td><code>0000::0000</code></td><td><code><code>B7317E58BA349BD5083BEDE40ED46011</code></code></td><td><code><code>3496BD50B3A8219CA683AEDF65F88012</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDGY</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.189.0</code></td><td><code>0000::0000</code></td><td><code><code>4A90AE39D573B7467584EDA2A75D57C7</code></code></td><td><code><code>4E658B8254EA74A5947052FDF8480283</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDGY</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>65</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.189.0</code></td><td><code>0000::0000</code></td><td><code><code>4A90AE39D573B7467584EDA2A75D57C7</code></code></td><td><code><code>4E658B8254EA74A5947052FDF8480283</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDGY</code></td><td><code>JPN</code></td><td><code>Server (SV)</code></td><td><code><code>6c</code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.189.0</code></td><td><code>0000::0000</code></td><td><code><code>4A90AE39D573B7467584EDA2A75D57C7</code></code></td><td><code><code>4E658B8254EA74A5947052FDF8480283</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDGY</code></td><td><code>JPN</code></td><td><code>Server (SV)</code></td><td><code><code>6d</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.189.0</code></td><td><code>0000::0000</code></td><td><code><code>4A90AE39D573B7467584EDA2A75D57C7</code></code></td><td><code><code>4E658B8254EA74A5947052FDF8480283</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDHD</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.139.0</code></td><td><code>0000::0000</code></td><td><code><code>5B7C9D1CADC06352B2FB13625CA84751</code></code></td><td><code><code>3283E14746A69FDA67F2EF8F97B0049E</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDHD</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>65</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.139.0</code></td><td><code>0000::0000</code></td><td><code><code>5B7C9D1CADC06352B2FB13625CA84751</code></code></td><td><code><code>3283E14746A69FDA67F2EF8F97B0049E</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDHJ</code></td><td><code>CHN</code></td><td><code>Satellite (ST)</code></td><td><code><code>65</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.139.0</code></td><td><code>0000::0000</code></td><td><code><code>3988C8ED7CCA22C396E6CA1600C712BF</code></code></td><td><code><code>BAB62A0484C6EF1B516F04EAF9792411</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDHR</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>64</code></code></td><td><code></code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.166.0</code></td><td><code>0000::0000</code></td><td><code><code>2E7A6DBA5533FB29F8B575FDFF55AE44</code></code></td><td><code><code>8FBA8203E734CF2A884FC1C699A95379</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
<tr><td><code>SDHR</code></td><td><code>JPN</code></td><td><code>Satellite (ST)</code></td><td><code><code>65</code></code></td><td><code>X</code></td><td><code>X</code></td><td><code></code></td><td><code></code></td><td><code>X</code></td><td><code>X</code></td><td><code>0</code></td><td><code>ALLS X (ACA)</code></td><td><code>192.168.166.0</code></td><td><code>0000::0000</code></td><td><code><code>2E7A6DBA5533FB29F8B575FDFF55AE44</code></code></td><td><code><code>8FBA8203E734CF2A884FC1C699A95379</code></code></td><td><code><code>5C84A9E726EAA5DD351F2B0750C23697</code></code></td><td><code><code>C063BF6F562D084D7963C987F5281761</code></code></td></tr>
|
||||
</tbody></table>
|
||||
</body></html>
|
@ -1 +0,0 @@
|
||||
https://docs.google.com/spreadsheets/d/17hDcZzN3F0lNbihgEcAQURs3ff0AuPZgS66Dly2iZ3Q/
|
Binary file not shown.
BIN
tools/Filesystem/Extra/ExFat7z/ExFat7z.32.dll
Normal file
BIN
tools/Filesystem/Extra/ExFat7z/ExFat7z.32.dll
Normal file
Binary file not shown.
BIN
tools/Filesystem/Extra/ExFat7z/ExFat7z.64.dll
Normal file
BIN
tools/Filesystem/Extra/ExFat7z/ExFat7z.64.dll
Normal file
Binary file not shown.
15
tools/Filesystem/Extra/ExFat7z/ReadMe.txt
Normal file
15
tools/Filesystem/Extra/ExFat7z/ReadMe.txt
Normal file
@ -0,0 +1,15 @@
|
||||
ExFat7z
|
||||
|
||||
http://www.tc4shell.com/en/7zip/ExFat7z/
|
||||
Copyright (C) 2019 Dec Software.
|
||||
|
||||
ExFat7z is a small plugin for the popular 7-Zip archiver. You can use ExFat7z
|
||||
with 7-Zip to open ExFat disk images.
|
||||
|
||||
INSTALLATION
|
||||
|
||||
To install the plugin into the 7-Zip installation folder, you need to create the
|
||||
"Formats" subfolder. After that, copy ExFat7z.64.dll or ExFat7z.32.dll (depending on
|
||||
your 7-Zip edition) to that subfolder. If you do that, each time you launch
|
||||
7-Zip, it will automatically find ExFat7z and use it when opening ExFat disk
|
||||
images.
|
BIN
tools/Filesystem/Extra/OsfMount/osfmount.exe
Normal file
BIN
tools/Filesystem/Extra/OsfMount/osfmount.exe
Normal file
Binary file not shown.
8
tools/Filesystem/Fsdecrypt/.gitignore
vendored
Normal file
8
tools/Filesystem/Fsdecrypt/.gitignore
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
/target
|
||||
*.zip
|
||||
*.app
|
||||
*.opt
|
||||
*.vhd
|
||||
*.ntfs
|
||||
*.exfat
|
||||
flamegraph.svg
|
276
tools/Filesystem/Fsdecrypt/Cargo.lock
generated
Normal file
276
tools/Filesystem/Fsdecrypt/Cargo.lock
generated
Normal file
@ -0,0 +1,276 @@
|
||||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 3
|
||||
|
||||
[[package]]
|
||||
name = "aes"
|
||||
version = "0.8.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b169f7a6d4742236a0a00c541b845991d0ac43e546831af1249753ab4c3aa3a0"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"cipher",
|
||||
"cpufeatures",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "anyhow"
|
||||
version = "1.0.86"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b3d1d046238990b9cf5bcde22a3fb3584ee5cf65fb2765f454ed428c7a0063da"
|
||||
|
||||
[[package]]
|
||||
name = "block-padding"
|
||||
version = "0.3.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93"
|
||||
dependencies = [
|
||||
"generic-array",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cbc"
|
||||
version = "0.1.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6"
|
||||
dependencies = [
|
||||
"cipher",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cfg-if"
|
||||
version = "1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||
|
||||
[[package]]
|
||||
name = "cipher"
|
||||
version = "0.4.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad"
|
||||
dependencies = [
|
||||
"crypto-common",
|
||||
"inout",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "console"
|
||||
version = "0.15.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb"
|
||||
dependencies = [
|
||||
"encode_unicode",
|
||||
"lazy_static",
|
||||
"libc",
|
||||
"unicode-width",
|
||||
"windows-sys",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "cpufeatures"
|
||||
version = "0.2.12"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504"
|
||||
dependencies = [
|
||||
"libc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crc32fast"
|
||||
version = "1.4.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "crypto-common"
|
||||
version = "0.1.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
|
||||
dependencies = [
|
||||
"generic-array",
|
||||
"typenum",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "encode_unicode"
|
||||
version = "0.3.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f"
|
||||
|
||||
[[package]]
|
||||
name = "fsdecrypt"
|
||||
version = "0.1.1"
|
||||
dependencies = [
|
||||
"aes",
|
||||
"anyhow",
|
||||
"cbc",
|
||||
"crc32fast",
|
||||
"hex-literal",
|
||||
"indicatif",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "generic-array"
|
||||
version = "0.14.7"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
|
||||
dependencies = [
|
||||
"typenum",
|
||||
"version_check",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "hex-literal"
|
||||
version = "0.4.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6fe2267d4ed49bc07b63801559be28c718ea06c4738b7a03c94df7386d2cde46"
|
||||
|
||||
[[package]]
|
||||
name = "indicatif"
|
||||
version = "0.17.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "763a5a8f45087d6bcea4222e7b72c291a054edf80e4ef6efd2a4979878c7bea3"
|
||||
dependencies = [
|
||||
"console",
|
||||
"instant",
|
||||
"number_prefix",
|
||||
"portable-atomic",
|
||||
"unicode-width",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "inout"
|
||||
version = "0.1.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5"
|
||||
dependencies = [
|
||||
"block-padding",
|
||||
"generic-array",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "instant"
|
||||
version = "0.1.13"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "lazy_static"
|
||||
version = "1.5.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
|
||||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.155"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "97b3888a4aecf77e811145cadf6eef5901f4782c53886191b2f693f24761847c"
|
||||
|
||||
[[package]]
|
||||
name = "number_prefix"
|
||||
version = "0.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "830b246a0e5f20af87141b25c173cd1b609bd7779a4617d6ec582abaf90870f3"
|
||||
|
||||
[[package]]
|
||||
name = "portable-atomic"
|
||||
version = "1.7.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "da544ee218f0d287a911e9c99a39a8c9bc8fcad3cb8db5959940044ecfc67265"
|
||||
|
||||
[[package]]
|
||||
name = "typenum"
|
||||
version = "1.17.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825"
|
||||
|
||||
[[package]]
|
||||
name = "unicode-width"
|
||||
version = "0.1.13"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0336d538f7abc86d282a4189614dfaa90810dfc2c6f6427eaf88e16311dd225d"
|
||||
|
||||
[[package]]
|
||||
name = "version_check"
|
||||
version = "0.9.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
|
||||
|
||||
[[package]]
|
||||
name = "windows-sys"
|
||||
version = "0.52.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
|
||||
dependencies = [
|
||||
"windows-targets",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows-targets"
|
||||
version = "0.52.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
|
||||
dependencies = [
|
||||
"windows_aarch64_gnullvm",
|
||||
"windows_aarch64_msvc",
|
||||
"windows_i686_gnu",
|
||||
"windows_i686_gnullvm",
|
||||
"windows_i686_msvc",
|
||||
"windows_x86_64_gnu",
|
||||
"windows_x86_64_gnullvm",
|
||||
"windows_x86_64_msvc",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "windows_aarch64_gnullvm"
|
||||
version = "0.52.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
|
||||
|
||||
[[package]]
|
||||
name = "windows_aarch64_msvc"
|
||||
version = "0.52.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
|
||||
|
||||
[[package]]
|
||||
name = "windows_i686_gnu"
|
||||
version = "0.52.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
|
||||
|
||||
[[package]]
|
||||
name = "windows_i686_gnullvm"
|
||||
version = "0.52.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
|
||||
|
||||
[[package]]
|
||||
name = "windows_i686_msvc"
|
||||
version = "0.52.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_gnu"
|
||||
version = "0.52.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_gnullvm"
|
||||
version = "0.52.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
|
||||
|
||||
[[package]]
|
||||
name = "windows_x86_64_msvc"
|
||||
version = "0.52.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
|
12
tools/Filesystem/Fsdecrypt/Cargo.toml
Normal file
12
tools/Filesystem/Fsdecrypt/Cargo.toml
Normal file
@ -0,0 +1,12 @@
|
||||
[package]
|
||||
name = "fsdecrypt"
|
||||
version = "0.1.1"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
aes = "0.8.4"
|
||||
anyhow = "1.0.86"
|
||||
cbc = "0.1.2"
|
||||
crc32fast = "1.4.2"
|
||||
hex-literal = "0.4.1"
|
||||
indicatif = "0.17.8"
|
14
tools/Filesystem/Fsdecrypt/LICENSE
Normal file
14
tools/Filesystem/Fsdecrypt/LICENSE
Normal file
@ -0,0 +1,14 @@
|
||||
BSD Zero Clause License
|
||||
|
||||
Copyright (c) 2024 beerpsi
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any
|
||||
purpose with or without fee is hereby granted.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
4
tools/Filesystem/Fsdecrypt/README.md
Normal file
4
tools/Filesystem/Fsdecrypt/README.md
Normal file
@ -0,0 +1,4 @@
|
||||
# Fsdecrypt
|
||||
|
||||
This tool was made by beerpsi and it's latest version is available [here](https://gitea.tendokyu.moe/beerpsi/fsdecrypt)
|
||||
For simplicity's sake, you can use the pre-compiled [.exe](./fsdecrypt.exe)
|
BIN
tools/Filesystem/Fsdecrypt/fsdecrypt.exe
Normal file
BIN
tools/Filesystem/Fsdecrypt/fsdecrypt.exe
Normal file
Binary file not shown.
77
tools/Filesystem/Fsdecrypt/src/bootid.rs
Normal file
77
tools/Filesystem/Fsdecrypt/src/bootid.rs
Normal file
@ -0,0 +1,77 @@
|
||||
use std::fmt::Display;
|
||||
|
||||
use hex_literal::hex;
|
||||
|
||||
pub const BOOTID_KEY: [u8; 16] = hex!("09ca5efd30c9aaef3804d0a7e3fa7120");
|
||||
pub const BOOTID_IV: [u8; 16] = hex!("b155c22c2e7f0491fa7f0fdc217aff90");
|
||||
|
||||
#[allow(non_snake_case)]
|
||||
pub mod ContainerType {
|
||||
pub const OS: u8 = 0x00;
|
||||
pub const APP: u8 = 0x01;
|
||||
pub const OPTION: u8 = 0x02;
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, Debug)]
|
||||
#[repr(C)]
|
||||
pub struct Timestamp {
|
||||
pub year: u16,
|
||||
pub month: u8,
|
||||
pub day: u8,
|
||||
pub hour: u8,
|
||||
pub minute: u8,
|
||||
pub second: u8,
|
||||
unk1: u8,
|
||||
}
|
||||
|
||||
impl Display for Timestamp {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
write!(
|
||||
f,
|
||||
"{:<04}{:<02}{:<02}{:<02}{:<02}{:<02}",
|
||||
self.year, self.month, self.day, self.hour, self.minute, self.second
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, Debug)]
|
||||
#[repr(C)]
|
||||
pub struct Version {
|
||||
pub release: u8,
|
||||
pub minor: u8,
|
||||
pub major: u16,
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy)]
|
||||
#[repr(C)]
|
||||
pub union GameVersion {
|
||||
pub version: Version,
|
||||
pub option: [u8; 4],
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy)]
|
||||
#[repr(C)]
|
||||
pub struct BootId {
|
||||
pub crc32: u32,
|
||||
pub length: u32,
|
||||
pub signature: [u8; 4],
|
||||
unk1: u8,
|
||||
pub container_type: u8,
|
||||
pub sequence_number: u8,
|
||||
pub use_custom_iv: bool,
|
||||
pub game_id: [u8; 4],
|
||||
pub target_timestamp: Timestamp,
|
||||
pub target_version: GameVersion,
|
||||
pub block_count: u64,
|
||||
pub block_size: u64,
|
||||
pub header_block_count: u64,
|
||||
unk2: u64,
|
||||
pub os_id: [u8; 3],
|
||||
pub os_generation: u8,
|
||||
pub source_timestamp: Timestamp,
|
||||
pub source_version: Version,
|
||||
pub os_version: Version,
|
||||
pub padding: [u8; 8],
|
||||
// We don't need the entire bootID, so keep size down by not including the string table.
|
||||
// pub strings: [u8; 10156],
|
||||
}
|
516
tools/Filesystem/Fsdecrypt/src/crypto.rs
Normal file
516
tools/Filesystem/Fsdecrypt/src/crypto.rs
Normal file
@ -0,0 +1,516 @@
|
||||
use std::path::Path;
|
||||
|
||||
use aes::cipher::{block_padding::NoPadding, BlockDecryptMut, KeyIvInit};
|
||||
use anyhow::{anyhow, Result};
|
||||
use hex_literal::hex;
|
||||
|
||||
pub const NTFS_HEADER: [u8; 16] = hex!("eb52904e544653202020200010010000");
|
||||
pub const EXFAT_HEADER: [u8; 16] = hex!("eb769045584641542020200000000000");
|
||||
|
||||
pub const OPTION_KEY: [u8; 16] = hex!("5c84a9e726eaa5dd351f2b0750c23697");
|
||||
pub const OPTION_IV: [u8; 16] = hex!("c063bf6f562d084d7963c987f5281761");
|
||||
|
||||
pub type Aes128CbcDec = cbc::Decryptor<aes::Aes128Dec>;
|
||||
|
||||
pub struct GameKeys {
|
||||
pub key: [u8; 16],
|
||||
pub iv: Option<[u8; 16]>,
|
||||
}
|
||||
|
||||
pub fn calculate_page_iv(file_offset: u64, file_iv: &[u8], page_iv: &mut [u8]) {
|
||||
for (i, (fbyte, pbyte)) in file_iv.iter().zip(page_iv.iter_mut()).enumerate() {
|
||||
*pbyte = fbyte ^ (file_offset >> (8 * (i % 8))) as u8;
|
||||
}
|
||||
}
|
||||
|
||||
pub fn calculate_file_iv(
|
||||
key: [u8; 16],
|
||||
expected_header: [u8; 16],
|
||||
first_page: &[u8],
|
||||
) -> Result<[u8; 16]> {
|
||||
let mut iv = [0u8; 16];
|
||||
let mut header = [0u8; 16];
|
||||
|
||||
header.copy_from_slice(&first_page[..16]);
|
||||
|
||||
calculate_page_iv(0, &expected_header, &mut iv);
|
||||
|
||||
let cipher = Aes128CbcDec::new_from_slices(&key, &iv).map_err(|e| anyhow!(e))?;
|
||||
|
||||
cipher
|
||||
.decrypt_padded_mut::<NoPadding>(&mut header)
|
||||
.map_err(|e| anyhow!(e))?;
|
||||
|
||||
Ok(header)
|
||||
}
|
||||
|
||||
pub fn get_game_keys(game_id: &str) -> Option<GameKeys> {
|
||||
match game_id {
|
||||
// Nu Firmware / Hardware Test
|
||||
"SBZS" => Some(GameKeys {
|
||||
key: hex!("2ecbcff65ce0abecc10547f8ac8351d8"),
|
||||
iv: Some(hex!("f2ac6c2817d0574bba113d497e319f3e")),
|
||||
}),
|
||||
|
||||
// KEY CHIP NU FACTORY / KEY CHIP NUSX FACTORY
|
||||
"SBZT" => Some(GameKeys {
|
||||
key: hex!("9ab9ce55ed9c194a715a73a7699f795b"),
|
||||
iv: Some(hex!("8552de88fedda6e859369fb000f44d5b")),
|
||||
}),
|
||||
|
||||
// Nu Firmware / Hardware Test
|
||||
"SBZU" => Some(GameKeys {
|
||||
key: hex!("eb1228254cdd3077eb3e441c0227bf40"),
|
||||
iv: Some(hex!("3f9b4676118cee129fe2f1cb2747bca5")),
|
||||
}),
|
||||
|
||||
// Project DIVA Arcade Future Tone
|
||||
"SBZV" => Some(GameKeys {
|
||||
key: hex!("3274a399594d84779625940b69c02d3f"),
|
||||
iv: Some(hex!("675ba66d29c87923f5f154c406afee42")),
|
||||
}),
|
||||
|
||||
// Wonderland Wars
|
||||
"SDAP" => Some(GameKeys {
|
||||
key: hex!("41b5027c5e99d94aa9335d6d71838ecf"),
|
||||
iv: Some(hex!("41b5027c5e99d94aa9335d6d71838ecf")),
|
||||
}),
|
||||
|
||||
// Herobank Arcade
|
||||
"SDAQ" => Some(GameKeys {
|
||||
key: hex!("c28f22bc1b339ae64180739886dc83d6"),
|
||||
iv: Some(hex!("0a29fd145d72bf8dedd436025df0a9fc")),
|
||||
}),
|
||||
|
||||
// Uranai Collection: Torotte
|
||||
"SDAV" => Some(GameKeys {
|
||||
key: hex!("eed95513266a499a55e265b049169c44"),
|
||||
iv: Some(hex!("84c0e5931d91a6a477d62c271546056e")),
|
||||
}),
|
||||
|
||||
// Shin Kouchuu Ouja Mushiking
|
||||
"SDBE" => Some(GameKeys {
|
||||
key: hex!("7053fb944572e5b631a665cef4b5bcdd"),
|
||||
iv: Some(hex!("ae4d7e884002c79eb35711554d613057")),
|
||||
}),
|
||||
|
||||
// E-DEL Sand
|
||||
"SDBN" => Some(GameKeys {
|
||||
key: hex!("c1f14ae2e85b095e313c8baec125805e"),
|
||||
iv: Some(hex!("3c538eea66251acd5404b93f8976a7f7")),
|
||||
}),
|
||||
|
||||
// CHUNITHM
|
||||
"SDBT" => Some(GameKeys {
|
||||
key: hex!("a6a870671fd432ec637adf7a822f97da"),
|
||||
iv: Some(hex!("2c277f31cd550cfa2c993b4dd56b85ae")),
|
||||
}),
|
||||
|
||||
// Sonic Dash Extreme
|
||||
"SDBX" => Some(GameKeys {
|
||||
key: hex!("3dc19c2d0c20ac199d5fa46e7f6335a6"),
|
||||
iv: Some(hex!("d8f029ec90fe55be67584f742c55ef8b")),
|
||||
}),
|
||||
|
||||
// Kancolle Arcade
|
||||
"SDBZ" => Some(GameKeys {
|
||||
key: hex!("521bde4460f4184edd879136adeea5ee"),
|
||||
iv: Some(hex!("1b8324032db69d7b0954794aa229fe68")),
|
||||
}),
|
||||
|
||||
// crossbeats REV.
|
||||
"SDCA" => Some(GameKeys {
|
||||
key: hex!("1649490a03d6c2aec1c496982cb0405c"),
|
||||
iv: Some(hex!("4680711c7e67a26f9230d5af74b5dcfb")),
|
||||
}),
|
||||
|
||||
// nailpuri
|
||||
"SDCD" => Some(GameKeys {
|
||||
key: hex!("43b38502d8f6d3c7b02b95fc28db5308"),
|
||||
iv: Some(hex!("6dfcb94bf74f152b55f3e0c7f35b44b5")),
|
||||
}),
|
||||
|
||||
// Luigi's Mansion Arcade
|
||||
"SDCF" => Some(GameKeys {
|
||||
key: hex!("df986883da837538e37b959a3e4117cd"),
|
||||
iv: Some(hex!("dabf539738852f17714811af70435a83")),
|
||||
}),
|
||||
|
||||
// Mario & Sonic at Rio Olympic Games
|
||||
"SDCH" => Some(GameKeys {
|
||||
key: hex!("e2da769e94f1d3aca1930cdbe0708c9f"),
|
||||
iv: Some(hex!("c7dcce203c84ab0477236d697570dadc")),
|
||||
}),
|
||||
|
||||
// KEY CHIP NUSX EDB SOC
|
||||
"SDCR" => Some(GameKeys {
|
||||
key: hex!("4961a51fd36f14e72664f52373052160"),
|
||||
iv: Some(hex!("25d7d1341a282c5e0a34c64562c023ec")),
|
||||
}),
|
||||
|
||||
// Celevie
|
||||
"SDCT" => Some(GameKeys {
|
||||
key: hex!("d6ae51f10ec76da93c981800fc3ad3cb"),
|
||||
iv: Some(hex!("fb8e43e280d330d06581732f2e11a6dc")),
|
||||
}),
|
||||
|
||||
// CYTUS Ω
|
||||
"SDCX" => Some(GameKeys {
|
||||
key: hex!("79504ccc509b67d1f7a3f593e6f9d9d6"),
|
||||
iv: Some(hex!("1551ea8926f2aee233eec309de3e5f3c")),
|
||||
}),
|
||||
|
||||
// KEY CHIP NUSX1.1 TDW
|
||||
"SDDB" => Some(GameKeys {
|
||||
key: hex!("875679b2cd1637962b0db25c51fb21a6"),
|
||||
iv: Some(hex!("8ef44722a0566e8f572356245687fbe5")),
|
||||
}),
|
||||
|
||||
// Sangokushi Taisen
|
||||
"SDDD" => Some(GameKeys {
|
||||
key: hex!("564e967873de6cbcd22efeca6952e9dc"),
|
||||
iv: Some(hex!("4e3dd465cf09cd82b259f7bed5fc2d6d")),
|
||||
}),
|
||||
|
||||
// Initial D Arcade Stage Zero
|
||||
"SDDF" => Some(GameKeys {
|
||||
key: hex!("65058573a0cb81749e694ae164c61b04"),
|
||||
iv: Some(hex!("981c4f45e3c6958f054e5d00916bdf2b")),
|
||||
}),
|
||||
|
||||
// KEY CHIP NU1.1 ESC
|
||||
"SDDJ" => Some(GameKeys {
|
||||
key: hex!("630fe52276537bd7fb267adf175f4e99"),
|
||||
iv: Some(hex!("dc5755be57ded2cdb34433bbba2204ff")),
|
||||
}),
|
||||
|
||||
// APM3 Sample Program 2
|
||||
"SDDL" => Some(GameKeys {
|
||||
key: hex!("992458295fd06d6a8af0dfb3f6854c19"),
|
||||
iv: Some(hex!("8484906d4cd5fd225e032843ed37495d")),
|
||||
}),
|
||||
|
||||
// ALLS MX Factory Dummy
|
||||
"SDDM" => Some(GameKeys {
|
||||
key: hex!("0127958210f6ae9bdeb8975018b5af24"),
|
||||
iv: Some(hex!("181716badccff4bc2b1e29ae02a1bbbb")),
|
||||
}),
|
||||
|
||||
// Demo ID
|
||||
"SDDN" => Some(GameKeys {
|
||||
key: hex!("41dd8e66290117ac67d311a2f0a6416e"),
|
||||
iv: Some(hex!("73e18e8418f6ceefb11e2767fdea190c")),
|
||||
}),
|
||||
|
||||
// Soul Reverse
|
||||
"SDDP" => Some(GameKeys {
|
||||
key: hex!("cf6d64427eeca47674e17bcd46d1ea8c"),
|
||||
iv: Some(hex!("ce5174093d26ca2a31b58541e85ac276")),
|
||||
}),
|
||||
|
||||
// SEGA World Driver Championship
|
||||
"SDDS" => Some(GameKeys {
|
||||
key: hex!("161bec6d90989d0e26d791170607a440"),
|
||||
iv: Some(hex!("81dc26a27028e2092332038aa1bffc47")),
|
||||
}),
|
||||
|
||||
// O.N.G.E.K.I.
|
||||
"SDDT" => Some(GameKeys {
|
||||
key: hex!("3f7658728b9517d3314e684fa2e2a045"),
|
||||
iv: Some(hex!("41578833c547aaff04db597a6e9eb784")),
|
||||
}),
|
||||
|
||||
"SDDU" => Some(GameKeys {
|
||||
key: hex!("649ae9982625f90c55af86713c55d3fd"),
|
||||
iv: Some(hex!("187116fc4647a7d3b6f2303a34f0a2fe")),
|
||||
}),
|
||||
|
||||
// ALLS X / X2 Research & Development
|
||||
"SDDW" => Some(GameKeys {
|
||||
key: hex!("118565d344f3e14ca69299eeac049bb9"),
|
||||
iv: Some(hex!("9d6d392ec35ed94ef9fe0a5be0573981")),
|
||||
}),
|
||||
|
||||
// KEY CHIP ALLS X FACTORY
|
||||
"SDDX" => Some(GameKeys {
|
||||
key: hex!("428bff0f9e7aafc169a7a75751ffda98"),
|
||||
iv: Some(hex!("f8250594f425332c6d349d7ea0e86669")),
|
||||
}),
|
||||
|
||||
// Shin Kouchuu Ouja Mushiking TWN
|
||||
"SDEA" => Some(GameKeys {
|
||||
key: hex!("9f9cf148ac3c50aaf925af1dfb27f58b"),
|
||||
iv: Some(hex!("4d8ebbd971896b8a4a3dd84a23b329fc")),
|
||||
}),
|
||||
|
||||
// WCCF FOOTISTA
|
||||
"SDEB" => Some(GameKeys {
|
||||
key: hex!("d511ed690415f6359843a134fd47836a"),
|
||||
iv: Some(hex!("ac139b382acdd112e31564ea7f38186c")),
|
||||
}),
|
||||
|
||||
// Chrono Regalia
|
||||
"SDEC" => Some(GameKeys {
|
||||
key: hex!("f272e5016863af2ba0337f50de686f6e"),
|
||||
iv: Some(hex!("5327e132631e7f71b61be7cc0df382ce")),
|
||||
}),
|
||||
|
||||
// CARD MAKER
|
||||
"SDED" => Some(GameKeys {
|
||||
key: hex!("21fcec779a16769f5277a36fb542992c"),
|
||||
iv: Some(hex!("22b50239f1b40ccc3e55a2d69c69b160")),
|
||||
}),
|
||||
|
||||
// House of the Dead: Scarlet Dawn
|
||||
"SDEE" => Some(GameKeys {
|
||||
key: hex!("191eb7440672dab08ddbb7195efb356f"),
|
||||
iv: Some(hex!("c278b5386dc38bd76d71dbcd826954cf")),
|
||||
}),
|
||||
|
||||
// FiZ
|
||||
"SDEG" => Some(GameKeys {
|
||||
key: hex!("721853dbe2d30bafe24f0edbd210deeb"),
|
||||
iv: Some(hex!("4dfb0bcec86159aab297166bcd509e6f")),
|
||||
}),
|
||||
|
||||
// Fate/Grand Order Arcade
|
||||
"SDEJ" => Some(GameKeys {
|
||||
key: hex!("9de1ea6ae38d9011f55d8ee864395d24"),
|
||||
iv: Some(hex!("f60cde21982876d12d17662a48d90836")),
|
||||
}),
|
||||
|
||||
// ALL.Net P.ras multi Ver.3
|
||||
"SDEM" => Some(GameKeys {
|
||||
key: hex!("700617f293696c07fb9f356d3b99240d"),
|
||||
iv: Some(hex!("667d026d6cdf329ff351dbaf7098e81d")),
|
||||
}),
|
||||
|
||||
// StarHorse4 (Server) / MESTA Medal Station
|
||||
"SDEP" => Some(GameKeys {
|
||||
key: hex!("fa2b7ca53a823c152d940972cbf532f5"),
|
||||
iv: Some(hex!("f4af35120c48617704bb5b8471797a62")),
|
||||
}),
|
||||
|
||||
// Initial D Arcade Stage Zero (CHN)
|
||||
"SDER" => Some(GameKeys {
|
||||
key: hex!("7d73367ebb218ec82930d58dc6d7950b"),
|
||||
iv: Some(hex!("9788c3eca2db6ba92bac4f6f7b706308")),
|
||||
}),
|
||||
|
||||
// House of the Dead: Scarlet Dawn (EXP)
|
||||
"SDET" => Some(GameKeys {
|
||||
key: hex!("4643e7b2c3006e0264163edc8545fb72"),
|
||||
iv: Some(hex!("612bca81ea2958ffbac36f780f1ed688")),
|
||||
}),
|
||||
|
||||
// KEY CHIP ALLS X HDZ
|
||||
"SDEU" => Some(GameKeys {
|
||||
key: hex!("23b3e9bb47e3ac9998f6e6c1adc4ae33"),
|
||||
iv: Some(hex!("a964714cea60688407bf554bd1c27ec2")),
|
||||
}),
|
||||
|
||||
// House of the Dead: Scarlet Dawn (CHN)
|
||||
"SDEV" => Some(GameKeys {
|
||||
key: hex!("3c1f018d88926d98163b07a1563a4818"),
|
||||
iv: Some(hex!("ca7373c9c7dfebac0fc24254c030e4ad")),
|
||||
}),
|
||||
|
||||
// maimai DX
|
||||
"SDEZ" => Some(GameKeys {
|
||||
key: hex!("d136eba05d40e82682e6aad8d9e8688c"),
|
||||
iv: Some(hex!("c484deeaa0249ef46695f63694b7372f")),
|
||||
}),
|
||||
|
||||
// KEY CHIP ALLS X REC
|
||||
"SDFA" => Some(GameKeys {
|
||||
key: hex!("8e816b4362db24a230877885864d206d"),
|
||||
iv: Some(hex!("8e5a0ba6a0a1150d47d12bdb64debba7")),
|
||||
}),
|
||||
|
||||
// WACCA
|
||||
"SDFE" => Some(GameKeys {
|
||||
key: hex!("f61719c371e5bca6788c139a53091617"),
|
||||
iv: Some(hex!("67d43173e343813fa2097fd32992a8e2")),
|
||||
}),
|
||||
|
||||
// SANDRA
|
||||
"SDFG" => Some(GameKeys {
|
||||
key: hex!("3398fb86bfe630a14979411879861ac7"),
|
||||
iv: Some(hex!("a794c49c2c7639cd80571807c17246ff")),
|
||||
}),
|
||||
|
||||
// Kemono Friends 3: Planet Tours
|
||||
"SDFL" => Some(GameKeys {
|
||||
key: hex!("2449b48067b9176a6e0f9563481e97f4"),
|
||||
iv: Some(hex!("616f8710454632eb4fb1d89d8c19c19a")),
|
||||
}),
|
||||
|
||||
// KEY CHIP ALLS X CASJ
|
||||
"SDFN" => Some(GameKeys {
|
||||
key: hex!("29f62e22c6a9fd8be327631c68546405"),
|
||||
iv: Some(hex!("2a860976e6d98513825f291e56cfb5ee")),
|
||||
}),
|
||||
|
||||
// KEY CHIP NUSX FUTURE
|
||||
"SDFP" => Some(GameKeys {
|
||||
key: hex!("570b87263a7ca0aa4c1388e204ee6d4b"),
|
||||
iv: Some(hex!("7640886011a2300a91fad9f36a8c4775")),
|
||||
}),
|
||||
|
||||
// StarHorse4
|
||||
"SDFT" => Some(GameKeys {
|
||||
key: hex!("92a25f388c50737e39c3c2f006645f31"),
|
||||
iv: Some(hex!("a97e72f990417488cb4c67f8f0c3fb25")),
|
||||
}),
|
||||
|
||||
// Mario & Sonic at TOKYO Olympic
|
||||
"SDFV" => Some(GameKeys {
|
||||
key: hex!("fe82db9a60295d829b95f03c2276018b"),
|
||||
iv: Some(hex!("34d82772ae18174f0a181dc53399ea9c")),
|
||||
}),
|
||||
|
||||
// maimai DX (EXP)
|
||||
"SDGA" => Some(GameKeys {
|
||||
key: hex!("0a6610a62ef670c65b7e7b1750ffb7a1"),
|
||||
iv: Some(hex!("17a2a22915f81c5896edbba4c412585e")),
|
||||
}),
|
||||
|
||||
// maimai DX (CHN)
|
||||
"SDGB" => Some(GameKeys {
|
||||
key: hex!("7ca4e6b6f3d6e8b26472973887d7fa3a"),
|
||||
iv: Some(hex!("53fe7135762de3f97e7fe76b0fef3f27")),
|
||||
}),
|
||||
|
||||
// Puyo Puyo e-Sports Arcade
|
||||
"SDGH" => Some(GameKeys {
|
||||
key: hex!("b3e30e7eabac3767ade13c69c9b2f22b"),
|
||||
iv: Some(hex!("03deaea3742d69675b36cddc8b15ac91")),
|
||||
}),
|
||||
|
||||
// WCCF FOOTISTA (EXP)
|
||||
"SDGK" => Some(GameKeys {
|
||||
key: hex!("9dc4a17fc39fca5a8a358984801caaa7"),
|
||||
iv: Some(hex!("e0445b11dcfa0dae56c85e8787e11d9b")),
|
||||
}),
|
||||
|
||||
// KEY CHIP ALLS X HDZ CASJ
|
||||
"SDGP" => Some(GameKeys {
|
||||
key: hex!("c87ab31247e7b6ff95fdd79fb91f9f37"),
|
||||
iv: Some(hex!("2467ab3c031e3dc0568b7077efd27c36")),
|
||||
}),
|
||||
|
||||
// ROKUMEN
|
||||
"SDGQ" => Some(GameKeys {
|
||||
key: hex!("c5356dae7b066bce88984aec36deb62d"),
|
||||
iv: Some(hex!("4e9f2982460e2fd907bde15709edfba7")),
|
||||
}),
|
||||
|
||||
// CHUNITHM (EXP)
|
||||
"SDGS" => Some(GameKeys {
|
||||
key: hex!("a5150cc5065d2c59ee2f8f332cbd29d5"),
|
||||
iv: Some(hex!("84014d26696f290ad7ead70c7549bd81")),
|
||||
}),
|
||||
|
||||
// Initial D THE ARCADE
|
||||
"SDGT" => Some(GameKeys {
|
||||
key: hex!("9d0bba20d1e84f2459399f5383beee72"),
|
||||
iv: Some(hex!("5d340013fdfb2464d253093602fe4b64")),
|
||||
}),
|
||||
|
||||
"SDGV" => Some(GameKeys {
|
||||
key: hex!("573f5c8cc44f10f31ec749b695ebe886"),
|
||||
iv: Some(hex!("6bfca86f9d208a7944cdfc25ea3cd220")),
|
||||
}),
|
||||
|
||||
// "Eiketsu Taisen: Sanzensekai no Hadou
|
||||
"SDGY" => Some(GameKeys {
|
||||
key: hex!("c04b663a59055acbdfebc6d3df0e6a04"),
|
||||
iv: Some(hex!("76fc5f1d88605107947d0c1ff347022d")),
|
||||
}),
|
||||
|
||||
// Hori a Tale
|
||||
"SDGZ" => Some(GameKeys {
|
||||
key: hex!("9ad74efb208d6ee4fe5ee770331712cf"),
|
||||
iv: Some(hex!("45f6e53f0eb8fae6665b45444a61e266")),
|
||||
}),
|
||||
|
||||
// CHUNITHM NEW!!
|
||||
"SDHD" => Some(GameKeys {
|
||||
key: hex!("3abd00d7a820ce862eaf474bf6c8f33e"),
|
||||
iv: Some(hex!("0f1e7eea78da7e037e0552c2843e1b6a")),
|
||||
}),
|
||||
|
||||
"SDHH" => Some(GameKeys {
|
||||
key: hex!("fc6f887f3717c5d6713113b92fa3fb27"),
|
||||
iv: Some(hex!("ad76606460dbe1e91e41bef7ab0c1535")),
|
||||
}),
|
||||
|
||||
// CHUNITHM (CHN)
|
||||
"SDHJ" => Some(GameKeys {
|
||||
key: hex!("985ea66ecb5b1f208c90e2b898f0b073"),
|
||||
iv: Some(hex!("164a65422e7f01b7f1b0849fc7737cdb")),
|
||||
}),
|
||||
|
||||
// UFO CATCHER LINK STATION
|
||||
"SDHK" => Some(GameKeys {
|
||||
key: hex!("bc92d63c2a099ca2315a483c3041fdd7"),
|
||||
iv: Some(hex!("b14d8449b6d4325d83a2774b13dd21ff")),
|
||||
}),
|
||||
|
||||
// WACCA (CHN)
|
||||
"SDHN" => Some(GameKeys {
|
||||
key: hex!("892123a26d7c03d49edd12a80ee0c58f"),
|
||||
iv: Some(hex!("76aa15a6868b8dbdf7207906354d5169")),
|
||||
}),
|
||||
|
||||
// meityromantic
|
||||
"SDHR" => Some(GameKeys {
|
||||
key: hex!("1fb897cab97c8170a6ac0a21685c58d9"),
|
||||
iv: Some(hex!("f9b60f65b01e8e836a4bc20f7d39faf5")),
|
||||
}),
|
||||
|
||||
// ALLS System
|
||||
"ACA" => Some(GameKeys {
|
||||
key: hex!("e4281bcf48c4d28eb05772ce6f98587a"),
|
||||
iv: Some(hex!("6cee7f5a2c4b5f1e93c5949114ff0b74")),
|
||||
}),
|
||||
|
||||
// Read from {game_id}.bin for unknown keys.
|
||||
_ => {
|
||||
let filename = format!("{}.bin", game_id);
|
||||
let path = Path::new(&filename);
|
||||
|
||||
if !path.exists() {
|
||||
return None;
|
||||
}
|
||||
|
||||
let Ok(metadata) = path.metadata() else {
|
||||
return None;
|
||||
};
|
||||
|
||||
let size = metadata.len();
|
||||
|
||||
match size {
|
||||
16 => Some(GameKeys {
|
||||
key: std::fs::read(filename)
|
||||
.map(|v| v.try_into().unwrap())
|
||||
.unwrap(),
|
||||
iv: None,
|
||||
}),
|
||||
32 => {
|
||||
let keyiv = std::fs::read(filename).unwrap();
|
||||
let key = keyiv[..16].try_into().unwrap();
|
||||
let iv: [u8; 16] = keyiv[16..].try_into().unwrap();
|
||||
let iv = if iv == NTFS_HEADER || iv == EXFAT_HEADER {
|
||||
None
|
||||
} else {
|
||||
Some(iv)
|
||||
};
|
||||
|
||||
Some(GameKeys { key, iv })
|
||||
}
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
193
tools/Filesystem/Fsdecrypt/src/main.rs
Normal file
193
tools/Filesystem/Fsdecrypt/src/main.rs
Normal file
@ -0,0 +1,193 @@
|
||||
use std::{
|
||||
fs::File,
|
||||
io::{BufReader, BufWriter, Read, Seek, SeekFrom, Write},
|
||||
path::Path,
|
||||
};
|
||||
|
||||
use aes::{
|
||||
cipher::{block_padding::NoPadding, BlockDecryptMut, InnerIvInit, KeyInit, KeyIvInit},
|
||||
Aes128Dec,
|
||||
};
|
||||
use anyhow::{anyhow, Result};
|
||||
use bootid::{BootId, ContainerType, BOOTID_IV, BOOTID_KEY};
|
||||
use crypto::{
|
||||
calculate_file_iv, calculate_page_iv, get_game_keys, Aes128CbcDec, GameKeys, EXFAT_HEADER,
|
||||
NTFS_HEADER, OPTION_IV, OPTION_KEY,
|
||||
};
|
||||
use indicatif::{ProgressBar, ProgressStyle};
|
||||
|
||||
mod bootid;
|
||||
mod crypto;
|
||||
|
||||
const PAGE_SIZE: u64 = 4096;
|
||||
|
||||
fn main() -> Result<()> {
|
||||
let args = std::env::args().collect::<Vec<String>>();
|
||||
|
||||
if args.len() < 2 {
|
||||
println!("Usage: fsdecrypt <input_file1> [<input_file2> ...]");
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
let bootid_cipher =
|
||||
Aes128CbcDec::new_from_slices(&BOOTID_KEY, &BOOTID_IV).map_err(|e| anyhow!(e))?;
|
||||
let mut bootid_bytes = [0u8; std::mem::size_of::<BootId>()];
|
||||
let mut page: Vec<u8> = Vec::with_capacity(PAGE_SIZE as usize);
|
||||
let mut page_iv = [0u8; 16];
|
||||
|
||||
for path in args.iter().skip(1) {
|
||||
let path = Path::new(path);
|
||||
let file = File::open(path)?;
|
||||
let mut reader = BufReader::with_capacity(0x40000, file);
|
||||
|
||||
reader.read_exact(&mut bootid_bytes)?;
|
||||
|
||||
if let Err(e) = bootid_cipher
|
||||
.clone()
|
||||
.decrypt_padded_mut::<NoPadding>(&mut bootid_bytes)
|
||||
{
|
||||
println!("ERROR: Could not decrypt BootID: {e:#?}");
|
||||
continue;
|
||||
}
|
||||
|
||||
let bootid = unsafe { std::mem::transmute::<[u8; 96], BootId>(bootid_bytes) };
|
||||
|
||||
if bootid.container_type != ContainerType::OS
|
||||
&& bootid.container_type != ContainerType::APP
|
||||
&& bootid.container_type != ContainerType::OPTION
|
||||
{
|
||||
println!("ERROR: Unknown container type {}", bootid.container_type);
|
||||
continue;
|
||||
}
|
||||
|
||||
let os_id = std::str::from_utf8(&bootid.os_id)?;
|
||||
let game_id = std::str::from_utf8(&bootid.game_id)?;
|
||||
let id = match bootid.container_type {
|
||||
ContainerType::OS => os_id,
|
||||
_ => game_id,
|
||||
};
|
||||
|
||||
let keys = match bootid.container_type {
|
||||
ContainerType::OS => get_game_keys(os_id),
|
||||
ContainerType::APP => get_game_keys(game_id),
|
||||
_ => Some(GameKeys {
|
||||
key: OPTION_KEY,
|
||||
iv: Some(OPTION_IV),
|
||||
}),
|
||||
};
|
||||
|
||||
let Some(keys) = keys else {
|
||||
println!("ERROR: Key not found for {id}. If you're using a custom key file, ensure the key file is 16/32 bytes and named {id}.bin.");
|
||||
continue;
|
||||
};
|
||||
|
||||
let data_offset = bootid.header_block_count * bootid.block_size;
|
||||
let key = keys.key;
|
||||
let iv = if bootid.use_custom_iv {
|
||||
None
|
||||
} else {
|
||||
keys.iv
|
||||
};
|
||||
let iv = match iv {
|
||||
Some(iv) => iv,
|
||||
None => {
|
||||
reader.seek(SeekFrom::Start(data_offset))?;
|
||||
|
||||
let reference = Read::by_ref(&mut reader);
|
||||
|
||||
reference.take(4096).read_to_end(&mut page)?;
|
||||
|
||||
if bootid.container_type == ContainerType::OPTION {
|
||||
calculate_file_iv(key, EXFAT_HEADER, &page)?
|
||||
} else {
|
||||
calculate_file_iv(key, NTFS_HEADER, &page)?
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
let output_filename = match bootid.container_type {
|
||||
ContainerType::OS => format!(
|
||||
"{os_id}_{:<04}.{:<02}.{:<02}_{}_{}.ntfs",
|
||||
bootid.os_version.major,
|
||||
bootid.os_version.minor,
|
||||
bootid.os_version.release,
|
||||
bootid.target_timestamp,
|
||||
bootid.sequence_number
|
||||
),
|
||||
ContainerType::APP => {
|
||||
if bootid.sequence_number > 0 {
|
||||
format!(
|
||||
"{game_id}_{}.{:<02}.{:<02}_{}_{}_{}.{:<02}.{:<02}.ntfs",
|
||||
unsafe { bootid.target_version.version.major },
|
||||
unsafe { bootid.target_version.version.minor },
|
||||
unsafe { bootid.target_version.version.release },
|
||||
bootid.target_timestamp,
|
||||
bootid.sequence_number,
|
||||
bootid.source_version.major,
|
||||
bootid.source_version.minor,
|
||||
bootid.source_version.release,
|
||||
)
|
||||
} else {
|
||||
format!(
|
||||
"{game_id}_{}.{:<02}.{:<02}_{}_{}.ntfs",
|
||||
unsafe { bootid.target_version.version.major },
|
||||
unsafe { bootid.target_version.version.minor },
|
||||
unsafe { bootid.target_version.version.release },
|
||||
bootid.target_timestamp,
|
||||
bootid.sequence_number,
|
||||
)
|
||||
}
|
||||
}
|
||||
_ => format!(
|
||||
"{game_id}_{}_{}_{}.exfat",
|
||||
unsafe { std::str::from_utf8(&bootid.target_version.option)? },
|
||||
bootid.target_timestamp,
|
||||
bootid.sequence_number,
|
||||
),
|
||||
};
|
||||
let output_path = path.with_file_name(&output_filename);
|
||||
let output_file = File::create(&output_path)?;
|
||||
let output_size = (bootid.block_count - bootid.header_block_count) * bootid.block_size;
|
||||
|
||||
output_file.set_len(output_size)?;
|
||||
|
||||
let mut writer = BufWriter::with_capacity(0x40000, output_file);
|
||||
let cipher = Aes128Dec::new_from_slice(&key).map_err(|e| anyhow!(e))?;
|
||||
|
||||
let pb = ProgressBar::new(output_size)
|
||||
.with_style(
|
||||
ProgressStyle::default_bar()
|
||||
.template("{prefix} [{bar:20!.bright.yellow/dim.white}] {bytes:>8} [{elapsed}<{eta}, {bytes_per_sec}]")?
|
||||
);
|
||||
|
||||
pb.set_prefix(output_filename);
|
||||
reader.seek(SeekFrom::Start(data_offset))?;
|
||||
|
||||
for _ in 0..output_size / PAGE_SIZE {
|
||||
let file_offset = reader.stream_position()? - data_offset;
|
||||
let reference = Read::by_ref(&mut reader);
|
||||
|
||||
calculate_page_iv(file_offset, &iv, &mut page_iv);
|
||||
page.clear();
|
||||
reference.take(PAGE_SIZE).read_to_end(&mut page)?;
|
||||
|
||||
let page_cipher = Aes128CbcDec::inner_iv_slice_init(cipher.clone(), &page_iv)
|
||||
.map_err(|e| anyhow!(e))?;
|
||||
page_cipher
|
||||
.decrypt_padded_mut::<NoPadding>(&mut page)
|
||||
.map_err(|e| anyhow!(e))?;
|
||||
|
||||
writer.write_all(&page)?;
|
||||
pb.inc(PAGE_SIZE);
|
||||
}
|
||||
|
||||
writer.flush()?;
|
||||
pb.finish();
|
||||
|
||||
page.clear();
|
||||
page_iv.fill(0);
|
||||
bootid_bytes.fill(0);
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
@ -1,42 +0,0 @@
|
||||
╔═════════════════════╗
|
||||
SEGA Decryption Guide
|
||||
╚═════════════════════╝
|
||||
|
||||
╭─────────╮
|
||||
app files
|
||||
╰─────────╯
|
||||
|
||||
1. create a new file titled <PCB CODE>.bin
|
||||
|
||||
2. fill in the first 16 bytes of <PCB CODE>.bin with
|
||||
the AES key. (e.g. 9D 0B BA 20 D1 E8 4F 24 59 39 9F 53 83 BE EE 72)
|
||||
|
||||
3. the next 16 bytes will be the NTFS header (EB 52 90 4E 54 46 53 20 20 20 20 00 10 01 00 00)
|
||||
the NTFS header is always the same
|
||||
|
||||
4. save this file, then decrypt the app files with the following command:
|
||||
fsdecrypt <PCB CODE>.bin 0x200000 <path/to/app> <out.vhd>
|
||||
|
||||
5. once it finishes decrypting, run the calculate_iv.py script
|
||||
save the output of key 1. script is found here: https://discord.com/channels/162861213309599744/243895668790394882/995170669329391706
|
||||
|
||||
6. open <PCB CODE>.bin inside the hex editor once more, replace the NTFS header with
|
||||
the key 1
|
||||
|
||||
7. run "fsdecrypt <PCB CODE>.bin 0x200000 <path/to/app> <out.vhd>" once more
|
||||
|
||||
8. your app is now decrypted, you can extract the internal_0 with poweriso or any other tool
|
||||
|
||||
╭─────────╮
|
||||
opt files
|
||||
╰─────────╯
|
||||
|
||||
1. decrypt the opt file using fstools with the following command:
|
||||
fstool dec OPT.bin in.opt out.vhd
|
||||
|
||||
2. run the calculate_iv.py script and save key 3
|
||||
script is found here: https://discord.com/channels/162861213309599744/243895668790394882/995170669329391706
|
||||
|
||||
3. replace the IV key of the OPT.bin with key 3, the IV key of OPT.bin are the second 16 bytes
|
||||
|
||||
4. decrypt the opt file once more with the new key
|
BIN
tools/Filesystem/Unsega/unsega_v0.1727.exe
Normal file
BIN
tools/Filesystem/Unsega/unsega_v0.1727.exe
Normal file
Binary file not shown.
46
tools/Filesystem/readme.md
Normal file
46
tools/Filesystem/readme.md
Normal file
@ -0,0 +1,46 @@
|
||||
# Filesystem
|
||||
|
||||
The scripts in this folder are used to extract .app and .opt files.
|
||||
|
||||
## Decryption
|
||||
|
||||
There are two tools you can use to decrypt and extract updates.
|
||||
|
||||
* [unsega_v0.1727.exe](./Unsega/unsega_v0.1727.exe): Fast but closed source.
|
||||
* [fsdecrypt.exe](./Fsdecrypt/fsdecrypt.exe): Slow but open source.
|
||||
|
||||
Unsega is sourced directly from 1cc and should be totally safe but if you don't feel like running shady .exe's, you can build fsdecrypt from source instead.
|
||||
Both tools do exactly the same thing and work in a very similar way so use whatever you like.
|
||||
|
||||
### .app decryption and extraction
|
||||
|
||||
1) Drag and drop the .app file on [unsega_v0.1727.exe](./Unsega/unsega_v0.1727.exe) or [fsdecrypt.exe](./Fsdecrypt/fsdecrypt.exe)
|
||||
2) Mount the resulting .vhd(unsega) or .ntfs(fsdecrypt) file with [osfmount.exe](./Extra/osfmount.exe) (using default settings)
|
||||
3) Copy the internal_x.vhd partition from the vhd you just mounted.
|
||||
* If the extracted vhd is named **internal_0.vhd**, you can just double click it to open it.
|
||||
* If the extracted vhd is named **internal_X.vhd** where X is anything else than 0, you'll need to merge the file with it's base ! See [Merging incremental updates](#merging-incremental-updates)
|
||||
|
||||
### .opt decryption and extraction
|
||||
|
||||
You'll need to install the [ExFat7z](./Extra/ExFat7z/) 7zip plugin before proceeding. Install instructions are in the plugin's folder.
|
||||
You can find the original download page for the plugin [here](https://www.tc4shell.com/en/7zip/exfat7z/)
|
||||
|
||||
1) Drag and drop the .opt file on [fsdecrypt.exe](./Fsdecrypt/fsdecrypt.exe) or [unsega_v0.1727.exe](./Unsega/unsega_v0.1727.exe)
|
||||
2) Extract the resulting .vhd(unsega) or .exfat(fsdecrypt) file with 7zip.
|
||||
|
||||
## Merging incremental updates
|
||||
|
||||
Sega updates are incremental, you'll need to merge them if you want to open the latest versions.
|
||||
Here's an example on how to do so :
|
||||
|
||||
```powershell
|
||||
Set-VHD -Path "internal_3.vhd" -ParentPath "internal_2.vhd"
|
||||
Set-VHD -Path "internal_2.vhd" -ParentPath "internal_1.vhd"
|
||||
Set-VHD -Path "internal_1.vhd" -ParentPath "internal_0.vhd"
|
||||
Merge-VHD -Path "internal_3.vhd" -DestinationPath "internal_2.vhd"
|
||||
Merge-VHD -Path "internal_2.vhd" -DestinationPath "internal_1.vhd"
|
||||
Merge-VHD -Path "internal_1.vhd" -DestinationPath "internal_0.vhd"
|
||||
```
|
||||
|
||||
You'll need Hyper-V to be enabled for these commands to work.
|
||||
You'll also need administrator privileges!
|
@ -1,6 +0,0 @@
|
||||
1.Create SDDT.bin with 16 bytes of 0 written in the iv key
|
||||
2.Decrypt only the first 16 bytes once with fsdecrypt or fstool
|
||||
3.The first 16 bytes of the decrypted file is the iv key
|
||||
1.创建SDDT.bin,在iv键中写入16个字节的0
|
||||
2.用fsdecrypt或fstool只对前16个字节进行一次解密
|
||||
3.解密后的文件的前16个字节是iv密钥
|
112
tools/Download/DownloadOrder_V1_CLI.php → tools/Legacy/Download/DownloadOrder_V1_CLI.php
Executable file → Normal file
112
tools/Download/DownloadOrder_V1_CLI.php → tools/Legacy/Download/DownloadOrder_V1_CLI.php
Executable file → Normal file
@ -1,56 +1,56 @@
|
||||
<?php
|
||||
|
||||
|
||||
if ($argc != 4)
|
||||
{
|
||||
echo "please put in game_id version serial\n";
|
||||
echo "example php downloadorder.php SDBT 1.00 A63E01B1628\n";
|
||||
exit();
|
||||
}
|
||||
|
||||
|
||||
error_reporting(1);
|
||||
|
||||
$game_id = $argv[1];
|
||||
$ver = $argv[2];
|
||||
$serial = $argv[3];
|
||||
|
||||
echo $game_id . "\n";
|
||||
echo $ver . "\n";
|
||||
echo $serial . "\n";
|
||||
|
||||
$compressed = base64_encode(gzdeflate("game_id=".$game_id."&ver=".$ver."&serial=".$serial, -1, ZLIB_ENCODING_DEFLATE));
|
||||
|
||||
//print($compressed);
|
||||
|
||||
// use key 'http' even if you send the request to https://...
|
||||
|
||||
$options = array(
|
||||
|
||||
'http' => array(
|
||||
|
||||
'header' => array("Pragma: DFI", "User-Agent: ALL.Net"),
|
||||
|
||||
'method' => 'POST',
|
||||
|
||||
'content' => $compressed
|
||||
|
||||
)
|
||||
|
||||
);
|
||||
|
||||
$context = stream_context_create($options);
|
||||
|
||||
$result = file_get_contents('http://naominet.jp/sys/servlet/DownloadOrder', false, $context);
|
||||
|
||||
if ($result === FALSE) { exit("error dl\n"); /* Handle error */ }
|
||||
|
||||
//print($result);
|
||||
|
||||
$response = gzuncompress(base64_decode($result));
|
||||
|
||||
print($response);
|
||||
|
||||
print("\n");
|
||||
|
||||
?>
|
||||
<?php
|
||||
|
||||
|
||||
if ($argc != 4)
|
||||
{
|
||||
echo "please put in game_id version serial\n";
|
||||
echo "example php downloadorder.php SDBT 1.00 A63E01B1628\n";
|
||||
exit();
|
||||
}
|
||||
|
||||
|
||||
error_reporting(1);
|
||||
|
||||
$game_id = $argv[1];
|
||||
$ver = $argv[2];
|
||||
$serial = $argv[3];
|
||||
|
||||
echo $game_id . "\n";
|
||||
echo $ver . "\n";
|
||||
echo $serial . "\n";
|
||||
|
||||
$compressed = base64_encode(gzdeflate("game_id=".$game_id."&ver=".$ver."&serial=".$serial, -1, ZLIB_ENCODING_DEFLATE));
|
||||
|
||||
//print($compressed);
|
||||
|
||||
// use key 'http' even if you send the request to https://...
|
||||
|
||||
$options = array(
|
||||
|
||||
'http' => array(
|
||||
|
||||
'header' => array("Pragma: DFI", "User-Agent: ALL.Net"),
|
||||
|
||||
'method' => 'POST',
|
||||
|
||||
'content' => $compressed
|
||||
|
||||
)
|
||||
|
||||
);
|
||||
|
||||
$context = stream_context_create($options);
|
||||
|
||||
$result = file_get_contents('http://naominet.jp/sys/servlet/DownloadOrder', false, $context);
|
||||
|
||||
if ($result === FALSE) { exit("error dl\n"); /* Handle error */ }
|
||||
|
||||
//print($result);
|
||||
|
||||
$response = gzuncompress(base64_decode($result));
|
||||
|
||||
print($response);
|
||||
|
||||
print("\n");
|
||||
|
||||
?>
|
108
tools/Download/DownloadOrder_V1_original.php → tools/Legacy/Download/DownloadOrder_V1_original.php
Executable file → Normal file
108
tools/Download/DownloadOrder_V1_original.php → tools/Legacy/Download/DownloadOrder_V1_original.php
Executable file → Normal file
@ -1,55 +1,55 @@
|
||||
<?php
|
||||
|
||||
error_reporting(1);
|
||||
|
||||
if ($_POST["ID"])
|
||||
|
||||
{
|
||||
|
||||
$compressed = base64_encode(gzdeflate("game_id=".$_POST["ID"]."&ver=".$_POST["VERSION"]."&serial=A63E01B1628", -1, ZLIB_ENCODING_DEFLATE));
|
||||
|
||||
//print($compressed);
|
||||
|
||||
// use key 'http' even if you send the request to https://...
|
||||
|
||||
$options = array(
|
||||
|
||||
'http' => array(
|
||||
|
||||
'header' => "Pragma: DFI",
|
||||
|
||||
'method' => 'POST',
|
||||
|
||||
'content' => $compressed
|
||||
|
||||
)
|
||||
|
||||
);
|
||||
|
||||
$context = stream_context_create($options);
|
||||
|
||||
$result = file_get_contents('http://naominet.jp/sys/servlet/DownloadOrder', false, $context);
|
||||
|
||||
if ($result === FALSE) { exit("error dl\n"); /* Handle error */ }
|
||||
|
||||
//print($result);
|
||||
|
||||
$response = gzuncompress(base64_decode($result));
|
||||
|
||||
print($response);
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
<title>SEGA DOWNLOADORDER</title>
|
||||
|
||||
<b><form action="/index.php" method="post">
|
||||
|
||||
GAME ID:<input type="text" name="ID">
|
||||
|
||||
GAME VERSION:<input type="text" name="VERSION">
|
||||
|
||||
<input type="SUBMIT" value="SUBMIT"><br>
|
||||
|
||||
<?php
|
||||
|
||||
error_reporting(1);
|
||||
|
||||
if ($_POST["ID"])
|
||||
|
||||
{
|
||||
|
||||
$compressed = base64_encode(gzdeflate("game_id=".$_POST["ID"]."&ver=".$_POST["VERSION"]."&serial=A63E01B1628", -1, ZLIB_ENCODING_DEFLATE));
|
||||
|
||||
//print($compressed);
|
||||
|
||||
// use key 'http' even if you send the request to https://...
|
||||
|
||||
$options = array(
|
||||
|
||||
'http' => array(
|
||||
|
||||
'header' => "Pragma: DFI",
|
||||
|
||||
'method' => 'POST',
|
||||
|
||||
'content' => $compressed
|
||||
|
||||
)
|
||||
|
||||
);
|
||||
|
||||
$context = stream_context_create($options);
|
||||
|
||||
$result = file_get_contents('http://naominet.jp/sys/servlet/DownloadOrder', false, $context);
|
||||
|
||||
if ($result === FALSE) { exit("error dl\n"); /* Handle error */ }
|
||||
|
||||
//print($result);
|
||||
|
||||
$response = gzuncompress(base64_decode($result));
|
||||
|
||||
print($response);
|
||||
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
<title>SEGA DOWNLOADORDER</title>
|
||||
|
||||
<b><form action="/index.php" method="post">
|
||||
|
||||
GAME ID:<input type="text" name="ID">
|
||||
|
||||
GAME VERSION:<input type="text" name="VERSION">
|
||||
|
||||
<input type="SUBMIT" value="SUBMIT"><br>
|
||||
|
||||
</form></b>
|
BIN
tools/Legacy/Filesytem/Data_monster_Script_Suite/7z.exe
Normal file
BIN
tools/Legacy/Filesytem/Data_monster_Script_Suite/7z.exe
Normal file
Binary file not shown.
@ -0,0 +1,44 @@
|
||||
import sys
|
||||
|
||||
from Crypto.Cipher import AES
|
||||
|
||||
|
||||
if len(sys.argv) != 2:
|
||||
print(f"Usage: {sys.argv[0]} <game ID>")
|
||||
quit()
|
||||
if len(sys.argv[1]) != 4:
|
||||
print("Game ID must be 4 characters (eg SDFD)")
|
||||
quit()
|
||||
|
||||
SEED = bytes.fromhex(
|
||||
"C73CDDBF7AFB0EBCE6DED4D9B3DF3B03"
|
||||
"3FE140E4F4FF96C579908B5B696ABEEE"
|
||||
"326C5EEA47C0A34051DC55BF8C2A807B"
|
||||
"E4C6E3EF2F153084693CE2D21EF1BB13"
|
||||
"DCC96D317C3FCC7AB944636D65C28BB8"
|
||||
"E2F7748DC64208A873414B787E3F1866"
|
||||
)
|
||||
data = AES.new(
|
||||
key=bytes.fromhex("873df632b988ae14aa9f736b03a51c4f"),
|
||||
iv=bytes.fromhex("357dc19030d8e8d4941a7e6aceb94e4c"),
|
||||
mode=AES.MODE_CBC
|
||||
).decrypt(SEED)
|
||||
data = AES.new(key=data[0:16], iv=data[16:32], mode=AES.MODE_CBC).encrypt(data[64:96])
|
||||
|
||||
szSubGameId = sys.argv[1].encode("latin-1")
|
||||
|
||||
pKey = bytearray(data[0:16])
|
||||
pIv = bytearray(data[16:32])
|
||||
|
||||
for i in range(16):
|
||||
pKey[i] ^= szSubGameId[i % 4]
|
||||
pIv[i] ^= szSubGameId[i % 4]
|
||||
|
||||
print("Key:", pKey.hex())
|
||||
print("IV: ", pIv.hex())
|
||||
output_file = f'{sys.argv[1]}.bin'
|
||||
with open(output_file, "wb") as file:
|
||||
file.write(bytes.fromhex(pKey.hex()))
|
||||
file.write(bytes.fromhex(pIv.hex()))
|
||||
|
||||
print("Hex data has been written to", output_file)
|
478
tools/Legacy/Filesytem/Data_monster_Script_Suite/AppCheck.py
Normal file
478
tools/Legacy/Filesytem/Data_monster_Script_Suite/AppCheck.py
Normal file
@ -0,0 +1,478 @@
|
||||
import secrets
|
||||
import struct
|
||||
import zlib
|
||||
import sys
|
||||
import os
|
||||
|
||||
from dataclasses import dataclass
|
||||
|
||||
from Crypto.Cipher import AES
|
||||
from Crypto.Hash import HMAC, SHA1
|
||||
|
||||
|
||||
class CheckFailed(BaseException):
|
||||
pass
|
||||
|
||||
|
||||
class FixFailed(BaseException):
|
||||
pass
|
||||
|
||||
|
||||
class FsCryptError(BaseException):
|
||||
pass
|
||||
|
||||
|
||||
@dataclass
|
||||
class Timestamp:
|
||||
year: int
|
||||
month: int
|
||||
day: int
|
||||
hour: int
|
||||
minute: int
|
||||
second: int
|
||||
|
||||
|
||||
@dataclass
|
||||
class BootId:
|
||||
unk0: int
|
||||
unk1: int
|
||||
unk2: int
|
||||
unk3: int
|
||||
game_id: str
|
||||
game_timestamp: Timestamp
|
||||
game_ver: tuple[int, int, int]
|
||||
block_count: int
|
||||
block_size: int
|
||||
header_count: int
|
||||
hw: str
|
||||
orgtime: Timestamp
|
||||
orgver: tuple[int, int, int]
|
||||
osver: tuple[int, int, int]
|
||||
|
||||
@property
|
||||
def data_offset(self) -> int:
|
||||
return self.header_count * self.block_size
|
||||
|
||||
|
||||
class Bar:
|
||||
def __init__(self, msg: str, max_: int, width: int = 30):
|
||||
self.msg = msg
|
||||
self.max = max(0, max_)
|
||||
self.width = width
|
||||
self.last_n = 0
|
||||
|
||||
def __iter__(self):
|
||||
with self:
|
||||
for i in range(self.max):
|
||||
yield i
|
||||
self.update(i)
|
||||
|
||||
def __enter__(self):
|
||||
self.update(0)
|
||||
return self
|
||||
|
||||
def __exit__(self, *_):
|
||||
self.clear()
|
||||
|
||||
def update(self, n: int) -> None:
|
||||
n = max(0, min(n, self.max))
|
||||
self.last_n = n
|
||||
bar = round((n / self.max) * self.width) * "="
|
||||
print(f"{self.msg} [{bar}{' ' * (self.width - len(bar))}] {n/self.max * 100:.2f}%", end="\r", flush=True)
|
||||
|
||||
def print_over(self, *args) -> None:
|
||||
self.clear()
|
||||
print(*args)
|
||||
self.update(self.last_n)
|
||||
|
||||
def clear(self) -> None:
|
||||
print(" " * (len(self.msg) + 2 + self.width + 2 + len("100.00%")), end="\r", flush=True)
|
||||
|
||||
|
||||
class AppChecker:
|
||||
BTKEY = bytes.fromhex("09ca5efd30c9aaef3804d0a7e3fa7120")
|
||||
BTIV = bytes.fromhex("b155c22c2e7f0491fa7f0fdc217aff90")
|
||||
SIGKEY = bytes.fromhex(
|
||||
"e1bdcb2d5e9ed3b5de234364dfa4d126849edff769fc6c28fba5f43bc482bd74"
|
||||
"79d676afce8188e1d3a6852f4ebce45cde46bd15e8ee5fe84d197f945a54518f"
|
||||
)
|
||||
|
||||
BOOTID_OFFSET = 0
|
||||
BOOTID_SIZE = 0x2800
|
||||
|
||||
SIGNATURE_OFFSET = BOOTID_OFFSET + BOOTID_SIZE # 0x2800
|
||||
SIGNATURE_SIZE = 0x200
|
||||
|
||||
CRC_OFFSET = SIGNATURE_OFFSET + SIGNATURE_SIZE # 0x2a00
|
||||
|
||||
def __init__(self, filename: str, write: bool = False):
|
||||
self.filename = filename
|
||||
self.write = write
|
||||
self.file = None
|
||||
self.bootid = None
|
||||
self.block_size = -1
|
||||
self.block_count = -1
|
||||
|
||||
def __enter__(self):
|
||||
self.open()
|
||||
return self
|
||||
|
||||
def __exit__(self, *args):
|
||||
self.close()
|
||||
|
||||
def open(self) -> None:
|
||||
self.file = open(self.filename, "r+b" if self.write else "rb")
|
||||
|
||||
def close(self) -> None:
|
||||
if self.file is not None:
|
||||
self.file.close()
|
||||
self.file = None
|
||||
|
||||
def _crc(self, buffer: bytes, nbytes: int = -1) -> int:
|
||||
if nbytes == -1:
|
||||
nbytes = len(buffer)
|
||||
return zlib.crc32(buffer) & 0xffffffff
|
||||
|
||||
def read_bootid(self) -> BootId:
|
||||
if self.file is None:
|
||||
raise CheckFailed("File not open")
|
||||
self.file.seek(self.BOOTID_OFFSET)
|
||||
|
||||
btid = self.file.read(self.BOOTID_SIZE)
|
||||
aes = AES.new(self.BTKEY, AES.MODE_CBC, self.BTIV)
|
||||
btid = aes.decrypt(btid)
|
||||
|
||||
parts = struct.unpack(
|
||||
"<"
|
||||
"II4s4B"
|
||||
"4sH5BxBBH"
|
||||
"QQQ8x"
|
||||
"3sBH5BxBBH"
|
||||
"BBH12x",
|
||||
btid[:96]
|
||||
)
|
||||
|
||||
if self._crc(btid[4:]) != parts[0]:
|
||||
raise CheckFailed("Boot ID CRC failed")
|
||||
if parts[1] != self.BOOTID_SIZE:
|
||||
raise CheckFailed(f"Boot ID length invalid ({parts[1]:4x})")
|
||||
if parts[2] != b"BTID":
|
||||
raise CheckFailed(f"Boot ID signature invalid ({parts[2]})")
|
||||
|
||||
parts = list(parts[3:])
|
||||
self.bootid = BootId(
|
||||
parts.pop(0), parts.pop(0), parts.pop(0), parts.pop(0),
|
||||
parts.pop(0).decode(),
|
||||
Timestamp(parts.pop(0), parts.pop(0), parts.pop(0), parts.pop(0), parts.pop(0), parts.pop(0)),
|
||||
(parts.pop(0), parts.pop(0), parts.pop(0))[::-1],
|
||||
parts.pop(0), parts.pop(0), parts.pop(0), parts.pop(0).decode(),
|
||||
Timestamp(parts.pop(0), parts.pop(0), parts.pop(0), parts.pop(0), parts.pop(0), parts.pop(0)),
|
||||
(parts.pop(0), parts.pop(0), parts.pop(0))[::-1],
|
||||
(parts.pop(0), parts.pop(0), parts.pop(0))[::-1],
|
||||
)
|
||||
self.block_size = self.bootid.block_size
|
||||
self.block_count = self.bootid.block_count
|
||||
return self.bootid
|
||||
|
||||
def _get_file_signature(self) -> bytes:
|
||||
if self.file is None:
|
||||
raise CheckFailed("File not open")
|
||||
|
||||
if self.block_size == -1:
|
||||
self.read_bootid()
|
||||
|
||||
self.file.seek(self.CRC_OFFSET)
|
||||
hmac = HMAC.new(self.SIGKEY, digestmod=SHA1)
|
||||
to_read = self.block_size * 8 - self.CRC_OFFSET
|
||||
while to_read:
|
||||
block = self.file.read(min(0x1000, to_read))
|
||||
if len(block) == 0:
|
||||
raise CheckFailed("Ran out of data checking signature")
|
||||
|
||||
hmac.update(block)
|
||||
to_read -= len(block)
|
||||
|
||||
return hmac.digest()
|
||||
|
||||
def verify_signature(self) -> bool:
|
||||
if self.file is None:
|
||||
raise CheckFailed("File not open")
|
||||
|
||||
self.file.seek(self.SIGNATURE_OFFSET)
|
||||
signature = self.file.read(self.SIGNATURE_SIZE)
|
||||
if len(signature) != self.SIGNATURE_SIZE:
|
||||
raise CheckFailed("Ran out of data reading signature")
|
||||
|
||||
if len(signature) < SHA1.digest_size:
|
||||
raise CheckFailed("File signature impossibly small")
|
||||
|
||||
digest = self._get_file_signature()
|
||||
return digest == signature[:len(digest)]
|
||||
|
||||
def repair_signature(self, reseed: bool = False) -> None:
|
||||
if self.file is None:
|
||||
raise CheckFailed("File not open")
|
||||
|
||||
digest = self._get_file_signature()
|
||||
if len(digest) > self.SIGNATURE_SIZE:
|
||||
raise FixFailed("New signature impossibly long")
|
||||
|
||||
if reseed and len(digest) < self.SIGNATURE_SIZE:
|
||||
digest += secrets.token_bytes(self.SIGNATURE_SIZE - len(digest))
|
||||
|
||||
self.file.seek(self.SIGNATURE_OFFSET)
|
||||
self.file.write(digest)
|
||||
|
||||
def verify_block(self, block_n: int) -> bool:
|
||||
if self.block_size == -1:
|
||||
self.read_bootid()
|
||||
|
||||
if self.file is None:
|
||||
raise CheckFailed("File not open")
|
||||
|
||||
self.file.seek(self.CRC_OFFSET + 4 * block_n)
|
||||
crc = self.file.read(4)
|
||||
if len(crc) != 4:
|
||||
raise CheckFailed(f"Ran out of data reading block {block_n} CRC")
|
||||
expected_crc = struct.unpack("<I", crc)[0]
|
||||
|
||||
block_length = self.block_size
|
||||
if block_n == 0:
|
||||
self.file.seek(0)
|
||||
block = self.file.read(self.SIGNATURE_OFFSET)
|
||||
skip = self.SIGNATURE_SIZE + 4
|
||||
self.file.seek(skip, 1)
|
||||
block += self.file.read(self.block_size - (self.SIGNATURE_OFFSET + skip))
|
||||
block_length -= skip
|
||||
else:
|
||||
self.file.seek(block_n * self.block_size)
|
||||
block = self.file.read(self.block_size)
|
||||
|
||||
if len(block) != block_length:
|
||||
raise CheckFailed(f"Ran out of data reading block {block_n}")
|
||||
|
||||
return self._crc(block) == expected_crc
|
||||
|
||||
def repair_block_crc(self, block_n: int) -> None:
|
||||
if self.block_size == -1:
|
||||
self.read_bootid()
|
||||
|
||||
if self.file is None:
|
||||
raise CheckFailed("File not open")
|
||||
if not self.write:
|
||||
raise FixFailed("File not open for writing")
|
||||
|
||||
block_length = self.block_size
|
||||
if block_n == 0:
|
||||
self.file.seek(0)
|
||||
block = self.file.read(self.SIGNATURE_OFFSET)
|
||||
skip = self.SIGNATURE_SIZE + 4
|
||||
self.file.seek(skip, 1)
|
||||
block += self.file.read(self.block_size - (self.SIGNATURE_OFFSET + skip))
|
||||
block_length -= skip
|
||||
else:
|
||||
self.file.seek(block_n * self.block_size)
|
||||
block = self.file.read(self.block_size)
|
||||
|
||||
self.file.seek(self.CRC_OFFSET + 4 * block_n)
|
||||
self.file.write(struct.pack("<I", self._crc(block)))
|
||||
|
||||
def verify_all_blocks(self) -> bool:
|
||||
if self.block_count == -1:
|
||||
self.read_bootid()
|
||||
|
||||
ret = True
|
||||
bar = Bar("Verifying blocks", self.block_count)
|
||||
for i in bar:
|
||||
if not ac.verify_block(i):
|
||||
bar.print_over(f"Block {i} failed verification")
|
||||
ret = False
|
||||
return ret
|
||||
|
||||
def repair_all_block_crcs(self) -> None:
|
||||
if not self.write:
|
||||
raise FixFailed("File not open for writing")
|
||||
|
||||
if self.block_count == -1:
|
||||
self.read_bootid()
|
||||
|
||||
ret = True
|
||||
bar = Bar("Repairing block CRCs", self.block_count)
|
||||
for i in bar:
|
||||
if not ac.verify_block(i):
|
||||
bar.print_over(f"Block {i} failed verification")
|
||||
ret = False
|
||||
return ret
|
||||
|
||||
|
||||
def size(x: int | float) -> str:
|
||||
suffix = ("B", "KiB", "MiB", "GiB")
|
||||
thresh = 1024
|
||||
for i in suffix:
|
||||
if x < thresh:
|
||||
x = round(x / (thresh / 1024), 2)
|
||||
if x == round(x):
|
||||
return f"{int(x)}{i}"
|
||||
return f"{x} {i}"
|
||||
thresh *= 1024
|
||||
return f"{x:.2} TiB"
|
||||
|
||||
|
||||
def print_help() -> None:
|
||||
print(f"Usage: {sys.argv[0]} [--repair] <app path>")
|
||||
|
||||
|
||||
class FsCrypt:
|
||||
PAGE_SIZE = 0x1000
|
||||
|
||||
def __init__(self, filename: str, offset: int = 0, size: int = -1, write: bool = False):
|
||||
self.filename = filename
|
||||
self.offset = offset
|
||||
self.size = size
|
||||
self.write = write
|
||||
self.file = None
|
||||
self.ptr = 0
|
||||
|
||||
self.iv = b'\0' * 16
|
||||
self.key = None
|
||||
self._page_buffer = (-1, b"")
|
||||
|
||||
def __enter__(self):
|
||||
self.open()
|
||||
return self
|
||||
|
||||
def __exit__(self, *args):
|
||||
self.close()
|
||||
|
||||
def set_key(self, key: bytes, iv: bytes):
|
||||
self.key = key
|
||||
self.iv = iv
|
||||
|
||||
def open(self) -> None:
|
||||
self.file = open(self.filename, "r+b" if self.write else "rb")
|
||||
if self.size == -1:
|
||||
self.file.seek(0, 2)
|
||||
self.size = self.file.tell()
|
||||
|
||||
def close(self) -> None:
|
||||
if self.file is not None:
|
||||
self.file.close()
|
||||
self.file = None
|
||||
|
||||
def seek(self, offset: int, whence: int = 0) -> None:
|
||||
if self.file is None:
|
||||
raise FsCryptError("Cannot possibly seek without an open file")
|
||||
|
||||
if whence == 0:
|
||||
self.ptr = offset
|
||||
elif whence == 1:
|
||||
self.ptr += offset
|
||||
elif whence == 2:
|
||||
self.ptr = self.size - offset
|
||||
else:
|
||||
raise ValueError("Invalid whence")
|
||||
|
||||
if self.ptr < 0:
|
||||
self.ptr = 0
|
||||
|
||||
def _get_page_iv(self, page: int) -> bytes:
|
||||
page_iv = bytearray(16)
|
||||
|
||||
file_offset = page * self.PAGE_SIZE
|
||||
for i in range(16):
|
||||
page_iv[i] = self.iv[i] ^ (file_offset >> (8 * (i % 8))) & 0xff
|
||||
|
||||
return bytes(page_iv)
|
||||
|
||||
def _read_page(self, page: int) -> bytes:
|
||||
if self.key is None:
|
||||
raise FsCryptError("Key not set")
|
||||
if self.file is None:
|
||||
raise FsCryptError("File not open")
|
||||
|
||||
iv = self._get_page_iv(page)
|
||||
cipher = AES.new(self.key, AES.MODE_CBC, iv)
|
||||
|
||||
self.file.seek(self.offset + self.PAGE_SIZE * page)
|
||||
block = self.file.read(self.PAGE_SIZE)
|
||||
if len(block) != self.PAGE_SIZE:
|
||||
raise FsCryptError(f"Ran out of data reading page {page}")
|
||||
|
||||
block = cipher.decrypt(block)
|
||||
self._page_buffer = (page, block)
|
||||
return block
|
||||
|
||||
def read(self, n: int) -> bytes:
|
||||
if self.file is None:
|
||||
raise FsCryptError("File not open")
|
||||
|
||||
result = b""
|
||||
to_read = n
|
||||
while to_read:
|
||||
page = self.ptr // self.PAGE_SIZE
|
||||
page_offset = self.ptr % self.PAGE_SIZE
|
||||
page_size = min(self.PAGE_SIZE, to_read)
|
||||
|
||||
if self._page_buffer[0] != page:
|
||||
self._read_page(page)
|
||||
|
||||
if page_offset == 0:
|
||||
block = self._page_buffer[1][:page_size]
|
||||
else:
|
||||
block = self._page_buffer[1][page_offset:page_offset + page_size]
|
||||
|
||||
result += block
|
||||
to_read -= len(block)
|
||||
|
||||
self.ptr += len(result)
|
||||
return result
|
||||
|
||||
if __name__ == "__main__":
|
||||
if len(sys.argv) == 2:
|
||||
repair = False
|
||||
app_path = sys.argv[1]
|
||||
elif len(sys.argv) == 3:
|
||||
if sys.argv[1] != "--repair":
|
||||
print_help()
|
||||
quit()
|
||||
repair = True
|
||||
app_path = sys.argv[2]
|
||||
else:
|
||||
print_help()
|
||||
quit()
|
||||
|
||||
if not os.path.exists(app_path) or not os.path.isfile(app_path):
|
||||
print(f"No such file: {app_path}")
|
||||
|
||||
with AppChecker(app_path, True) as ac:
|
||||
bootid = ac.read_bootid()
|
||||
gt = bootid.game_timestamp
|
||||
print(
|
||||
f"Found {bootid.game_id}"
|
||||
f" {bootid.game_ver[0]}.{bootid.game_ver[1]:02}.{bootid.game_ver[2]:02}"
|
||||
f", {gt.year}-{gt.month:02}-{gt.day:02}T{gt.hour:02}:{gt.minute:02}:{gt.second:02}"
|
||||
f" for {bootid.hw}"
|
||||
)
|
||||
|
||||
print(f" Block size: {size(bootid.block_size)} \t(0x{bootid.block_size:x})")
|
||||
print(f" Header blocks: {bootid.header_count} \t({size(bootid.header_count * bootid.block_size)})")
|
||||
print(f" Data blocks: {bootid.block_count} \t({size(bootid.block_count * bootid.block_size)})")
|
||||
print(f" Data offset: 0x{bootid.data_offset:08x}")
|
||||
|
||||
if repair:
|
||||
print("=== File repair ===")
|
||||
print("Repairing signature")
|
||||
ac.repair_signature()
|
||||
print("Reparing block CRCs")
|
||||
ac.repair_all_block_crcs()
|
||||
|
||||
print("=== File validation ===")
|
||||
if not ac.verify_signature():
|
||||
print("Signature: NG")
|
||||
else:
|
||||
print("Signature: OK")
|
||||
|
||||
if ac.verify_all_blocks():
|
||||
print("All blocks intact")
|
||||
else:
|
||||
print("Some blocks invalid")
|
36
tools/Legacy/Filesytem/Data_monster_Script_Suite/AutoZip.py
Normal file
36
tools/Legacy/Filesytem/Data_monster_Script_Suite/AutoZip.py
Normal file
@ -0,0 +1,36 @@
|
||||
import os
|
||||
import subprocess
|
||||
from send2trash import send2trash
|
||||
|
||||
# Set the directory to start searching from
|
||||
start_directory = os.getcwd()
|
||||
def run_command(command):
|
||||
os.system(command)
|
||||
|
||||
# Get a list of all subdirectories in the starting directory
|
||||
subdirectories = [x for x in os.listdir(start_directory) if os.path.isdir(os.path.join(start_directory, x))]
|
||||
subdirectories.remove("Resource")
|
||||
#game_name = input("Input game name: ")
|
||||
# Loop through each subdirectory and create a 7z file for its contents
|
||||
for directory in subdirectories:
|
||||
# Set the name of the 7z file to be the name of the subdirectory
|
||||
seven_zip_filename = os.path.join(start_directory, directory + ".7z")
|
||||
|
||||
# Build the command to execute 7zip
|
||||
command = ["7z", "a", seven_zip_filename, os.path.join(start_directory, directory, "*")]
|
||||
|
||||
# Execute the command using subprocess
|
||||
subprocess.run(command)
|
||||
|
||||
api_key = "insert api key here"
|
||||
# Get the list of files in the current directory
|
||||
files = [file for file in os.listdir('.') if file.endswith('.7z')]
|
||||
|
||||
# Iterate over each .7z file
|
||||
for filename in files:
|
||||
# Construct the command with the filenames
|
||||
command = f"pd --api-key {api_key} upload \"{filename}\""
|
||||
print(f"Now uploading {filename}. Please wait patiently.")
|
||||
# Execute the command
|
||||
run_command(command)
|
||||
send2trash(f"{filename}")
|
@ -0,0 +1,13 @@
|
||||
@echo off
|
||||
:loop
|
||||
echo Running autozip.py upload...
|
||||
autozip.py both
|
||||
|
||||
if %errorlevel% neq 0 (
|
||||
echo An error occurred. Restarting...
|
||||
timeout /t 5 > nul
|
||||
goto loop
|
||||
)
|
||||
|
||||
echo Script completed successfully.
|
||||
pause
|
@ -0,0 +1,124 @@
|
||||
#What is this script for?
|
||||
|
||||
#This script will download all of the files from a text file and sort them by Game ID.
|
||||
#This is very useful if you have a large list or PDF of URLs from Sega but don't want to download and sort them manually.
|
||||
|
||||
#What do I need to run this script?
|
||||
|
||||
#You will need an installation of python, and the requests library.
|
||||
#You can use the command "pip install requests" to install the requests library.
|
||||
|
||||
#How do I run this script?
|
||||
|
||||
#Open command prompt, and run the script.
|
||||
#Input the filename of the text file.
|
||||
#Your text file should be formatted like this:
|
||||
|
||||
#|||||||||||||||||||||||||||||||||||||||||||
|
||||
#||http://example.com/SDAA_12345678910.app||
|
||||
#||http://example.com/SDAA_12345678910.app||
|
||||
#||http://example.com/SDAA_12345678910.app||
|
||||
#||http://example.com/SDAA_12345678910.app||
|
||||
#|||||||||||||||||||||||||||||||||||||||||||
|
||||
|
||||
#The text file should ONLY have the URLs you are trying to download from, and each should be separated by a line break.
|
||||
#The script will find the game ID within the URL and sort it into the correct folder of the same ID.
|
||||
#If no game ID can be found in the URL, it will be moved a folder titled "unknown".
|
||||
#The script will also download any .txt and .info files and move them into a subfolder within a game ID folder.
|
||||
|
||||
#This script may take a very long time to run. It's an arduous process.
|
||||
|
||||
|
||||
#It's not working.
|
||||
|
||||
#I've never had any errors using this. Feel free to message me if you come across one.
|
||||
|
||||
import os
|
||||
import re
|
||||
import urllib.request
|
||||
|
||||
# define regular expression pattern to match game IDs
|
||||
def get_file_name(url):
|
||||
# Extract the path from the URL
|
||||
path = os.path.basename(url)
|
||||
|
||||
# Use os module to get the file name with extension
|
||||
file_name = os.path.splitext(path)[0]
|
||||
extension = os.path.splitext(path)[1]
|
||||
file_name_with_extension = file_name + extension
|
||||
return file_name_with_extension
|
||||
|
||||
def get_file_extension(url):
|
||||
# Extract the path from the URL
|
||||
path = os.path.basename(url)
|
||||
|
||||
# Use os module to get the file extension
|
||||
file_extension = os.path.splitext(path)[1]
|
||||
|
||||
return file_extension
|
||||
|
||||
# read URLs from file
|
||||
urlist = input("Input file name here: ")
|
||||
with open(urlist, "r") as f:
|
||||
urls = f.read().splitlines()
|
||||
|
||||
# loop through URLs
|
||||
for url in urls:
|
||||
# extract game ID from URL
|
||||
path = url
|
||||
print(path)
|
||||
|
||||
# Use regular expressions to find the game ID
|
||||
match = re.search("(sd|sb)[a-z]{2}", path, re.IGNORECASE)
|
||||
if match:
|
||||
game_id = match.group(0).upper()
|
||||
else:
|
||||
game_id = "unknown"
|
||||
#print(game_id)
|
||||
# create game ID folder if it does not exist
|
||||
if not os.path.exists(game_id):
|
||||
os.makedirs(game_id)
|
||||
|
||||
# prepare to download files
|
||||
try:
|
||||
with urllib.request.urlopen(url) as response:
|
||||
# loop through response headers to get file name and extension
|
||||
filename = get_file_name(url)
|
||||
extension = get_file_extension(url)
|
||||
for header in response.headers:
|
||||
if "filename" in header:
|
||||
filename = header.split("=")[1].strip('"')
|
||||
extension = os.path.splitext(filename)[1]
|
||||
break
|
||||
# skip if file name or extension not found
|
||||
if not filename or not extension:
|
||||
continue
|
||||
|
||||
# determine destination folder based on file extension
|
||||
if extension in [".app", ".opt", ".pack"]:
|
||||
folder = game_id
|
||||
elif extension in [".txt", ".info"]:
|
||||
folder = os.path.join(game_id, "text")
|
||||
if not os.path.exists(folder):
|
||||
os.makedirs(folder)
|
||||
else:
|
||||
continue
|
||||
|
||||
# check if file already exists in game ID folder or its subfolders
|
||||
found = False
|
||||
for root, dirs, files in os.walk(game_id):
|
||||
if filename in files:
|
||||
found = True
|
||||
print(f"{filename} already exists in {os.path.join(root, filename)}")
|
||||
break
|
||||
if found:
|
||||
continue
|
||||
|
||||
# download file and report success
|
||||
opener = urllib.request.build_opener()
|
||||
opener.addheaders = [('User-agent', 'Mozilla/5.0')]
|
||||
urllib.request.install_opener(opener)
|
||||
urllib.request.urlretrieve(url, os.path.join(folder, filename))
|
||||
print(f"{filename} downloaded to {folder}")
|
||||
except Exception as e:
|
||||
print(f"Error downloading {url}: {e}")
|
81
tools/Legacy/Filesytem/Data_monster_Script_Suite/Compare.py
Normal file
81
tools/Legacy/Filesytem/Data_monster_Script_Suite/Compare.py
Normal file
@ -0,0 +1,81 @@
|
||||
#What is this script for?
|
||||
|
||||
#This script will compare all of the files in two given folders, and separate the differences.
|
||||
#This is best used with child .apps, where this is the only way to find the changed files in the update.
|
||||
|
||||
#What do I need to run this script?
|
||||
|
||||
#You will need an installation of python.
|
||||
|
||||
#How do I run this script?
|
||||
|
||||
#Open command prompt, and run the script. "
|
||||
#"Previous Update" is the first update you extracted, this is a folder path.
|
||||
#"Current Update" is the folder you are comparing it to, this is also a folder path.
|
||||
#"Destination" is a new folder where the differences will be copied to.
|
||||
|
||||
#This script may take a very long time to run. It's an arduous process.
|
||||
|
||||
#It's not working.
|
||||
|
||||
#I've never had any errors using this. Feel free to message me if you come across one.
|
||||
|
||||
import os
|
||||
import hashlib
|
||||
import shutil
|
||||
import sys
|
||||
|
||||
def get_file_hash(file_path):
|
||||
"""Get the MD5 hash of a file"""
|
||||
with open(file_path, "rb") as f:
|
||||
bytes = f.read()
|
||||
return hashlib.md5(bytes).hexdigest()
|
||||
|
||||
def compare_folders(folder1, folder2):
|
||||
"""Compare the contents of two folders"""
|
||||
folder1_files = {}
|
||||
folder2_files = {}
|
||||
|
||||
# Get the MD5 hash of each file in folder1
|
||||
for root, dirs, files in os.walk(folder1):
|
||||
for file in files:
|
||||
file_path = os.path.relpath(os.path.join(root, file), folder1)
|
||||
file_hash = get_file_hash(os.path.join(folder1, file_path))
|
||||
folder1_files[file_path] = file_hash
|
||||
print("1:", file, file_hash)
|
||||
|
||||
# Get the MD5 hash of each file in folder2
|
||||
for root, dirs, files in os.walk(folder2):
|
||||
for file in files:
|
||||
file_path = os.path.relpath(os.path.join(root, file), folder2)
|
||||
file_hash = get_file_hash(os.path.join(folder2, file_path))
|
||||
folder2_files[file_path] = file_hash
|
||||
print("2:", file, file_hash)
|
||||
|
||||
# Compare the files in both folders
|
||||
for file_path in folder2_files:
|
||||
if file_path not in folder1_files or folder1_files[file_path] != folder2_files[file_path]:
|
||||
yield file_path
|
||||
|
||||
def copy_files(src_folder, dest_folder, file_paths):
|
||||
"""Copy files from one folder to another, creating new folders if necessary"""
|
||||
for file_path in file_paths:
|
||||
src_file = os.path.join(src_folder, file_path)
|
||||
dest_file = os.path.join(dest_folder, file_path)
|
||||
|
||||
dest_dir = os.path.dirname(dest_file)
|
||||
if not os.path.exists(dest_dir):
|
||||
os.makedirs(dest_dir)
|
||||
|
||||
shutil.copy2(src_file, dest_file)
|
||||
print("+++++", dest_file)
|
||||
|
||||
folder1 = sys.argv[1]
|
||||
folder2 = sys.argv[2]
|
||||
dest_folder = sys.argv[3]
|
||||
|
||||
# Compare the contents of folder1 and folder2
|
||||
file_paths = compare_folders(folder1, folder2)
|
||||
|
||||
# Copy the different files from folder2 to dest_folder
|
||||
copy_files(folder2, dest_folder, file_paths)
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user