├── LICENSE
├── README.md
├── clean_wupdate.bat
├── git_update.sh
├── google1b28ac82d8f9d646.html
├── index.html
├── kmlmap_gadget.xml
├── ndsolve.html
├── params.json
├── qrcode.html
├── stylesheets
├── github-light.css
├── normalize.css
└── stylesheet.css
├── unicode_fakeshuffle.html
├── unicode_steganography.html
├── unicode_steganography.js
├── unicode_steganography_gadget.xml
└── unicode_steganography_iframe.html
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015 330k
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
23 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # misc_tools
2 | Miscellaneous Tools by 330k
3 |
4 | ## Unicode Steganography with Zero-Width Characters
5 | http://330k.github.io/misc_tools/unicode_steganography.html
6 |
7 | ## General Numerical Differential Equation Solver
8 | https://330k.github.io/misc_tools/ndsolve.html
9 |
10 | ## Show KML Layer on Google Maps Gadget for Google Sites
11 | http://330k.github.io/misc_tools/kmlmap_gadget.xml
12 |
13 | Usage:
14 |
15 | 1. Go to Google Sites
16 | 2. Create new page or edit page
17 | 3. Insert external gadget from URL
18 | 4. Disignate the above URL
19 | 5. Input the URL to kml file to show
20 | 6. Done!
21 |
--------------------------------------------------------------------------------
/clean_wupdate.bat:
--------------------------------------------------------------------------------
1 | @ECHO OFF
2 | REM Windows Updateの過去のデータを消去する
3 | REM
4 | REM Windows Update error "0x80070002" or "0x80070003"
5 | REM https://support.microsoft.com/en-us/kb/910336
6 |
7 | REM Windows Updateサービスを停止
8 | NET STOP wuauserv
9 |
10 | REM DataStoreディレクトリ以下のファイルも削除
11 | SET TARGET=%WINDIR%\SoftwareDistribution\DataStore
12 | DEL /Q /S "%TARGET%\*"
13 | FOR /D %%1 IN ("%TARGET%\*") DO RMDIR /Q /S "%%1"
14 |
15 | REM Downloadディレクトリ以下のファイルも削除
16 | SET TARGET=%WINDIR%\SoftwareDistribution\Download
17 | DEL /Q /S "%TARGET%\*"
18 | FOR /D %%1 IN ("%TARGET%\*") DO RMDIR /Q /S "%%1"
19 |
20 | REM Windows Updateサービスを再開
21 | NET START wuauserv
22 |
--------------------------------------------------------------------------------
/git_update.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | git add .
4 | git commit -m `date "+%Y%m%dT%H%M%S"`
5 | git push
6 |
7 | read
8 |
--------------------------------------------------------------------------------
/google1b28ac82d8f9d646.html:
--------------------------------------------------------------------------------
1 | google-site-verification: google1b28ac82d8f9d646.html
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
General Numerical Differential Equation Solver by 330k
587 |
588 |
589 |
Conditions for Differential Equation
590 |
642 |
643 |
644 |
645 |
Result Graph
646 |
647 |
648 |
649 |
650 |
Result Data (TSV)
651 |
652 |
653 |
654 |
655 |
701 |
702 |
703 |
--------------------------------------------------------------------------------
/params.json:
--------------------------------------------------------------------------------
1 | {"name":"Misc tools","tagline":"Miscellaneous Tools","body":"# misc_tools\r\nMiscellaneous Tools by 330k\r\n\r\n## Unicode Steganography with Zero-Width Characters\r\nhttp://330k.github.io/misc_tools/unicode_steganography.html\r\n\r\n## Show KML Layer on Google Maps Gadget for Google Sites\r\nhttp://330k.github.io/misc_tools/kmlmap_gadget.xml\r\n\r\nUsage:\r\n\r\n1. Go to Google Sites\r\n2. Create new page or edit page\r\n3. Insert external gadget from URL\r\n4. Disignate the above URL\r\n5. Input the URL to kml file to show\r\n6. Done!\r\n","google":"UA-71005141-4","note":"Don't delete this file! It's used internally to help with page regeneration."}
--------------------------------------------------------------------------------
/qrcode.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | Online QR Code Generator with Google Chart API by 330k
4 |
5 |
47 |
48 |
49 |
56 |
65 |
66 |
92 |
17 | This is plain text steganography with zero-width characters of Unicode.
18 | Zero-width characters is inserted within the words.
19 |
20 | JavaScript library is below.
21 | http://330k.github.io/misc_tools/unicode_steganography.js
22 |
99 | encodeSteganography returns a stego String which is embedded steganography of Uint8Array.
100 |
101 |
unicodeSteganographer.decodeText(String)
102 |
103 | decodeSteganography returns a JavaScript Object: { originalText: original text (String), hiddenText: hidden text (String)}.
104 |
105 |
unicodeSteganographer.decodeBinary(String)
106 |
107 | decodeSteganography returns a JavaScript Object: { originalText: original text (String), hiddenData: hidden data (Uint8Array)}.
108 |
109 |
unicodeSteganographer.setUseChars(String)
110 |
111 | setUseChars sets the characters for steganography as a String.
112 | Default characters used for steganography are U+200C, U+200D, U+202C, and U+FEFF.
113 | U+200B(ZERO WIDTH SPACE) is deleted in Gmail when sending a mail from browsers.
114 |
115 |
Supported Browsers
116 |
117 |
Chromium 45 (Ubuntu 14.04 LTS)
118 |
Firefox 42 (Ubuntu 14.04 LTS)
119 |
Edge (Windows 10)
120 |
Internet Explorer 11 (Windows 10) * Text in Text Only, Download as File doesn't work
121 |
Safari (iOS 9.1)
122 |
Chrome (Android 4.2)
123 |
124 |
125 |
126 |
127 |
258 |
259 |
260 |
267 |
268 |
--------------------------------------------------------------------------------
/unicode_steganography.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Zero-Width Unicode Character Steganography
3 | * Copyright (c) 2015-2016 Kei Misawa
4 | * This software is released under the MIT License.
5 | * http://opensource.org/licenses/mit-license.php
6 | */
7 | (function(exports){
8 | 'use strict';
9 | var chars = [];
10 | var radix = 0;
11 | var codelengthText = 0;
12 | var codelengthBinary = 0;
13 | /**
14 | Set characters of coded hidden text(zero width characters)
15 | args: string of zero width characters
16 | return: null
17 | */
18 | var setUseChars = function(newchars){
19 | if(newchars.length >= 2){
20 | chars = newchars.split('');
21 | radix = chars.length;
22 | codelengthText = Math.ceil(Math.log(65536) / Math.log(radix));
23 | codelengthBinary = Math.ceil(Math.log(256) / Math.log(radix));
24 | }
25 | return null;
26 | };
27 | /**
28 | Text Encoder
29 | args:
30 | text: original text to be embedded (String)
31 | data: text to be hidden (String)
32 | return: unicode stego text
33 | */
34 | var encodeText = function(text1, text2){
35 | return combine_shuffle_string(text1, encode_to_zerowidth_characters_text(text2), codelengthText);
36 | };
37 | /**
38 | Binary Encoder
39 | args:
40 | text: original text to be embedded (String)
41 | data: data to be hidden (Uint8Array)
42 | return: unicode stego text
43 | */
44 | var encodeBinary = function(text, data){
45 | return combine_shuffle_string(text, encode_to_zerowidth_characters_binary(data), codelengthBinary);
46 | };
47 |
48 | /**
49 | Text Decoder
50 | args: unicode text with steganography (String)
51 | return: JavaScript Object {
52 | originalText: original text (String),
53 | hiddenText: hidden data (String)
54 | }
55 | */
56 | var decodeText = function(text){
57 | var splitted = split_zerowidth_characters(text);
58 |
59 | return {
60 | 'originalText': splitted.originalText,
61 | 'hiddenText': decode_from_zero_width_characters_text(splitted.hiddenText, codelengthText)
62 | };
63 | };
64 | /**
65 | Binary Decoder
66 | args: unicode text with steganography (String)
67 | return: JavaScript Object {
68 | originalText: original text (String),
69 | hiddenData: hidden data (Uint8Array)
70 | }
71 | */
72 | var decodeBinary = function(text){
73 | var splitted = split_zerowidth_characters(text);
74 |
75 | return {
76 | 'originalText': splitted.originalText,
77 | 'hiddenData': decode_from_zero_width_characters_binary(splitted.hiddenText)
78 | };
79 | };
80 |
81 | setUseChars('\u200c\u200d\u202c\ufeff');
82 |
83 | exports.unicodeSteganographer = {
84 | encodeText: encodeText,
85 | decodeText: decodeText,
86 | encodeBinary: encodeBinary,
87 | decodeBinary: decodeBinary,
88 | setUseChars: setUseChars
89 | };
90 |
91 | /**
92 | Internal Functions
93 | */
94 | var encode_to_zerowidth_characters_text = function(str1){
95 | var result = new Array(str1.length);
96 | var base = '';
97 | var i;
98 | var c;
99 | var d;
100 | var r;
101 |
102 | //var base = '0'.repeat(codelength); // IE not support this method
103 | for(i = 0; i < codelengthText; i++){
104 | base += '0';
105 | }
106 |
107 | for(i = 0; i < str1.length; i++){
108 | c = str1.charCodeAt(i);
109 | d = c.toString(radix);
110 |
111 | result[i] = (base + d).substr(-codelengthText);
112 | }
113 |
114 | r = result.join('');
115 |
116 | for(i = 0; i < radix; i++){
117 | r = r.replace(new RegExp(i, 'g'), chars[i]);
118 | }
119 |
120 | return r;
121 | };
122 | var encode_to_zerowidth_characters_binary = function(u8ary){
123 | var result = new Array(u8ary.length);
124 | var base = '';
125 | var i;
126 | var c;
127 | var d;
128 | var r;
129 |
130 | for(i = 0; i < codelengthBinary; i++){
131 | base += '0';
132 | }
133 |
134 | for(i = 0; i < u8ary.length; i++){
135 | d = u8ary[i].toString(radix);
136 | result[i] = (base + d).substr(-codelengthBinary);
137 | }
138 |
139 | r = result.join('');
140 |
141 | for(i = 0; i < radix; i++){
142 | r = r.replace(new RegExp(i, 'g'), chars[i]);
143 | }
144 |
145 | return r;
146 | };
147 | var combine_shuffle_string = function(str1, str2, codelength){
148 | var result = [];
149 | var c0 = str1.split(/([\u0000-\u002F\u003A-\u0040\u005b-\u0060\u007b-\u007f])|([\u0030-\u0039]+)|([\u0041-\u005a\u0061-\u007a]+)|([\u0080-\u00FF]+)|([\u0100-\u017F]+)|([\u0180-\u024F]+)|([\u0250-\u02AF]+)|([\u02B0-\u02FF]+)|([\u0300-\u036F]+)|([\u0370-\u03FF]+)|([\u0400-\u04FF]+)|([\u0500-\u052F]+)|([\u0530-\u058F]+)|([\u0590-\u05FF]+)|([\u0600-\u06FF]+)|([\u0700-\u074F]+)|([\u0750-\u077F]+)|([\u0780-\u07BF]+)|([\u07C0-\u07FF]+)|([\u0800-\u083F]+)|([\u0840-\u085F]+)|([\u08A0-\u08FF]+)|([\u0900-\u097F]+)|([\u0980-\u09FF]+)|([\u0A00-\u0A7F]+)|([\u0A80-\u0AFF]+)|([\u0B00-\u0B7F]+)|([\u0B80-\u0BFF]+)|([\u0C00-\u0C7F]+)|([\u0C80-\u0CFF]+)|([\u0D00-\u0D7F]+)|([\u0D80-\u0DFF]+)|([\u0E00-\u0E7F]+)|([\u0E80-\u0EFF]+)|([\u0F00-\u0FFF]+)|([\u1000-\u109F]+)|([\u10A0-\u10FF]+)|([\u1100-\u11FF]+)|([\u1200-\u137F]+)|([\u1380-\u139F]+)|([\u13A0-\u13FF]+)|([\u1400-\u167F]+)|([\u1680-\u169F]+)|([\u16A0-\u16FF]+)|([\u1700-\u171F]+)|([\u1720-\u173F]+)|([\u1740-\u175F]+)|([\u1760-\u177F]+)|([\u1780-\u17FF]+)|([\u1800-\u18AF]+)|([\u18B0-\u18FF]+)|([\u1900-\u194F]+)|([\u1950-\u197F]+)|([\u1980-\u19DF]+)|([\u19E0-\u19FF]+)|([\u1A00-\u1A1F]+)|([\u1A20-\u1AAF]+)|([\u1AB0-\u1AFF]+)|([\u1B00-\u1B7F]+)|([\u1B80-\u1BBF]+)|([\u1BC0-\u1BFF]+)|([\u1C00-\u1C4F]+)|([\u1C50-\u1C7F]+)|([\u1CC0-\u1CCF]+)|([\u1CD0-\u1CFF]+)|([\u1D00-\u1D7F]+)|([\u1D80-\u1DBF]+)|([\u1DC0-\u1DFF]+)|([\u1E00-\u1EFF]+)|([\u1F00-\u1FFF]+)|([\u2000-\u206F]+)|([\u2070-\u209F]+)|([\u20A0-\u20CF]+)|([\u20D0-\u20FF]+)|([\u2100-\u214F]+)|([\u2150-\u218F]+)|([\u2190-\u21FF]+)|([\u2200-\u22FF]+)|([\u2300-\u23FF]+)|([\u2400-\u243F]+)|([\u2440-\u245F]+)|([\u2460-\u24FF]+)|([\u2500-\u257F]+)|([\u2580-\u259F]+)|([\u25A0-\u25FF]+)|([\u2600-\u26FF]+)|([\u2700-\u27BF]+)|([\u27C0-\u27EF]+)|([\u27F0-\u27FF]+)|([\u2800-\u28FF]+)|([\u2900-\u297F]+)|([\u2980-\u29FF]+)|([\u2A00-\u2AFF]+)|([\u2B00-\u2BFF]+)|([\u2C00-\u2C5F]+)|([\u2C60-\u2C7F]+)|([\u2C80-\u2CFF]+)|([\u2D00-\u2D2F]+)|([\u2D30-\u2D7F]+)|([\u2D80-\u2DDF]+)|([\u2DE0-\u2DFF]+)|([\u2E00-\u2E7F]+)|([\u2E80-\u2EFF]+)|([\u2F00-\u2FDF]+)|([\u2FF0-\u2FFF]+)|([\u3000-\u303F]+)|([\u3040-\u309F]+)|([\u30A0-\u30FF]+)|([\u3100-\u312F]+)|([\u3130-\u318F]+)|([\u3190-\u319F]+)|([\u31A0-\u31BF]+)|([\u31C0-\u31EF]+)|([\u31F0-\u31FF]+)|([\u3200-\u32FF]+)|([\u3300-\u33FF]+)|([\u3400-\u4DBF]+)|([\u4DC0-\u4DFF]+)|([\u4E00-\u9FFF]+)|([\uA000-\uA48F]+)|([\uA490-\uA4CF]+)|([\uA4D0-\uA4FF]+)|([\uA500-\uA63F]+)|([\uA640-\uA69F]+)|([\uA6A0-\uA6FF]+)|([\uA700-\uA71F]+)|([\uA720-\uA7FF]+)|([\uA800-\uA82F]+)|([\uA830-\uA83F]+)|([\uA840-\uA87F]+)|([\uA880-\uA8DF]+)|([\uA8E0-\uA8FF]+)|([\uA900-\uA92F]+)|([\uA930-\uA95F]+)|([\uA960-\uA97F]+)|([\uA980-\uA9DF]+)|([\uA9E0-\uA9FF]+)|([\uAA00-\uAA5F]+)|([\uAA60-\uAA7F]+)|([\uAA80-\uAADF]+)|([\uAAE0-\uAAFF]+)|([\uAB00-\uAB2F]+)|([\uAB30-\uAB6F]+)|([\uAB70-\uABBF]+)|([\uABC0-\uABFF]+)|([\uAC00-\uD7AF]+)|([\uD7B0-\uD7FF]+)|([\uD800-\uDFFF]+)|([\uE000-\uF8FF]+)|([\uF900-\uFAFF]+)|([\uFB00-\uFB4F]+)|([\uFB50-\uFDFF]+)|([\uFE00-\uFE0F]+)|([\uFE10-\uFE1F]+)|([\uFE20-\uFE2F]+)|([\uFE30-\uFE4F]+)|([\uFE50-\uFE6F]+)|([\uFE70-\uFEFF]+)|([\uFF00-\uFFEF]+)|([\uFFF0-\uFFFF]+)/g);
150 | var c1 = [];
151 | var i;
152 | var j;
153 | for(i = 0; i < c0.length; i++){
154 | if((typeof c0[i] !== 'undefined') && (c0[i] !== '')){
155 | c1.push(c0[i]);
156 | }
157 | }
158 | var c2 = str2.split(new RegExp('(.{' + codelength + '})', 'g'));
159 | var ratio = c1.length / (c1.length + c2.length);
160 |
161 | /* slow
162 | while((c1.length > 0) && (c2.length > 0)){
163 | if(Math.random() <= ratio){
164 | result.push(c1.shift());
165 | }else{
166 | result.push(c2.shift());
167 | }
168 | }*/
169 | i = 0;
170 | j = 0;
171 | while((i < c1.length) && (j < c2.length)){
172 | if(Math.random() <= ratio){
173 | result.push(c1[i]);
174 | i++;
175 | }else{
176 | result.push(c2[j]);
177 | j++;
178 | }
179 | }
180 | c1 = c1.slice(i);
181 | c2 = c2.slice(j);
182 |
183 | result = result.concat(c1).concat(c2);
184 |
185 | return result.join('');
186 | };
187 | var split_zerowidth_characters = function(str1){
188 | var result = {};
189 | result.originalText = str1.replace(new RegExp('[' + chars.join('') + ']', 'g'), '');
190 | result.hiddenText = str1.replace(new RegExp('[^' + chars.join('') + ']', 'g'), '');
191 |
192 | return result;
193 | };
194 | var decode_from_zero_width_characters_text = function(str1){
195 | var r = str1;
196 | var i;
197 | var result = [];
198 | for(i = 0; i < radix; i++){
199 | r = r.replace(new RegExp(chars[i], 'g'), i);
200 | }
201 | for(i = 0; i < r.length; i += codelengthText){
202 | result.push(String.fromCharCode(parseInt(r.substr(i, codelengthText), radix)));
203 | }
204 |
205 | return result.join('');
206 | };
207 | var decode_from_zero_width_characters_binary = function(str1){
208 | var r = str1;
209 | var i;
210 | var j;
211 | var result = new Uint8Array(Math.ceil(str1.length / codelengthBinary));
212 |
213 | for(i = 0; i < radix; i++){
214 | r = r.replace(new RegExp(chars[i], 'g'), i);
215 | }
216 | for(i = 0, j = 0; i < r.length; i += codelengthBinary, j++){
217 | result[j] = parseInt(r.substr(i, codelengthBinary), radix);
218 | }
219 |
220 | return result;
221 | };
222 |
223 | return null;
224 | })(this);
225 |
--------------------------------------------------------------------------------
/unicode_steganography_gadget.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
6 |
7 |
14 |
15 |
16 | Unicode Steganography with Zero-Width Characters
17 |
22 |
23 |
24 |