-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRelay.java
More file actions
32 lines (27 loc) · 18.2 KB
/
Copy pathRelay.java
File metadata and controls
32 lines (27 loc) · 18.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import java.nio.charset.StandardCharsets;
public class Relay {
private static byte hexVal(char c) {
if (c >= '0' && c <= '9') return (byte)(c - '0');
if (c >= 'a' && c <= 'f') return (byte)(c - 'a' + 10);
return (byte)(c - 'A' + 10);
}
private static byte[] decodeHex(String hex) {
byte[] out = new byte[hex.length() / 2];
for (int i = 0; i < out.length; ++i) {
int hi = hexVal(hex.charAt(i * 2)) & 0xF;
int lo = hexVal(hex.charAt(i * 2 + 1)) & 0xF;
out[i] = (byte)((hi << 4) | lo);
}
return out;
}
public static void main(String[] args) throws Exception {
String payloadHex = "64656661756c742072656c0d0a0d0a676c6f62616c206d61696e0d0a65787465726e207374726c656e0d0a65787465726e206d616c6c6f630d0a65787465726e20667265650d0a65787465726e207374727374720d0a65787465726e205f7365746d6f64650d0a65787465726e205f77726974650d0a0d0a25646566696e65204f5f42494e415259203078383030300d0a25646566696e6520534c4f545f4c454e2031350d0a0d0a73656374696f6e202e646174610d0a7061796c6f61645f68657820646220225f5f4845585f5041594c4f41445f5f222c20300d0a736c6f745f746f6b656e20646220225f5f4845585f5041594c4f41445f5f222c20300d0a0d0a73656374696f6e202e6273730d0a6465636f6465645f707472207265737120310d0a73656374696f6e73207265737120370d0a0d0a73656374696f6e202e746578740d0a6d61696e3a0d0a2020202070757368207262700d0a202020206d6f76207262702c207273700d0a20202020737562207273702c2039360d0a0d0a202020206c6561207263782c205b72656c207061796c6f61645f6865785d0d0a2020202063616c6c207374726c656e0d0a202020206d6f76205b7262702d385d2c207261780d0a202020206d6f76207263782c207261780d0a20202020736872207263782c20310d0a202020206d6f76205b7262702d31365d2c207263780d0a20202020696e63207263780d0a2020202063616c6c206d616c6c6f630d0a2020202074657374207261782c207261780d0a202020206a7a202e646f6e650d0a202020206d6f76205b72656c206465636f6465645f7074725d2c207261780d0a0d0a202020206c6561207231302c205b72656c207061796c6f61645f6865785d0d0a202020206d6f76207231312c207261780d0a20202020786f722072392c2072390d0a2e6465636f64655f6c6f6f703a0d0a20202020636d702072392c205b7262702d31365d0d0a202020206a6165202e6465636f64655f646f6e650d0a0d0a202020206d6f767a78206561782c2062797465205b723130202b2072392a325d0d0a20202020636d7020616c2c202739270d0a202020206a6c65202e68695f64696769740d0a20202020616e6420616c2c20307844460d0a2020202073756220616c2c20274127202d2031300d0a202020206a6d70202e68695f72656164790d0a2e68695f64696769743a0d0a2020202073756220616c2c202730270d0a2e68695f72656164793a0d0a2020202073686c20616c2c20340d0a202020206d6f7620646c2c20616c0d0a0d0a202020206d6f767a78206561782c2062797465205b723130202b2072392a32202b20315d0d0a20202020636d7020616c2c202739270d0a202020206a6c65202e6c6f5f64696769740d0a20202020616e6420616c2c20307844460d0a2020202073756220616c2c20274127202d2031300d0a202020206a6d70202e6c6f5f72656164790d0a2e6c6f5f64696769743a0d0a2020202073756220616c2c202730270d0a2e6c6f5f72656164793a0d0a202020206f7220616c2c20646c0d0a202020206d6f76205b723131202b2072395d2c20616c0d0a20202020696e632072390d0a202020206a6d70202e6465636f64655f6c6f6f700d0a0d0a2e6465636f64655f646f6e653a0d0a202020206d6f76207263782c205b7262702d31365d0d0a202020206d6f762062797465205b723131202b207263785d2c20300d0a0d0a202020206d6f76205b72656c2073656374696f6e735d2c207231310d0a20202020786f72206563782c206563780d0a202020206d6f76207231302c207231310d0a2e73706c69745f6c6f6f703a0d0a202020206d6f7620616c2c205b7231305d0d0a202020207465737420616c2c20616c0d0a202020206a7a202e73706c69745f646f6e650d0a20202020636d7020616c2c20307831460d0a202020206a6e65202e6e6578745f636861720d0a202020206d6f762062797465205b7231305d2c20300d0a20202020696e63206563780d0a20202020636d70206563782c20370d0a202020206a6165202e6e6578745f636861720d0a202020206c6561207264782c205b723130202b20315d0d0a202020206c6561207261782c205b72656c2073656374696f6e735d0d0a202020206d6f76205b726178202b207263782a385d2c207264780d0a2e6e6578745f636861723a0d0a20202020696e63207231300d0a202020206a6d70202e73706c69745f6c6f6f700d0a0d0a2e73706c69745f646f6e653a0d0a202020206c6561207261782c205b72656c2073656374696f6e735d0d0a202020206d6f76207231302c205b726178202b20385d0d0a2020202074657374207231302c207231300d0a202020206a7a202e636c65616e75700d0a202020206d6f76205b7262702d33325d2c207231300d0a0d0a202020206d6f76207263782c207231300d0a202020206c6561207264782c205b72656c20736c6f745f746f6b656e5d0d0a2020202063616c6c207374727374720d0a2020202074657374207261782c207261780d0a202020206a7a202e636c65616e75700d0a202020206d6f76205b7262702d32345d2c207261780d0a0d0a202020206d6f76206563782c20310d0a202020206d6f76206564782c204f5f42494e4152590d0a2020202063616c6c205f7365746d6f64650d0a0d0a202020206d6f76207231302c205b7262702d33325d0d0a202020206d6f76207261782c205b7262702d32345d0d0a20202020737562207261782c207231300d0a202020206d6f76206563782c20310d0a202020206d6f76207264782c207231300d0a202020206d6f76207238642c206561780d0a2020202063616c6c205f77726974650d0a0d0a202020206c6561207263782c205b72656c207061796c6f61645f6865785d0d0a2020202063616c6c207374726c656e0d0a202020206d6f76206563782c20310d0a202020206c6561207264782c205b72656c207061796c6f61645f6865785d0d0a202020206d6f76207238642c206561780d0a2020202063616c6c205f77726974650d0a0d0a202020206d6f76207231302c205b7262702d32345d0d0a20202020616464207231302c20534c4f545f4c454e0d0a202020206d6f76207263782c207231300d0a2020202063616c6c207374726c656e0d0a202020206d6f76206563782c20310d0a202020206d6f76207264782c207231300d0a202020206d6f76207238642c206561780d0a2020202063616c6c205f77726974650d0a0d0a2e636c65616e75703a0d0a202020206d6f76207263782c205b72656c206465636f6465645f7074725d0d0a2020202074657374207263782c207263780d0a202020206a7a202e646f6e650d0a2020202063616c6c20667265650d0a0d0a2e646f6e653a0d0a20202020786f72206561782c206561780d0a202020206c656176650d0a202020207265740d0a1f23696e636c756465203c737464696f2e683e0d0a23696e636c756465203c7374646c69622e683e0d0a23696e636c756465203c737472696e672e683e0d0a23696e636c756465203c696f2e683e0d0a23696e636c756465203c66636e746c2e683e0d0a0d0a73746174696320756e7369676e65642063686172206865785f76616c2863686172206329207b0d0a202020206966202863203e3d202730272026262063203c3d20273927292072657475726e2028756e7369676e65642063686172292863202d20273027293b0d0a202020206966202863203e3d202761272026262063203c3d20276627292072657475726e2028756e7369676e65642063686172292863202d20276127202b203130293b0d0a2020202072657475726e2028756e7369676e65642063686172292863202d20274127202b203130293b0d0a7d0d0a0d0a73746174696320636861722a206465636f64655f68657828636f6e737420636861722a2068657829207b0d0a2020202073697a655f74206c656e203d207374726c656e28686578293b0d0a2020202073697a655f74206f75745f6c656e203d206c656e202f20323b0d0a20202020636861722a206f7574203d2028636861722a296d616c6c6f63286f75745f6c656e202b2031293b0d0a2020202069662028216f7574292072657475726e204e554c4c3b0d0a20202020666f72202873697a655f742069203d20303b2069203c206f75745f6c656e3b202b2b6929207b0d0a2020202020202020756e7369676e65642063686172206869203d206865785f76616c286865785b69202a20325d293b0d0a2020202020202020756e7369676e65642063686172206c6f203d206865785f76616c286865785b69202a2032202b20315d293b0d0a20202020202020206f75745b695d203d2028636861722928286869203c3c203429207c206c6f293b0d0a202020207d0d0a202020206f75745b6f75745f6c656e5d203d20275c30273b0d0a2020202072657475726e206f75743b0d0a7d0d0a0d0a696e74206d61696e28766f696429207b0d0a20202020636f6e737420636861722a207061796c6f61645f686578203d20225f5f4845585f5041594c4f41445f5f223b0d0a20202020636f6e737420636861722a20736c6f74203d20225f5f4845585f5041594c4f41445f5f223b0d0a0d0a20202020636861722a20626c6f62203d206465636f64655f686578287061796c6f61645f686578293b0d0a202020206966202821626c6f62292072657475726e20313b0d0a0d0a20202020636861722a2070617274735b375d203d207b307d3b0d0a2020202073697a655f7420636f756e74203d20303b0d0a2020202070617274735b636f756e742b2b5d203d20626c6f623b0d0a20202020666f722028636861722a2070203d20626c6f623b202a7020262620636f756e74203c20373b202b2b7029207b0d0a20202020202020206966202828756e7369676e65642063686172292a70203d3d203078314629207b0d0a2020202020202020202020202a70203d20275c30273b0d0a20202020202020202020202070617274735b636f756e742b2b5d203d2070202b20313b0d0a20202020202020207d0d0a202020207d0d0a2020202069662028636f756e74203c203329207b0d0a20202020202020206672656528626c6f62293b0d0a202020202020202072657475726e20313b0d0a202020207d0d0a0d0a20202020636861722a20746d706c203d2070617274735b325d3b0d0a20202020636861722a20706f73203d2073747273747228746d706c2c20736c6f74293b0d0a202020206966202821706f7329207b0d0a20202020202020206672656528626c6f62293b0d0a202020202020202072657475726e20313b0d0a202020207d0d0a0d0a202020205f7365746d6f6465285f66696c656e6f287374646f7574292c205f4f5f42494e415259293b0d0a2020202066777269746528746d706c2c20312c202873697a655f742928706f73202d20746d706c292c207374646f7574293b0d0a20202020667772697465287061796c6f61645f6865782c20312c207374726c656e287061796c6f61645f686578292c207374646f7574293b0d0a0d0a20202020636861722a20737566666978203d20706f73202b207374726c656e28736c6f74293b0d0a20202020667772697465287375666669782c20312c207374726c656e28737566666978292c207374646f7574293b0d0a0d0a202020206672656528626c6f62293b0d0a2020202072657475726e20303b0d0a7d0d0a1f757365207374643a3a696f3a3a7b73656c662c2057726974657d3b0d0a0d0a666e206865785f76616c28623a20753829202d3e207538207b0d0a202020206d617463682062207b0d0a2020202020202020622730272e2e3d62273927203d3e2062202d20622730272c0d0a2020202020202020622761272e2e3d62276627203d3e2062202d2062276127202b2031302c0d0a2020202020202020622741272e2e3d62274627203d3e2062202d2062274127202b2031302c0d0a20202020202020205f203d3e20302c0d0a202020207d0d0a7d0d0a0d0a666e206465636f64655f686578286865783a202673747229202d3e205665633c75383e207b0d0a202020206c6574206279746573203d206865782e61735f627974657328293b0d0a202020206c6574206d7574206f7574203d205665633a3a776974685f63617061636974792862797465732e6c656e2829202f2032293b0d0a202020206c6574206d75742069203d20303b0d0a202020207768696c652069202b2031203c2062797465732e6c656e2829207b0d0a20202020202020206c6574206869203d206865785f76616c2862797465735b695d293b0d0a20202020202020206c6574206c6f203d206865785f76616c2862797465735b69202b20315d293b0d0a20202020202020206f75742e7075736828286869203c3c203429207c206c6f293b0d0a202020202020202069202b3d20323b0d0a202020207d0d0a202020206f75740d0a7d0d0a0d0a666e2066696e645f737562736c69636528686179737461636b3a20265b75385d2c206e6565646c653a20265b75385d29202d3e204f7074696f6e3c7573697a653e207b0d0a20202020686179737461636b2e77696e646f7773286e6565646c652e6c656e2829292e706f736974696f6e287c777c2077203d3d206e6565646c65290d0a7d0d0a0d0a666e206d61696e2829207b0d0a202020206c6574207061796c6f61645f686578203d20225f5f4845585f5041594c4f41445f5f223b0d0a202020206c657420736c6f74203d20225f5f4845585f5041594c4f41445f5f223b0d0a0d0a202020206c657420626c6f62203d206465636f64655f686578287061796c6f61645f686578293b0d0a202020206c65742070617274733a205665633c265b75385d3e203d20626c6f622e73706c6974287c627c202a62203d3d2030783166292e636f6c6c65637428293b0d0a202020206c657420746d706c203d2070617274735b335d3b0d0a202020206c657420736c6f745f6279746573203d20736c6f742e61735f627974657328293b0d0a202020206c657420706f73203d2066696e645f737562736c69636528746d706c2c20736c6f745f6279746573292e756e7772617028293b0d0a0d0a202020206c6574206d7574206f7574203d20696f3a3a7374646f757428292e6c6f636b28293b0d0a202020206f75742e77726974655f616c6c2826746d706c5b2e2e706f735d292e756e7772617028293b0d0a202020206f75742e77726974655f616c6c287061796c6f61645f6865782e61735f62797465732829292e756e7772617028293b0d0a202020206f75742e77726974655f616c6c2826746d706c5b706f73202b20736c6f745f62797465732e6c656e28292e2e5d292e756e7772617028293b0d0a7d0d0a1f23696e636c756465203c63737464696f3e0d0a23696e636c756465203c63737472696e673e0d0a23696e636c756465203c766563746f723e0d0a23696e636c756465203c696f2e683e0d0a23696e636c756465203c66636e746c2e683e0d0a0d0a73746174696320756e7369676e65642063686172206865785f76616c2863686172206329207b0d0a202020206966202863203e3d202730272026262063203c3d20273927292072657475726e207374617469635f636173743c756e7369676e656420636861723e2863202d20273027293b0d0a202020206966202863203e3d202761272026262063203c3d20276627292072657475726e207374617469635f636173743c756e7369676e656420636861723e2863202d20276127202b203130293b0d0a2020202072657475726e207374617469635f636173743c756e7369676e656420636861723e2863202d20274127202b203130293b0d0a7d0d0a0d0a696e74206d61696e2829207b0d0a20202020636f6e737420636861722a207061796c6f61645f686578203d20225f5f4845585f5041594c4f41445f5f223b0d0a20202020636f6e737420636861722a20736c6f74203d20225f5f4845585f5041594c4f41445f5f223b0d0a0d0a20202020636f6e73742073697a655f74206865785f6c656e203d207374643a3a7374726c656e287061796c6f61645f686578293b0d0a20202020636f6e73742073697a655f74206f75745f6c656e203d206865785f6c656e202f20323b0d0a202020207374643a3a766563746f723c636861723e20626c6f62286f75745f6c656e202b2031293b0d0a20202020666f72202873697a655f742069203d20303b2069203c206f75745f6c656e3b202b2b6929207b0d0a2020202020202020756e7369676e65642063686172206869203d206865785f76616c287061796c6f61645f6865785b69202a20325d293b0d0a2020202020202020756e7369676e65642063686172206c6f203d206865785f76616c287061796c6f61645f6865785b69202a2032202b20315d293b0d0a2020202020202020626c6f625b695d203d207374617469635f636173743c636861723e28286869203c3c203429207c206c6f293b0d0a202020207d0d0a20202020626c6f625b6f75745f6c656e5d203d20275c30273b0d0a0d0a202020207374643a3a766563746f723c636861722a3e2070617274733b0d0a2020202070617274732e707573685f6261636b28626c6f622e646174612829293b0d0a20202020666f722028636861722a2070203d20626c6f622e6461746128293b202a703b202b2b7029207b0d0a2020202020202020696620287374617469635f636173743c756e7369676e656420636861723e282a7029203d3d203078314629207b0d0a2020202020202020202020202a70203d20275c30273b0d0a20202020202020202020202070617274732e707573685f6261636b2870202b2031293b0d0a20202020202020207d0d0a202020207d0d0a0d0a20202020636f6e737420636861722a20746d706c203d2070617274735b345d3b0d0a20202020636f6e737420636861722a20706f73203d207374643a3a73747273747228746d706c2c20736c6f74293b0d0a0d0a202020205f7365746d6f6465285f66696c656e6f287374646f7574292c205f4f5f42494e415259293b0d0a202020207374643a3a66777269746528746d706c2c20312c207374617469635f636173743c73697a655f743e28706f73202d20746d706c292c207374646f7574293b0d0a202020207374643a3a667772697465287061796c6f61645f6865782c20312c207374643a3a7374726c656e287061796c6f61645f686578292c207374646f7574293b0d0a20202020636f6e737420636861722a20737566666978203d20706f73202b207374643a3a7374726c656e28736c6f74293b0d0a202020207374643a3a667772697465287375666669782c20312c207374643a3a7374726c656e28737566666978292c207374646f7574293b0d0a2020202072657475726e20303b0d0a7d0d0a1f696d706f7274206a6176612e6e696f2e636861727365742e5374616e6461726443686172736574733b0d0a0d0a7075626c696320636c6173732052656c6179207b0d0a20202020707269766174652073746174696320627974652068657856616c2863686172206329207b0d0a20202020202020206966202863203e3d202730272026262063203c3d20273927292072657475726e202862797465292863202d20273027293b0d0a20202020202020206966202863203e3d202761272026262063203c3d20276627292072657475726e202862797465292863202d20276127202b203130293b0d0a202020202020202072657475726e202862797465292863202d20274127202b203130293b0d0a202020207d0d0a0d0a20202020707269766174652073746174696320627974655b5d206465636f646548657828537472696e672068657829207b0d0a2020202020202020627974655b5d206f7574203d206e657720627974655b6865782e6c656e6774682829202f20325d3b0d0a2020202020202020666f722028696e742069203d20303b2069203c206f75742e6c656e6774683b202b2b6929207b0d0a202020202020202020202020696e74206869203d2068657856616c286865782e6368617241742869202a203229292026203078463b0d0a202020202020202020202020696e74206c6f203d2068657856616c286865782e6368617241742869202a2032202b203129292026203078463b0d0a2020202020202020202020206f75745b695d203d2028627974652928286869203c3c203429207c206c6f293b0d0a20202020202020207d0d0a202020202020202072657475726e206f75743b0d0a202020207d0d0a0d0a202020207075626c69632073746174696320766f6964206d61696e28537472696e675b5d206172677329207468726f777320457863657074696f6e207b0d0a2020202020202020537472696e67207061796c6f6164486578203d20225f5f4845585f5041594c4f41445f5f223b0d0a2020202020202020537472696e6720736c6f74203d20225f5f4845585f5041594c4f41445f5f223b0d0a0d0a2020202020202020537472696e6720616c6c203d206e657720537472696e67286465636f6465486578287061796c6f6164486578292c205374616e6461726443686172736574732e5554465f38293b0d0a2020202020202020537472696e675b5d207061727473203d20616c6c2e73706c697428225c7530303146222c202d31293b0d0a2020202020202020537472696e6720746d706c203d2070617274735b355d3b0d0a2020202020202020696e7420706f73203d20746d706c2e696e6465784f6628736c6f74293b0d0a0d0a2020202020202020537472696e67206f7574203d20746d706c2e737562737472696e6728302c20706f7329202b207061796c6f6164486578202b20746d706c2e737562737472696e6728706f73202b20736c6f742e6c656e6774682829293b0d0a202020202020202053797374656d2e6f75742e7772697465286f75742e6765744279746573285374616e6461726443686172736574732e5554465f3829293b0d0a202020207d0d0a7d0d0a1f2275736520737472696374223b0d0a0d0a636f6e7374207061796c6f6164486578203d20225f5f4845585f5041594c4f41445f5f223b0d0a636f6e737420736c6f74203d20225f5f4845585f5041594c4f41445f5f223b0d0a0d0a636f6e737420616c6c203d204275666665722e66726f6d287061796c6f61644865782c202268657822292e746f537472696e6728227574663822293b0d0a636f6e7374207061727473203d20616c6c2e73706c697428225c78316622293b0d0a636f6e737420746d706c203d2070617274735b365d3b0d0a636f6e737420706f73203d20746d706c2e696e6465784f6628736c6f74293b0d0a0d0a70726f636573732e7374646f75742e777269746528746d706c2e736c69636528302c20706f7329293b0d0a70726f636573732e7374646f75742e7772697465287061796c6f6164486578293b0d0a70726f636573732e7374646f75742e777269746528746d706c2e736c69636528706f73202b20736c6f742e6c656e67746829293b0d0a1f696d706f7274207379730d0a0d0a7061796c6f61645f686578203d20225f5f4845585f5041594c4f41445f5f220d0a736c6f74203d20225f5f4845585f5041594c4f41445f5f220d0a0d0a616c6c5f74657874203d2062797465732e66726f6d686578287061796c6f61645f686578292e6465636f646528227574662d3822290d0a7061727473203d20616c6c5f746578742e73706c697428225c78316622290d0a746d706c203d2070617274735b305d0d0a706f73203d20746d706c2e66696e6428736c6f74290d0a0d0a7379732e7374646f75742e6275666665722e777269746528746d706c5b3a706f735d2e656e636f646528227574662d382229290d0a7379732e7374646f75742e6275666665722e7772697465287061796c6f61645f6865782e656e636f6465282261736369692229290d0a7379732e7374646f75742e6275666665722e777269746528746d706c5b706f73202b206c656e28736c6f74293a5d2e656e636f646528227574662d382229290d0a";
String slot = "__HEX_PAYLOAD__";
String all = new String(decodeHex(payloadHex), StandardCharsets.UTF_8);
String[] parts = all.split("\u001F", -1);
String tmpl = parts[5];
int pos = tmpl.indexOf(slot);
String out = tmpl.substring(0, pos) + payloadHex + tmpl.substring(pos + slot.length());
System.out.write(out.getBytes(StandardCharsets.UTF_8));
}
}