CTF Crypto » 履歴 » バージョン 1
kanata, 2025/04/13 14:35
ファイルに含まれるbase64部分を抽出・デコードしてファイルに保存するツール
| 1 | 1 | kanata | # CTF Crypto |
|---|---|---|---|
| 2 | |||
| 3 | {{rawhtml(<canvas id="map"></canvas><script src="/javascripts/pagemap.min.js"></script><script>pagemap(document.querySelector("#map"));</script>)}} |
||
| 4 | |||
| 5 | {{toc}} |
||
| 6 | |||
| 7 | # これを読む |
||
| 8 | |||
| 9 | ふるつき - CTF crypto 逆引き |
||
| 10 | https://furutsuki.hatenablog.com/entry/2021/03/16/095021 |
||
| 11 | |||
| 12 | ₍₍ (ง ˘ω˘ )ว ⁾⁾ < 暗号楽しいです |
||
| 13 | http://elliptic-shiho.hatenablog.com/ |
||
| 14 | |||
| 15 | # 神本(無料) |
||
| 16 | |||
| 17 | 『クラウドを支えるこれからの暗号技術』 |
||
| 18 | http://herumi.github.io/ango/ |
||
| 19 | |||
| 20 | # 神ツール |
||
| 21 | |||
| 22 | あらゆるフォーマットのエンコード・デコード・暗号化・復号化ができる |
||
| 23 | |||
| 24 | CyberChef |
||
| 25 | https://gchq.github.io/CyberChef/ |
||
| 26 | |||
| 27 | |||
| 28 | # Command gadgets |
||
| 29 | |||
| 30 | - 文字列操作でニッチなコマンド |
||
| 31 | |||
| 32 | rev tac |
||
| 33 | |||
| 34 | ## xxd |
||
| 35 | |||
| 36 | 指定のファイル(file.txt)を16進数表記にして、その結果を出力する。 |
||
| 37 | |||
| 38 | ``` |
||
| 39 | xxd file.txt |
||
| 40 | ``` |
||
| 41 | |||
| 42 | 上のコマンドで16進数表記にしたファイル(file.hex)を元に戻して、その結果を出力する。 |
||
| 43 | |||
| 44 | ``` |
||
| 45 | xxd -r file.hex |
||
| 46 | ``` |
||
| 47 | |||
| 48 | 2進数表記でも出力することができます。 |
||
| 49 | |||
| 50 | ``` |
||
| 51 | xxd -b file.hex |
||
| 52 | ``` |
||
| 53 | |||
| 54 | 文字列を16進数に変換する |
||
| 55 | |||
| 56 | ``` |
||
| 57 | echo "targetStr" | xxd -ps |
||
| 58 | ``` |
||
| 59 | |||
| 60 | 16進数を文字列に変換する |
||
| 61 | |||
| 62 | ``` |
||
| 63 | echo "targetStr" | xxd -ps -r |
||
| 64 | ``` |
||
| 65 | |||
| 66 | xxd -p(-psでも可)でバイナリ→16進文字列、xxd -r -pでバイナリ文字列→バイナリに変換できます。 |
||
| 67 | |||
| 68 | |||
| 69 | ## bc |
||
| 70 | |||
| 71 | bc コマンドをつかうと、16進(任意の基数)での計算ができます |
||
| 72 | |||
| 73 | ``` |
||
| 74 | $ echo "obase=10;ibase=16;FF00+FF" | bc |
||
| 75 | 65535 |
||
| 76 | $ echo "obase=16;ibase=16;100*100*100-1" | bc |
||
| 77 | FFFFFF |
||
| 78 | $ echo "obase=2;ibase=16;F0-1" | bc |
||
| 79 | 11101111 |
||
| 80 | ``` |
||
| 81 | |||
| 82 | ## bashでアルファベット順にn文字ずらした文字列を得る |
||
| 83 | |||
| 84 | 例えば |
||
| 85 | 1文字ずらしだとhello→ifmmp |
||
| 86 | 2文字ずらしだとhello→jgnnq |
||
| 87 | みたいな感じ |
||
| 88 | 1文字ずらしなら |
||
| 89 | |||
| 90 | ``` |
||
| 91 | echo "hello" | tr '[a-z]' '[b-za-a]' |
||
| 92 | ``` |
||
| 93 | |||
| 94 | 2文字ずらしなら |
||
| 95 | |||
| 96 | ``` |
||
| 97 | echo "hello" | tr '[a-z]' '[c-za-b]' |
||
| 98 | ``` |
||
| 99 | |||
| 100 | ## 文字列⇔16進数表現⇔2進数表現 |
||
| 101 | |||
| 102 | 文字列→16進数表現 |
||
| 103 | |||
| 104 | ``` |
||
| 105 | echo "ABC"|xxd |
||
| 106 | ``` |
||
| 107 | |||
| 108 | 文字列→2進数表現 |
||
| 109 | |||
| 110 | ``` |
||
| 111 | echo "ABC"|xxd -b |
||
| 112 | ``` |
||
| 113 | |||
| 114 | 16進数表現→文字列 |
||
| 115 | |||
| 116 | ``` |
||
| 117 | echo 4142434445464748 | xxd -ps -r |
||
| 118 | ``` |
||
| 119 | |||
| 120 | 16進数表現→2進数表現 |
||
| 121 | |||
| 122 | ``` |
||
| 123 | echo 4142434445 | xxd -ps -r|xxd -b |
||
| 124 | ``` |
||
| 125 | |||
| 126 | 2進数表現→16進数表現 |
||
| 127 | |||
| 128 | ``` |
||
| 129 | echo "obase=16; ibase=2; 010000010100001001000011010001000100010100001010" | bc |
||
| 130 | ``` |
||
| 131 | |||
| 132 | 2進数表現→文字列 |
||
| 133 | |||
| 134 | ``` |
||
| 135 | echo "obase=16; ibase=2; 010000010100001001000011010001000100010100001010" | bc|xxd -ps -r |
||
| 136 | ``` |
||
| 137 | |||
| 138 | ## シェルスクリプト - 文字と数値の相互変換 |
||
| 139 | |||
| 140 | ``` |
||
| 141 | #!/bin/sh |
||
| 142 | |||
| 143 | CHAR_ASCII=$1 |
||
| 144 | CHAR_DIGIT=`printf "%d" \'$1` |
||
| 145 | |||
| 146 | CHAR_DIGIT=`expr ${CHAR_DIGIT} + 1` |
||
| 147 | |||
| 148 | printf "%b\n" $(printf '%s%x' '\x' ${CHAR_DIGIT}) |
||
| 149 | ``` |
||
| 150 | |||
| 151 | ## 10000 までの素数を出力するシェルスクリプト |
||
| 152 | |||
| 153 | ``` |
||
| 154 | seq 2 1000 | factor | awk 'NF==2{print $2}' |
||
| 155 | ``` |
||
| 156 | |||
| 157 | ## 文字列を任意の値でXORするシェルスクリプト |
||
| 158 | |||
| 159 | ``` |
||
| 160 | #!/bin/sh |
||
| 161 | |||
| 162 | LIST=`echo $1|fold -s1` |
||
| 163 | |||
| 164 | for WORD in ${LIST} |
||
| 165 | do |
||
| 166 | |||
| 167 | # setting |
||
| 168 | CHAR_ASCII=$WORD |
||
| 169 | CHAR_DIGIT=`printf "%d" \'$CHAR_ASCII` |
||
| 170 | |||
| 171 | #XOR_CHAR_ASCII=$2 |
||
| 172 | #XOR_CHAR_DIGIT=`printf "%d" \'$XOR_CHAR_ASCII` |
||
| 173 | XOR_CHAR_DIGIT=0x01 |
||
| 174 | |||
| 175 | # proccesing |
||
| 176 | CHAR_DIGIT=`echo $(( ${CHAR_DIGIT} ^ ${XOR_CHAR_DIGIT} ))` |
||
| 177 | printf "%b" $(printf '%s%x' '\x' ${CHAR_DIGIT}) |
||
| 178 | |||
| 179 | done |
||
| 180 | |||
| 181 | echo |
||
| 182 | |||
| 183 | exit 0 |
||
| 184 | ``` |
||
| 185 | |||
| 186 | ## XORSearch |
||
| 187 | |||
| 188 | http://blog.didierstevens.com/programs/xorsearch/ http://www.aldeid.com/wiki/XORSearch |
||
| 189 | |||
| 190 | ファイルをXORでブルートフォース。 |
||
| 191 | |||
| 192 | ``` |
||
| 193 | $ ./xorsearch -i /data/tmp/getdown.exe http: |
||
| 194 | Found XOR 83 position 1800: http://1.234.27.146/pcfix.exe |
||
| 195 | ``` |
||
| 196 | |||
| 197 | ファイルをXORでブルートフォース。ヒットした値をファイルとして保存する。 |
||
| 198 | |||
| 199 | ``` |
||
| 200 | $ ./xorsearch -i -s /data/tmp/getdown.exe http: |
||
| 201 | Found XOR 83 position 1800: http://1.234.27.146/pcfix.exe |
||
| 202 | $ strings /data/tmp/getdown.exe.XOR.83 |
||
| 203 | [SNIP] |
||
| 204 | http://1.234.27.146/pcfix.exe |
||
| 205 | affid=23456732-34459 |
||
| 206 | [SNIP] |
||
| 207 | ``` |
||
| 208 | |||
| 209 | ## XORStrings |
||
| 210 | |||
| 211 | http://blog.didierstevens.com/programs/xorsearch/ |
||
| 212 | |||
| 213 | XORでブルートフォースした時のASCII文字の分布を表示する。 |
||
| 214 | |||
| 215 | ``` |
||
| 216 | ./XORStrings a.out |
||
| 217 | ``` |
||
| 218 | |||
| 219 | XORでブルートフォースした時のASCII文字の分布を表示する。ついでに、検出した長い文字順にソート。一番長い文字列を出力する。 |
||
| 220 | |||
| 221 | ``` |
||
| 222 | ./XORStrings -m -d a.out |
||
| 223 | ``` |
||
| 224 | |||
| 225 | |||
| 226 | # Base N encoding |
||
| 227 | |||
| 228 | | 方式 | 使用される文字 | 参考 | |
||
| 229 | |--------|------------------------------------------------------|------| |
||
| 230 | | Base16 | 0123456789ABCDEF | [RFC4648](http://www5d.biglobe.ne.jp/stssk/rfc/rfc4648j.html) |
||
| 231 | | Base26 | ABCDEFGHIJKLMNOPQRSTUVWXYZ | |
||
| 232 | | Base32 | ABCDEFGHIJKLMNOPQRSTUVWXYZ234567 or 0123456789ABCDEFGHJKMNPQRSTVWXYZ | [RFC4648](http://www5d.biglobe.ne.jp/stssk/rfc/rfc4648j.html) |
||
| 233 | | Base36 | ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 | |
||
| 234 | | Base52 | ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz | |
||
| 235 | | Base58 | 123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz | Bitcoinに利用 |
||
| 236 | | Base62 | ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 | JavaScriptの難読化等 |
||
| 237 | | Base64 | ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ | [RFC4648](http://www5d.biglobe.ne.jp/stssk/rfc/rfc4648j.html) |
||
| 238 | | Base85(ASCII85) | ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!#$%&()*+.... [85種類の文字記号](http://welovy.hatenablog.com/entry/2012/11/22/162959) | AdobeのPostScriptやPDFファイルで利用 |
||
| 239 | | Base91 | ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!#$%&()*+.... [91種類の文字記号](http://base91.sourceforge.net/) | SECCON CTF 2013 オンライン予選で出題 |
||
| 240 | | Base92 | ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!#$%&()*+.... [92種類の文字記号](https://github.com/thenoviceoof/base92) | |
||
| 241 | | Base94 | ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!#$%&()*+.... [94種類の文字記号](https://gist.github.com/iso2022jp/4054241) | |
||
| 242 | | Base95 | ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!#$%&()*+.... [95種類の文字記号](http://www.icerealm.org/FTR/?s=docs&p=base95) | |
||
| 243 | | Base122 | UTF-8のテキスト変換方式 | [エンコード方式 base-122](http://postd.cc/base122/) |
||
| 244 | | base65536 | Unicodeの中から65536文字 | [github ferno/base65536](https://github.com/ferno/base65536) |
||
| 245 | |||
| 246 | ## ファイルに含まれるbase64部分を抽出・デコードしてファイルに保存するツール |
||
| 247 | |||
| 248 | 自作ツール。python2系。CentOSで動作確認済み。 |
||
| 249 | |||
| 250 | attachment:base64_extraction.py |
||
| 251 | |||
| 252 | ~~~python |
||
| 253 | #!/usr/bin/env python |
||
| 254 | # -*- coding: utf-8 -*- |
||
| 255 | |||
| 256 | # base64_extraction.sh ver 0.2 |
||
| 257 | # 引数のファイルに含まれるbase64部分を抽出・デコードしてファイルに保存する |
||
| 258 | # 第一引数… 入力フィル名 |
||
| 259 | # 第二引数… 指定した数値より短い文字列はBase64の変換対象にしない(default 16) |
||
| 260 | # 2016.08.06 kanata |
||
| 261 | |||
| 262 | import os |
||
| 263 | import sys |
||
| 264 | import base64 |
||
| 265 | import commands |
||
| 266 | import traceback |
||
| 267 | |||
| 268 | def write_decorded_base64(decodeed_base64,out_file_base,file_offset): |
||
| 269 | try : |
||
| 270 | file_content=base64.b64decode(decodeed_base64) |
||
| 271 | except : |
||
| 272 | #print "Base64 error" |
||
| 273 | return(1) |
||
| 274 | file_name=out_file_base[0] + "_" +str(file_offset) |
||
| 275 | out_fd = open(file_name, 'w+') |
||
| 276 | out_fd.write(file_content) |
||
| 277 | out_fd.close() |
||
| 278 | analysis_file_type(file_name) |
||
| 279 | |||
| 280 | def analysis_file_type(file_name): |
||
| 281 | # detect filename extension & rename |
||
| 282 | if os.name == "posix": |
||
| 283 | file_extention=commands.getoutput("file -i "+file_name+"|awk -F'/' '{print $NF}'|awk '{print $1}'|awk -F'-' '{print $NF}'|tr -d ';'") |
||
| 284 | else: |
||
| 285 | file_extention="dat" |
||
| 286 | #print "Debug:"+file_extention |
||
| 287 | new_file_name = file_name+"."+file_extention |
||
| 288 | if os.path.exists(new_file_name): |
||
| 289 | os.remove(new_file_name) |
||
| 290 | os.rename(file_name, new_file_name) |
||
| 291 | print "\t"+new_file_name |
||
| 292 | return(0) |
||
| 293 | |||
| 294 | if __name__ == '__main__': |
||
| 295 | allow_decord_length=16 # The strings length shoter than this number. The strings not base64 target. |
||
| 296 | file_offset=0 |
||
| 297 | file_content="" |
||
| 298 | state_base64=False # True:in False:out |
||
| 299 | i=0 # counter |
||
| 300 | base64_length=0 # for chek allow_decord_length |
||
| 301 | |||
| 302 | if os.name != "posix": |
||
| 303 | print "[WARNING] I wonder this is not work encode for base64 by my windows7 enviroment. Please compare encoded file content by other ways." |
||
| 304 | |||
| 305 | if len(sys.argv) >= 2: |
||
| 306 | in_file=sys.argv[1] |
||
| 307 | out_file_base=os.path.splitext(os.path.basename(in_file)) |
||
| 308 | file_size=os.path.getsize(in_file) |
||
| 309 | else: |
||
| 310 | print "ex)"+sys.argv[0]+" [filename] [minimum base64 length]" |
||
| 311 | sys.exit(1) |
||
| 312 | |||
| 313 | if len(sys.argv) == 3 and sys.argv[2].isdigit(): |
||
| 314 | allow_decord_length=int(sys.argv[2]) |
||
| 315 | |||
| 316 | try : |
||
| 317 | in_fd = open(in_file,'rb') |
||
| 318 | except : |
||
| 319 | print "file error" |
||
| 320 | |||
| 321 | while 1 : |
||
| 322 | b = in_fd.read(1) |
||
| 323 | |||
| 324 | if b in "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" : # base64対象文字列 |
||
| 325 | state_base64=True |
||
| 326 | file_content = file_content + b |
||
| 327 | base64_length=base64_length + 1 |
||
| 328 | elif b in "=": |
||
| 329 | file_content = file_content + b |
||
| 330 | elif b in "\n\r": |
||
| 331 | pass |
||
| 332 | elif b in "\\": |
||
| 333 | b = in_fd.read(1) |
||
| 334 | if b in "n": |
||
| 335 | pass |
||
| 336 | # TODO:2count \n are not pass |
||
| 337 | else: |
||
| 338 | if state_base64 and base64_length > allow_decord_length: |
||
| 339 | #print "Debug:"+file_content+" "+str(i) |
||
| 340 | # ファイル出力処理,ファイル命名処理 # |
||
| 341 | write_decorded_base64(file_content,out_file_base,i) |
||
| 342 | state_base64=False |
||
| 343 | file_content="" |
||
| 344 | base64_length=0 |
||
| 345 | else: |
||
| 346 | if state_base64 and base64_length > allow_decord_length: |
||
| 347 | #print "Debug:"+file_content+" "+str(i) |
||
| 348 | # ファイル出力処理,ファイル命名処理 # |
||
| 349 | write_decorded_base64(file_content,out_file_base,i) |
||
| 350 | state_base64=False |
||
| 351 | file_content="" |
||
| 352 | base64_length=0 |
||
| 353 | sys.stdout.write("\rchecking..."+str(i)+"/"+str(file_size)) |
||
| 354 | sys.stdout.flush() |
||
| 355 | i = i + 1 |
||
| 356 | |||
| 357 | if i > file_size: |
||
| 358 | break |
||
| 359 | in_fd.close() |
||
| 360 | sys.stdout.write("\r") |
||
| 361 | sys.stdout.flush() |
||
| 362 | |||
| 363 | ~~~ |
||
| 364 | |||
| 365 | |||
| 366 | # 目Crypto |
||
| 367 | |||
| 368 | | 暗号 | 特徴 | |
||
| 369 | |--------------|----------------------------------------------------------------------------| |
||
| 370 | | 圧縮ファイル | 頻度解析を行うと0x00~0xffの値はほぼ均一に 0.4%程度 |
||
| 371 | | シーザー暗号 | 意味不明な文字列かつ英数字以外の文字がそれなりに英語の文章っぽい |
||
| 372 | | ADFGV暗号 | ADFGVの文字が目立つ。ADFGVX?暗号は必ずマトリックスが必要 |
||
| 373 | | ADFGVX暗号 | ADFGV以外にXを含んでいるかどうか。ADFGVX?暗号は必ずマトリックスが必要 |
||
| 374 | | Vigenere暗号 | 大文字だけor小文字だけかつ特定のパターンを繰り返しているように見える |
||
| 375 | | ポリュビオスの暗号表 | 111523...のように2つの数値がペアになっているように見える数列(偶数長) 隣り合う数値で一意に変換可能なため、アルファベットに変換して換字式ソルバに流す |
||
| 376 | | ピッグペン暗号 | L,>,<,コ,ロみたいな記号が読み取れる [これ](http://www.yoshikoquilt.com/pigpen.html) |
||
| 377 | | ガラケーのキーパッド | 改行で区切られていてそれぞれの行に0-9の数値 |
||
| 378 | | Base64 | 大文字,小文字のアルファベットに加え,"_"と"/"の全部で64種類 |
||
| 379 | | Base32 | 大文字と数字と=しか存在しない |
||
| 380 | |||
| 381 | CTF的 覚えておくべき暗号・攻撃とその見分け方 @elliptic_shiho先生 |
||
| 382 | http://elliptic-shiho.xyz/slide/ctf-crypto-matome.pdf |
||
| 383 | |||
| 384 | |||
| 385 | |||
| 386 | # 古典暗号 |
||
| 387 | |||
| 388 | ## Portal |
||
| 389 | |||
| 390 | 換字式暗号の解読 |
||
| 391 | http://www.quipqiup.com/index.php http://www.blisstonia.com/software/WebDecrypto/index.php |
||
| 392 | http://rumkin.com/tools/cipher/cryptogram-solver.php |
||
| 393 | |||
| 394 | いろんな暗号デコーダのリンク一覧 |
||
| 395 | http://rumkin.com/tools/cipher/ |
||
| 396 | |||
| 397 | ## シーザー暗号 |
||
| 398 | |||
| 399 | シーザー暗号解読機 |
||
| 400 | http://virtualseries.web.fc2.com/decode/caesar.html |
||
| 401 | |||
| 402 | Geocaching Toolbox - Caesar cipher (ROT13) |
||
| 403 | http://www.geocachingtoolbox.com/index.php?lang=en&page=caesarCipher |
||
| 404 | |||
| 405 | 多言語シーザー暗号(Universal Caesar cipher) |
||
| 406 | http://anti.rosx.net/etc/tools/enc_caesar.php |
||
| 407 | |||
| 408 | ## ROT13 |
||
| 409 | |||
| 410 | ROT13 |
||
| 411 | https://www.kazamiya.net/rot13 |
||
| 412 | |||
| 413 | ワンラナーでも可能 |
||
| 414 | |||
| 415 | ``` |
||
| 416 | $ python -c "print \"ABC\".encode('rot13')" |
||
| 417 | $ echo ABC | tr A-Za-z N-ZA-Mn-za-m |
||
| 418 | $ echo ABC | nkf -r |
||
| 419 | $ nkf -r text.txt |
||
| 420 | ``` |
||
| 421 | |||
| 422 | ## ROT47 |
||
| 423 | |||
| 424 | [Wikipedia ROT47](https://ja.wikipedia.org/wiki/ROT13#ROT47) |
||
| 425 | |||
| 426 | >ROT47 はROT13の変種で、基本的なアルファベットだけではなく、数字や他の多くの記号も変換する。ROT47はローテートするのにA-Zの範囲だけではなく、ASCIIで定義された文字コードのうちより広い範囲を用いる。 |
||
| 427 | |||
| 428 | ``` |
||
| 429 | echo ABC | tr '!-~' 'P-~!-O' |
||
| 430 | ``` |
||
| 431 | |||
| 432 | Caesar cipher(ROT47を選択可能) |
||
| 433 | https://www.geocachingtoolbox.com/index.php?lang=en&page=caesarCipher |
||
| 434 | |||
| 435 | ## Vigenere暗号(ヴィジュネル暗号) |
||
| 436 | |||
| 437 | Vigenere Solver |
||
| 438 | http://www.guballa.de/vigenere-solver |
||
| 439 | |||
| 440 | Vigenere Ciphers |
||
| 441 | http://rumkin.com/tools/cipher/vigenere.php |
||
| 442 | |||
| 443 | The Black Chamber - Vigenère Cracking Tool |
||
| 444 | http://www.simonsingh.net/The_Black_Chamber/vigenere_cracking_tool.html |
||
| 445 | |||
| 446 | ヴィジュネル暗号解読(鍵数を5ずつ増やして試していくこと) |
||
| 447 | http://smurfoncrack.com/pygenere/pygenere.php |
||
| 448 | http://www.mygeocachingprofile.com/codebreaker.vigenerecipher.aspx |
||
| 449 | |||
| 450 | >大文字だけor小文字だけかつ特定のパターンを繰り返しているように見える? |
||
| 451 | |||
| 452 | CrypTool |
||
| 453 | https://www.cryptool.org/en/ |
||
| 454 | |||
| 455 | ### Autokey暗号 |
||
| 456 | |||
| 457 | Vigenere暗号の派生 |
||
| 458 | |||
| 459 | ₍₍ (ง ˘ω˘ )ว ⁾⁾ < 暗号楽しいです - 古典暗号 - Beaufort暗号とAutokey暗号 |
||
| 460 | http://elliptic-shiho.hatenablog.com/ |
||
| 461 | |||
| 462 | ### Beaufort暗号 |
||
| 463 | |||
| 464 | Vigenere暗号の派生 |
||
| 465 | |||
| 466 | ₍₍ (ง ˘ω˘ )ว ⁾⁾ < 暗号楽しいです - 古典暗号 - Beaufort暗号とAutokey暗号 |
||
| 467 | http://elliptic-shiho.hatenablog.com/ |
||
| 468 | |||
| 469 | ## スキュタレー暗号 |
||
| 470 | |||
| 471 | Scytale Cipher |
||
| 472 | http://www.dcode.fr/scytale-cipher |
||
| 473 | |||
| 474 | ## アフィン暗号 |
||
| 475 | |||
| 476 | アフィン暗号解読(ただ、文字数が十分にあれば、統計的推論が可能なので、 http://www.quipqiup.com で解ける) |
||
| 477 | http://rumkin.com/tools/cipher/affine.php http://www.dcode.fr/affine-cipher http://www.richkni.co.uk/php/crypta/affine.php |
||
| 478 | |||
| 479 | ## ADFGVX暗号 |
||
| 480 | |||
| 481 | ADFGVX encoder/decoder |
||
| 482 | http://www.grasoft.be/geotools/ADFGVX.htm |
||
| 483 | |||
| 484 | >ADFGVの文字が目立つならADFGV or ADFGVX暗号 |
||
| 485 | |||
| 486 | ## エニグマ暗号 |
||
| 487 | |||
| 488 | エニグマシミュレータ |
||
| 489 | http://enigmaco.de/enigma/enigma.html |
||
| 490 | |||
| 491 | ## アナグラム |
||
| 492 | |||
| 493 | 英語のアナグラムを作ってくれるWEBサービス |
||
| 494 | http://wordsmith.org/anagram/ |
||
| 495 | |||
| 496 | ## ポリュビオスの暗号表 |
||
| 497 | |||
| 498 | ポリュビオスの暗号表 |
||
| 499 | 隣り合う数値で一意に変換可能なため、アルファベットに変換して換字式ソルバに流す |
||
| 500 | |||
| 501 | >111523...のように2つの数値がペアになっているように見える数列(偶数長) |
||
| 502 | |||
| 503 | ## Merkle-Hellmanナップサック暗号 |
||
| 504 | |||
| 505 | Wikipedia - Merkle-Hellmanナップサック暗号 |
||
| 506 | https://ja.wikipedia.org/wiki/Merkle-Hellman%E3%83%8A%E3%83%83%E3%83%97%E3%82%B5%E3%83%83%E3%82%AF%E6%9A%97%E5%8F%B7 |
||
| 507 | |||
| 508 | |||
| 509 | |||
| 510 | |||
| 511 | |||
| 512 | # 最近の暗号 |
||
| 513 | |||
| 514 | ## 楕円暗号 |
||
| 515 | |||
| 516 | ## Paillier暗号 |
||
| 517 | |||
| 518 | |||
| 519 | |||
| 520 | |||
| 521 | |||
| 522 | |||
| 523 | # DES暗号 |
||
| 524 | |||
| 525 | 詳解 DES暗号化アルゴリズム |
||
| 526 | http://07c00.com/hj/des.txt |
||
| 527 | |||
| 528 | # AES暗号 |
||
| 529 | |||
| 530 | security etc... - Padding Oracle AttackによるCBC modeの暗号文解読と改ざん |
||
| 531 | http://rintaro.hateblo.jp/entry/2017/12/31/174327 |
||
| 532 | |||
| 533 | |||
| 534 | |||
| 535 | |||
| 536 | |||
| 537 | |||
| 538 | # RSA暗号 |
||
| 539 | |||
| 540 | ## 基礎的なこと |
||
| 541 | |||
| 542 | | openssl | 要素 | 説明 | |
||
| 543 | |---------------|------|--------------------------| |
||
| 544 | | | m | 平文(元のメッセージ) | |
||
| 545 | |prime1,prime2 | p,q | :十分大きい素数(p≠q) | |
||
| 546 | | modulus | n | = pq | |
||
| 547 | | | ϕ(n)| = euler(n) = (p−1)(q−1) | |
||
| 548 | |publicExponent | e | ϕ(n) 未満かつ e と ϕ(n) は互いに素(最大公約数が1)となるような自然数 | |
||
| 549 | |privateExponent| d | 1 mod ϕ(n) となるような自然数 | |
||
| 550 | |||
| 551 | **暗号化** |
||
| 552 | |||
| 553 | >元をe乗して、nで割った余り(mod n)が暗号文となる。つまりaが元ならば a^e mod n 。 |
||
| 554 | |||
| 555 | **復号** |
||
| 556 | |||
| 557 | >暗号文をd乗して、nで割った余り(mod n)がもとの値となる。つまりbが暗号文ならば b^d mod n 。 |
||
| 558 | |||
| 559 | --- |
||
| 560 | |||
| 561 | アリスがボブにメッセージ m を安全に送りたいとき |
||
| 562 | |||
| 563 | 1. ボブは素数 p,q と, (p−1)(q−1) と互いに素な自然数 e を用意して, n=pq,d を計算する. |
||
| 564 | 2. ボブは e,n を公開する. |
||
| 565 | 3. アリスは m に対して memodn を計算してボブに送信する. |
||
| 566 | 4. ここで第三者キャロルにアリスが送信した暗号文を盗み見られたとしても, d がわからないキャロルには暗号文を解読できない. |
||
| 567 | 5. 暗号文を受け取った ボブは秘密鍵 d を用いて m を復元してメッセージを読む. |
||
| 568 | |||
| 569 | n=pqだけど、nからpとqを求めるのは現実的に無理(巨大な素数の素因数分解)という仕組み。 |
||
| 570 | (鍵長が短ければ、pとqの算出が可能、40bitくらいだと解けちゃう。最近は2048bitの鍵長が一般的。) |
||
| 571 | |||
| 572 | ## opensslでの諸操作 |
||
| 573 | |||
| 574 | 2048bitの秘密鍵の作例 |
||
| 575 | |||
| 576 | ``` |
||
| 577 | $ openssl genrsa 2048 > private-key.pem |
||
| 578 | ``` |
||
| 579 | |||
| 580 | 秘密鍵の参照 |
||
| 581 | |||
| 582 | ``` |
||
| 583 | $ openssl rsa -text < private-key.pem |
||
| 584 | ``` |
||
| 585 | |||
| 586 | 公開鍵の作成 |
||
| 587 | |||
| 588 | ``` |
||
| 589 | $ openssl rsa -pubout < private-key.pem > public-key.pem |
||
| 590 | ``` |
||
| 591 | |||
| 592 | 公開鍵の参照 |
||
| 593 | |||
| 594 | ``` |
||
| 595 | $ openssl rsa -text -pubin < public-key.pem |
||
| 596 | ``` |
||
| 597 | |||
| 598 | 暗号化 |
||
| 599 | |||
| 600 | ``` |
||
| 601 | $ echo "HELLO" | openssl rsautl -encrypt -pubin -inkey public-key.pem > message |
||
| 602 | ``` |
||
| 603 | |||
| 604 | 復号化 |
||
| 605 | |||
| 606 | ``` |
||
| 607 | $ cat message | openssl rsautl -decrypt -inkey private-key.pem |
||
| 608 | ``` |
||
| 609 | |||
| 610 | ## RSA暗号運用でやってはいけない n のこと |
||
| 611 | |||
| 612 | {{rawhtml(<iframe src="//www.slideshare.net/slideshow/embed_code/key/lbz9qv6fKMyDQS" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/sonickun/rsa-n-ssmjp" title="RSA暗号運用でやってはいけない n のこと #ssmjp" target="_blank">RSA暗号運用でやってはいけない n のこと #ssmjp</a> </strong> from <strong><a href="https://www.slideshare.net/sonickun" target="_blank">sonickun</a></strong> </div>)}} |
||
| 613 | |||
| 614 | ## Wiener's Attack / Boneh-Durfee's low private exponent Attack |
||
| 615 | |||
| 616 | 細かい数学の世界の説明は、苦手なので省略する。 |
||
| 617 | 要は、RSA公開鍵は |
||
| 618 | |||
| 619 | * n(2つの素数の積:Modulus) |
||
| 620 | * e(publicExponent) |
||
| 621 | |||
| 622 | という2つの要素があって、このeがやたらと大きいと(通常は、60000とかそんなオーダー)なぜかRSA暗号は破られる。 |
||
| 623 | これを解説している日本語サイトってたぶん無いんだよね。。 |
||
| 624 | |||
| 625 | opensslで、nからeが求められる(nはPEM形式である必要がある) |
||
| 626 | |||
| 627 | ``` |
||
| 628 | $ cat warmup-c6aa398e4f3e72bc2ea2742ae528ed79.pub |
||
| 629 | -----BEGIN PUBLIC KEY----- |
||
| 630 | MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAQEDZxmNa1YU6VgTrdjyKkcX |
||
| 631 | vHK+HqvZM9G4aUT9t1uO0jC+YtfRtp0iIJXBKMhvggEuyxFhkf2dAYptAvhNsnvF |
||
| 632 | GiEwfchvS/dxxpHBQ+Wr5Um1vS1usaIf1icOfhtI/gYR+7LhsLNSTm9N6LTko0Xa |
||
| 633 | RKE96CW3JgjbbHxKQLeCZubIe7/e9rSDgdScRQeli81Ht21ktFkIsVi9frxNrLCx |
||
| 634 | z9bCwZV09A6y79Dp4Q3HAFytObyvUrnqw4czaNaQMcXnJGhKRPBo79HT3Altm11k |
||
| 635 | EeWL3uQ+RrmaDQSUudsoGVr5Aa/xMNSm4gPa0I2lf6fkAmKlutsqMj7aKLRGlqsw |
||
| 636 | XQKCAQEA85Wdl44C658G3vPzNdj4r9dgmVHdrGC3FLbCKvD6kS8hCzQga9JKlgHH |
||
| 637 | jfSgJ18Qf9OrVS2VBX65NOcb3c1wRcJLGFh7jI/PWt1MXYPwx3yU3JxQy+Q44rZ7 |
||
| 638 | r9MWM7aq8XgdkMOtbwPQN7MyGAGyNUbUg+Z+JgZ/eyI0fdvAwtWSzoFMv138zBQU |
||
| 639 | N/FOCzmQ+IBh5fC65fAeP6cNsOlgXnz9V16cge/uxSnDP9kDeiD9is1ROsljd2gx |
||
| 640 | PmP5g4rjURzdCporUW8hSMjUdaNgoGNZRJc57s0lGrtCsBRXPkOfL6RXNVeyVpn/ |
||
| 641 | wR5jHOjul1qG5+JyvPX3apNFA0j+Pw== |
||
| 642 | -----END PUBLIC KEY----- |
||
| 643 | $ cat warmup-c6aa398e4f3e72bc2ea2742ae528ed79.pub |
||
| 644 | Public-Key: (2050 bit) |
||
| 645 | Modulus: |
||
| 646 | 03:67:19:8d:6b:56:14:e9:58:13:ad:d8:f2:2a:47: |
||
| 647 | 17:bc:72:be:1e:ab:d9:33:d1:b8:69:44:fd:b7:5b: |
||
| 648 | 8e:d2:30:be:62:d7:d1:b6:9d:22:20:95:c1:28:c8: |
||
| 649 | 6f:82:01:2e:cb:11:61:91:fd:9d:01:8a:6d:02:f8: |
||
| 650 | 4d:b2:7b:c5:1a:21:30:7d:c8:6f:4b:f7:71:c6:91: |
||
| 651 | c1:43:e5:ab:e5:49:b5:bd:2d:6e:b1:a2:1f:d6:27: |
||
| 652 | 0e:7e:1b:48:fe:06:11:fb:b2:e1:b0:b3:52:4e:6f: |
||
| 653 | 4d:e8:b4:e4:a3:45:da:44:a1:3d:e8:25:b7:26:08: |
||
| 654 | db:6c:7c:4a:40:b7:82:66:e6:c8:7b:bf:de:f6:b4: |
||
| 655 | 83:81:d4:9c:45:07:a5:8b:cd:47:b7:6d:64:b4:59: |
||
| 656 | 08:b1:58:bd:7e:bc:4d:ac:b0:b1:cf:d6:c2:c1:95: |
||
| 657 | 74:f4:0e:b2:ef:d0:e9:e1:0d:c7:00:5c:ad:39:bc: |
||
| 658 | af:52:b9:ea:c3:87:33:68:d6:90:31:c5:e7:24:68: |
||
| 659 | 4a:44:f0:68:ef:d1:d3:dc:09:6d:9b:5d:64:11:e5: |
||
| 660 | 8b:de:e4:3e:46:b9:9a:0d:04:94:b9:db:28:19:5a: |
||
| 661 | f9:01:af:f1:30:d4:a6:e2:03:da:d0:8d:a5:7f:a7: |
||
| 662 | e4:02:62:a5:ba:db:2a:32:3e:da:28:b4:46:96:ab: |
||
| 663 | 30:5d |
||
| 664 | Exponent: |
||
| 665 | 00:f3:95:9d:97:8e:02:eb:9f:06:de:f3:f3:35:d8: |
||
| 666 | f8:af:d7:60:99:51:dd:ac:60:b7:14:b6:c2:2a:f0: |
||
| 667 | fa:91:2f:21:0b:34:20:6b:d2:4a:96:01:c7:8d:f4: |
||
| 668 | a0:27:5f:10:7f:d3:ab:55:2d:95:05:7e:b9:34:e7: |
||
| 669 | 1b:dd:cd:70:45:c2:4b:18:58:7b:8c:8f:cf:5a:dd: |
||
| 670 | 4c:5d:83:f0:c7:7c:94:dc:9c:50:cb:e4:38:e2:b6: |
||
| 671 | 7b:af:d3:16:33:b6:aa:f1:78:1d:90:c3:ad:6f:03: |
||
| 672 | d0:37:b3:32:18:01:b2:35:46:d4:83:e6:7e:26:06: |
||
| 673 | 7f:7b:22:34:7d:db:c0:c2:d5:92:ce:81:4c:bf:5d: |
||
| 674 | fc:cc:14:14:37:f1:4e:0b:39:90:f8:80:61:e5:f0: |
||
| 675 | ba:e5:f0:1e:3f:a7:0d:b0:e9:60:5e:7c:fd:57:5e: |
||
| 676 | 9c:81:ef:ee:c5:29:c3:3f:d9:03:7a:20:fd:8a:cd: |
||
| 677 | 51:3a:c9:63:77:68:31:3e:63:f9:83:8a:e3:51:1c: |
||
| 678 | dd:0a:9a:2b:51:6f:21:48:c8:d4:75:a3:60:a0:63: |
||
| 679 | 59:44:97:39:ee:cd:25:1a:bb:42:b0:14:57:3e:43: |
||
| 680 | 9f:2f:a4:57:35:57:b2:56:99:ff:c1:1e:63:1c:e8: |
||
| 681 | ee:97:5a:86:e7:e2:72:bc:f5:f7:6a:93:45:03:48: |
||
| 682 | fe:3f |
||
| 683 | $ |
||
| 684 | ``` |
||
| 685 | |||
| 686 | eが異様に大きかったら、nとeからd(秘密鍵?)が求められる。 |
||
| 687 | これを解くpythonスクリプトが公開されてる(参考を参照) |
||
| 688 | |||
| 689 | c,d,nが判れば、cから平文を複合できる。 |
||
| 690 | pythonだと |
||
| 691 | |||
| 692 | ```python |
||
| 693 | pow(c, d, n) |
||
| 694 | print("%0512x" %m).decode("hex") |
||
| 695 | ``` |
||
| 696 | |||
| 697 | でいける。 |
||
| 698 | |||
| 699 | ---- |
||
| 700 | 参考 ₍₍ (ง ˘ω˘ )ว ⁾⁾ < 暗号楽しいです - 公開鍵暗号 - RSA - Wiener's Attack |
||
| 701 | http://elliptic-shiho.hatenablog.com/entry/2015/12/18/205804 |
||
| 702 | |||
| 703 | ## weak rsa |
||
| 704 | |||
| 705 | 768bitであればweak rsaと呼ばれている素因数分解に成功しているものなので適当に探すだけで解けたりする |
||
| 706 | |||
| 707 | 320bitだったりするとゴリ押しできる |
||
| 708 | > msieveを使って、1.5h程度(corei7+32Gとかリソースを使えば) |
||
| 709 | |||
| 710 | ## Common Modulus Attack |
||
| 711 | |||
| 712 | 前提 |
||
| 713 | |||
| 714 | * 複数のデータセットが与えられている |
||
| 715 | * 中でもeがそれぞれ違うけどもnが全部同じ時 |
||
| 716 | |||
| 717 | ₍₍ (ง ˘ω˘ )ว ⁾⁾ < 暗号楽しいです - 公開鍵暗号 RSA - Common Modulus Attack, 秘密鍵からの素因数分解 |
||
| 718 | http://elliptic-shiho.hatenablog.com/entry/2015/12/14/043745 |
||
| 719 | |||
| 720 | ## Common Private Exponent Attack |
||
| 721 | |||
| 722 | dが共通で、n, eが異なる際に使用できる攻撃。 |
||
| 723 | |||
| 724 | ## Hastad's Broadcast Attack |
||
| 725 | |||
| 726 | 前提 |
||
| 727 | |||
| 728 | * 複数のデータセットが与えられている |
||
| 729 | * データセットの中でも全てのeが同じ、かつデータセットの数 = e |
||
| 730 | |||
| 731 | ## Franklin-Reiter Related Message Attack |
||
| 732 | |||
| 733 | 前提 |
||
| 734 | |||
| 735 | * enc(m)とenc(m+1)が与えられる |
||
| 736 | * e, nが同じかつenc(m)とenc(am+b)が与えられている時 |
||
| 737 | |||
| 738 | ## Coppersmith's short pad Attack |
||
| 739 | |||
| 740 | そもそも、数式をここに表現できないww |
||
| 741 | |||
| 742 | Wikipedia - Coppersmith's Attack |
||
| 743 | https://en.wikipedia.org/wiki/Coppersmith's_Attack |
||
| 744 | |||
| 745 | ₍₍ (ง ˘ω˘ )ว ⁾⁾ < 暗号楽しいです - 公開鍵暗号 - RSA - 基礎 -> Coppersmith's short pad Attack |
||
| 746 | http://elliptic-shiho.hatenablog.com/entry/2015/11/12/182219 |
||
| 747 | |||
| 748 | ムズ(><) |
||
| 749 | |||
| 750 | ## Partial-key exposure Attack / High-bit known Attack |
||
| 751 | |||
| 752 | pの上位ビットの一部が判明している時、その一部のpを p˜ と書く。この時、|p˜−p|<N^1/4 が成立するならば、元のpを復元することができる。 Coppersmithの定理、Howgrave-Grahamの定理を使用する。 |
||
| 753 | |||
| 754 | ムズ(><) |
||
| 755 | |||
| 756 | ## factordb.com |
||
| 757 | |||
| 758 | 素数のデータベース(素因数分解してくれる!) |
||
| 759 | http://www.factordb.com/ |
||
| 760 | |||
| 761 | |||
| 762 | ## 参考 |
||
| 763 | |||
| 764 | ₍₍ (ง ˘ω˘ )ว ⁾⁾ < 暗号楽しいです - 公開鍵暗号 - RSA - 基礎 |
||
| 765 | http://elliptic-shiho.hatenablog.com/entry/2015/11/12/182219 |
||
| 766 | |||
| 767 | ろば電子が詰まっている - opensslでRSA暗号と遊ぶ |
||
| 768 | http://d.hatena.ne.jp/ozuma/20130510/1368114329 |
||
| 769 | |||
| 770 | sekai013's blog - RSA暗号について雑にまとめた |
||
| 771 | http://sekai013.hatenablog.com/entry/2015/04/04/193447 |
||
| 772 | |||
| 773 | A Python implementation of the Wiener attack on RSA public-key encryption scheme. |
||
| 774 | https://github.com/pablocelayes/rsa-wiener-attack |
||
| 775 | |||
| 776 | Capture the Swag - BCTF 2015 - warmup - Crypto Challenge |
||
| 777 | http://capturetheswag.blogspot.jp/2015/04/bctf-2015-warmup-crypto-challenge.html |
||
| 778 | |||
| 779 | 詳解 RSA暗号化アルゴリズム |
||
| 780 | http://ruffnex.oc.to/kenji/xrea/rsa.txt |
||
| 781 | |||
| 782 | ius/rsatool |
||
| 783 | https://github.com/ius/rsatool |
||
| 784 | |||
| 785 | ももいろテクノロジー - PythonでPEM形式のRSA鍵を生成する方法のメモ |
||
| 786 | http://inaz2.hatenablog.com/entry/2016/02/11/162837 |
||
| 787 | |||
| 788 | sonickun.log - BKPCTFのRSA暗号問題を解く |
||
| 789 | http://sonickun.hatenablog.com/entry/2016/03/23/220652 |
||
| 790 | |||
| 791 | 第0回 RSAへのAttack ~RSAってなに~ |
||
| 792 | https://falconctf.hatenablog.com/entry/2019/09/30/212910 |
||
| 793 | |||
| 794 | |||
| 795 | |||
| 796 | |||
| 797 | |||
| 798 | |||
| 799 | |||
| 800 | # Hash |
||
| 801 | |||
| 802 | ## ハッシュ逆変換 |
||
| 803 | |||
| 804 | CrackStation |
||
| 805 | https://crackstation.net/ |
||
| 806 | |||
| 807 | MD5 decryption |
||
| 808 | http://md5decryption.com/ |
||
| 809 | |||
| 810 | MD5逆変換 |
||
| 811 | http://www.kiyori.co.jp/md5reverse/ |
||
| 812 | |||
| 813 | MD5,SHA1逆変換 |
||
| 814 | http://md5.rednoize.com/ |
||
| 815 | |||
| 816 | MD5 SHA1 NTLM オンラインデータベース |
||
| 817 | http://www.hashkiller.co.uk/ |
||
| 818 | |||
| 819 | Reverse MD5/SHA1 hash |
||
| 820 | https://isc.sans.edu/tools/reversehash.html |
||
| 821 | |||
| 822 | AES DES RC4 Rabbit TripleDes の複合(鍵が必要) |
||
| 823 | http://icloud.sakura.ne.jp/encrypt.html |
||
| 824 | |||
| 825 | Online Hash Crack(メルアド要るので注意) |
||
| 826 | http://www.onlinehashcrack.com/ |
||
| 827 | |||
| 828 | sakurity(ハッシュの伸張攻撃 length-extension attack) |
||
| 829 | http://sakurity.com/lengthextension |
||
| 830 | |||
| 831 | ## ハッシュ衝突 - Hash collision |
||
| 832 | |||
| 833 | ここらへん、まだ実践したことない |
||
| 834 | |||
| 835 | Single-block collision for MD5 |
||
| 836 | https://marc-stevens.nl/research/md5-1block-collision/ |
||
| 837 | |||
| 838 | hashcat & oclHashcat |
||
| 839 | https://hashcat.net/hashcat/ [利用例1](https://github.com/praetorian-inc/Hob0Rules) [利用例2](http://inaz2.hatenablog.com/entry/2016/05/20/011353) |
||
| 840 | |||
| 841 | HashClash - MD5やSHA-1ハッシュ値を衝突させるツール |
||
| 842 | https://github.com/cr-marcstevens/hashclash |
||
| 843 | |||
| 844 | GitHub - Simple hash-mining c library and its python binding. - md5とsha1を高速(標準ライブラリの少なくとも100倍速)に探索するpythonライブラリ |
||
| 845 | https://github.com/kmyk/libproofofwork |
||
| 846 | |||
| 847 | |||
| 848 | |||
| 849 | |||
| 850 | # デコード |
||
| 851 | |||
| 852 | データ変換ツール(BASE64, URLエンコード, HEX(16進ダンプ) |
||
| 853 | http://hogehoge.tk/tool/ |
||
| 854 | |||
| 855 | 文字列ジェネレーター(Base64,ROT13,CRC32,MIME,HTML,URL,Unicode) |
||
| 856 | http://lazesoftware.com/tool/strgen/ |
||
| 857 | |||
| 858 | base64 Decoder |
||
| 859 | https://isc.sans.edu/tools/base64.html |
||
| 860 | |||
| 861 | URLエンコード、デコードのワンライナー |
||
| 862 | |||
| 863 | ``` |
||
| 864 | echo "http://hogeoge.com/encode?lang=ja&u=" | perl -MURI::Escape -lne 'print uri_escape($_)' |
||
| 865 | echo "http%3A%2F%2Fhogeoge.com%2Fencode%3Flang%3Dja%26u%3D" | perl -MURI::Escape -lne 'print uri_unescape($_)' |
||
| 866 | ``` |
||
| 867 | |||
| 868 | 日本語JPドメイン名のPunycode変換・逆変換 |
||
| 869 | http://punycode.jp/ |
||
| 870 | |||
| 871 | # バーコード |
||
| 872 | |||
| 873 | zbar |
||
| 874 | http://zbar.sourceforge.net/ [参考](https://qiita.com/labocho/items/11985fa376b867b8e9ff) |
||
| 875 | |||
| 876 | # QRコード |
||
| 877 | |||
| 878 | {{rawhtml(<blockquote class="twitter-tweet" data-lang="ja"><p lang="en" dir="ltr">How to read QR code. <a href="https://twitter.com/hashtag/qrcode?src=hash&ref_src=twsrc%5Etfw">#qrcode</a> <a href="https://t.co/l7QiooASvU">pic.twitter.com/l7QiooASvU</a></p>— S Choe (@wireless_power) <a href="https://twitter.com/wireless_power/status/1051734876196503552?ref_src=twsrc%5Etfw">2018年10月15日</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>)}} |
||
| 879 | |||
| 880 | QRazyBox |
||
| 881 | https://merricx.github.io/qrazybox/ |
||
| 882 | |||
| 883 | QRコード・バーコードデコーダー |
||
| 884 | http://zxing.org/w/decode.jspx |
||
| 885 | |||
| 886 | 01のやつを貼り付けてボタン押すと QR コードを描くようにしたJavaScript |
||
| 887 | https://github.com/sekai013/ksnctf/tree/master/square_cipher |
||
| 888 | |||
| 889 | >参考:http://sekai013.hatenablog.com/entry/2015/04/06/220827 |
||
| 890 | |||
| 891 | strong-qr-decoder - 強力なQRコード解析ツール(ただし、テキスト化が必要) |
||
| 892 | https://github.com/waidotto/strong-qr-decoder |
||
| 893 | |||
| 894 | こんな感じでテキスト化 参考:[ksnctf C92 write-up](https://qiita.com/arushiro/items/b063c9a7d82028ff9b49) |
||
| 895 | |||
| 896 | 仕組みが分かれば、スマホなどいらぬ……ッ! 肉眼のみで解読するQRコード講座 |
||
| 897 | http://nlab.itmedia.co.jp/nl/articles/1801/31/news008.html |
||
| 898 | |||
| 899 | Qiita - QRコードを人力で読み取る |
||
| 900 | https://qiita.com/amanao/items/b7c54a3c73a8301b2412 |
||
| 901 | |||
| 902 | |||
| 903 | |||
| 904 | |||
| 905 | |||
| 906 | |||
| 907 | ## 動画等で見え隠れするQRコード対策 |
||
| 908 | |||
| 909 | ### PhotoShopを使う方法 |
||
| 910 | |||
| 911 | 動画をPhotoshopで読み込んで,全レイヤーのモードを「比較(明)」で、できるらしい。 |
||
| 912 | (自分は使った事ない) |
||
| 913 | |||
| 914 | ### ffmpegとImageMagicを使う方法 |
||
| 915 | |||
| 916 | フレームごとに切り出す |
||
| 917 | |||
| 918 | ``` |
||
| 919 | $ ffmpeg -i video.mp4k -f image2 %06d.jpg |
||
| 920 | $ ffmpeg -i video.mp4 -f image2 -vf fps=fps=1 out\video_%05d.jpg |
||
| 921 | ``` |
||
| 922 | |||
| 923 | 合成 |
||
| 924 | |||
| 925 | ``` |
||
| 926 | $ convert *.jpg -background none -compose lighten -flatten export.png |
||
| 927 | ``` |
||
| 928 | |||
| 929 | ImageMagicは、オプションが膨大にあるので、単に合成と言っても、多数のやり方があるっぽい。 |
||
| 930 | |||
| 931 | ``` |
||
| 932 | $ convert *.png -evaluate-sequence max ../export.png |
||
| 933 | ``` |
||
| 934 | |||
| 935 | maxのほかにmeanとかminとかある。 |
||
| 936 | |||
| 937 | ### 動画差分 |
||
| 938 | |||
| 939 | 動画のフレームごとの差を求めて変化してた場合に保存するプログラム |
||
| 940 | https://github.com/teatime13/search_movie_diff |
||
| 941 | |||
| 942 | ### 比較明合成 |
||
| 943 | |||
| 944 | [SiriusComp](http://phaku.net/siriuscomp/)を使う |
||
| 945 | |||
| 946 | |||
| 947 | |||
| 948 | # 難解プログラミング言語 |
||
| 949 | |||
| 950 | ## Brainfuck |
||
| 951 | |||
| 952 | Brainfuck |
||
| 953 | http://ja.wikipedia.org/wiki/Brainfuck |
||
| 954 | |||
| 955 | Brainfuck言語オンラインツール |
||
| 956 | https://sange.fi/esoteric/brainfuck/impl/interp/i.html |
||
| 957 | |||
| 958 | ## Whitespace |
||
| 959 | |||
| 960 | Whitespace |
||
| 961 | http://ja.wikipedia.org/wiki/Whitespace |
||
| 962 | |||
| 963 | WS2JS convert Whitespace to JavaScript |
||
| 964 | http://ws2js.luilak.net/interpreter.html |
||
| 965 | |||
| 966 | ## Malbolge |
||
| 967 | |||
| 968 | Malbolge |
||
| 969 | http://malbolge.doleczek.pl/ |
||
| 970 | |||
| 971 | |||
| 972 | # zip crack |
||
| 973 | |||
| 974 | ## brute force attacks |
||
| 975 | |||
| 976 | FCrackZip |
||
| 977 | http://oldhome.schmorp.de/marc/fcrackzip.html |
||
| 978 | |||
| 979 | Qiita - GPUでZIPパスワードを解析する |
||
| 980 | https://qiita.com/lumin/items/cf1e10cccfe5727f8180 |
||
| 981 | |||
| 982 | macOSの暗号化zipファイルはパスワード無しで解凍できる |
||
| 983 | https://blog.nflabs.jp/entry/2021/10/06/095121 |
||
| 984 | |||
| 985 | macOSの暗号化zipの話の続き |
||
| 986 | https://blog.nflabs.jp/entry/2021/12/22/094845 |
||
| 987 | |||
| 988 | |||
| 989 | ## zipファイルの既知平文攻撃 |
||
| 990 | |||
| 991 | 暗号化zipに含まれているファイルの一部が入手できるなら、既知平文攻撃が可能。 |
||
| 992 | pkcrackを使う。 |
||
| 993 | |||
| 994 | https://www.unix-ag.uni-kl.de/~conrad/krypto/pkcrack.html |
||
| 995 | |||
| 996 | ``` |
||
| 997 | $ pkcrack -C [解読対象のzip] -c [平文1のファイル] -c [平文2のファイル] -P [平文をzipにしたもの] -p [平文1のファイル] -p [平文2のファイル] -d [出力先zipファイル名] |
||
| 998 | ``` |
||
| 999 | |||
| 1000 | オプションの意味は、以下 |
||
| 1001 | |||
| 1002 | ``` |
||
| 1003 | -C [暗号化されたzipファイル] |
||
| 1004 | -c [暗号化されたzipファイルの中で平文がわかるファイル] |
||
| 1005 | -P [平文のファイルが入っている暗号化されていないzip] |
||
| 1006 | -p [平文のファイル] |
||
| 1007 | -d [出力先(復号したzipファイルの名前)] |
||
| 1008 | ``` |
||
| 1009 | |||
| 1010 | # ステガノグラフィ |
||
| 1011 | |||
| 1012 | Steghide |
||
| 1013 | http://steghide.sourceforge.net/ |
||
| 1014 | |||
| 1015 | >jpegに仕込むやつ |
||
| 1016 | |||
| 1017 | spamに見せたステガノグラフィツール |
||
| 1018 | http://www.spammimic.com/decode.cgi |
||
| 1019 | |||
| 1020 | |||
| 1021 | |||
| 1022 | # その他の変換・逆変換 |
||
| 1023 | |||
| 1024 | |||
| 1025 | みかか変換ツール |
||
| 1026 | http://tools.m-bsys.com/original_tooles/mikaka.php |
||
| 1027 | |||
| 1028 | >漢字混じりの入力は、 選択 + [変化] で平仮名に戻せる |
||
| 1029 | |||
| 1030 | |||
| 1031 | # Memo |
||
| 1032 | |||
| 1033 | CRYPTO TOOL PORTAL |
||
| 1034 | https://www.cryptool.org/en/ |
||
| 1035 | |||
| 1036 | QR code generator for text terminals |
||
| 1037 | https://github.com/fumiyas/qrc |
||
| 1038 | |||
| 1039 | >指定されたテキストをQRコードにしてアスキーアートまたは Sixel で出力する qrc できた。qrcode-aa、qrcode-sixel(Ruby) を golangに移植したもの。Windows は AA 出力のみ対応。 |
||
| 1040 | |||
| 1041 | プリンストン大学 CITP - MEMORY RESEARCH PROJECT SOURCE CODE |
||
| 1042 | https://citp.princeton.edu/research/memory/code/ |
||
| 1043 | |||
| 1044 | >Memory imaging |
||
| 1045 | >>USB / PXE Imaging Tools bios_memimage-1.2.tar.gz (sig) |
||
| 1046 | >>EFI Netboot Imaging Tools efi_memimage-1.0.tar.gz (sig) |
||
| 1047 | |||
| 1048 | >Automatic key-finding |
||
| 1049 | >>AESKeyFinder aeskeyfind-1.0.tar.gz (sig) |
||
| 1050 | >>RSAKeyFinder rsakeyfind-1.0.tar.gz (sig) |
||
| 1051 | |||
| 1052 | >Error-correction for AES key schedules |
||
| 1053 | >>AESFix aesfix-1.0.1.tar.gz (sig) |
||
| 1054 | |||
| 1055 | sonickun/ctf-crypto-writeups |
||
| 1056 | https://github.com/sonickun/ctf-crypto-writeups |
||
| 1057 | |||
| 1058 | >sonickunさんのCTFの暗号問題のWriteupをまとめた場所 |
||
| 1059 | |||
| 1060 | GitLab - Keita Xagawa - Beyond-CTF-crypto |
||
| 1061 | https://gitlab.com/xagawa/Beyond-CTF-crypto |
||
| 1062 | |||
| 1063 | 暗号の歴史と現代暗号の基礎理論(RSA, 楕円曲線)-前半- |
||
| 1064 | https://tech-blog.abeja.asia/entry/cryptographic-fundamental-theory-202304-1 |