14/12/05 16:32:26.81 6DduKXKJ
残り6ファイル
★Oishii.rar: 10631CCAD0061038
├files.txt(ファイルリスト)
└★Treasure.rar: 67.228.212.146
├★NetCasAdmin.rar: f-cas.com
└★Level2.rar: Oishii Slurper
├★BCAS Server.rar: yakisoba sousu
├★BCASEMU.rar: 同上
└★Level3.rar: 0000-3100-0596-4944-2958
├☆AE330-TechReMain.rar:
├☆BCASEMU.rar:
├☆BCAS-for-AT9028515FUNCARD.rar:
├☆bcas-km-database.rar:
├☆IDtoKM-Converter.rar:
└☆T002CA20-ae330.rar:
38:名無しさん@編集中
14/12/05 17:31:04.21 P1iqeArc
C言語版
URLリンク(pastebin.com)
39:名無しさん@編集中
14/12/05 18:30:56.68 P1iqeArc
動作確認用
URLリンク(codepad.org)
40:名無しさん@編集中
14/12/05 19:31:02.83 gTcSpfmn
>>34
拡大鍵の前半8バイトがわかっているなら話は簡単ですが、拡大鍵は後ろから判明して行くので、
前半だけがわかっていると言う仮定はあんまり意味無いですよね
なので、拡大鍵の一部が判明している状態と言うのは、拡大鍵の後半の4、8、あるいは12バイトだけが
わかっている状態とほぼ同義かと思います
その上で、BlockCipher()(当然その逆処理も)は、キーが決まっていれば入力/出力が1対1になるのは
わかったのですが、入力と出力だけが判明している場合のキーの一意性は保証されていないですよね?
入力と出力からキーをBFして、1つしか見つからなかった場合は問題無いと思いますが、複数見つかった
場合はそのどれが正しいのかを知る手段は無い気がするのですが、間違っているでしょうか?
#一応、見つかったキー候補全部から有り得るパターンの全Kmを候補として取得し、そのKm候補
#それぞれでEMMを作成して実機に食わせてみると言うローテクな手段なら存在しますが…
41:名無しさん@編集中
14/12/05 22:57:15.30 7+UHvJqU
12バイトあればKm候補はほぼ確実に1つしか見つからないはず。
だめな確率は1/2^32だからありえない。
8バイトだと確率の計算が複雑になりそうだけど、数個しか見つからないはず・・・たぶん
4バイトだけだと情報量的に無理
やっぱり気になってきたから自分で試したくなってきたぞ
42:9
14/12/06 00:49:30.54 u81getUm
URLリンク(www1.axfc.net)
全EMMコマンドの事前生成と一括転送
エンディアン依存性の排除
環境変数によるパラメータ設定
windows/linux対応
fp確認に便利なしょぼいグラフ表示 URLリンク(imgs.link)
解パスは定期的に貼られてる中のどれか
例によってbc.cppだけは実装を伏せてあります。
ここの住人なら自前でやっちゃうレベルの改造ですがよかったらドウゾ。
43:名無しさん@編集中
14/12/06 01:02:53.23 u81getUm
rの出力fp行だけ標準出力になってますのでeにパイプして使えます。
$ ./r | ./e
44:名無しさん@編集中
14/12/06 02:51:43.28 u81getUm
URLリンク(pastebin.com) 修正パッチです(;´Д`)
45:名無しさん@編集中
14/12/07 03:53:53.58 baUQaleD
ソースファイル全てのreverse32を取っ払って
store_leをsotre_beとすれば、eを少し速く回せますね。
46:名無しさん@編集中
14/12/07 16:25:23.58 zQRLbbV+
かなり遅れたけどC-CASのATR
3B F0 12 00 FF 91 81 B1 EF 45 1F 03 0A
47:名無しさん@編集中
14/12/07 17:42:45.69 baUQaleD
速くて無理かと思えていたM002CA20(バックドア有り)ですがPCでfp採れました。
linuxでpcscd以外起動していないシングルユーザーモードにて採取。
マシンは普通のノートPCです。
URLリンク(pastebin.com)
# 差もはっきり出ていますし、既知のKmから作ったfpとも一致。
あと、linux64bit環境だとr.cpp:teeprintfでsegfaultしたので
以下の様に修正たところ大丈夫でした。
@@ -136,6 +136,8 @@
va_list ap;
va_start(ap, fmt);
std::vfprintf(stderr, fmt, ap);
+ va_end(ap);
+ va_start(ap, fmt);
std::vfprintf(fp, fmt, ap);
va_end(ap);
48:名無しさん@編集中
14/12/07 20:54:45.18 LbbUkcrZ
>>26
r0は何回やってもきれいなグラフになるので問題無いと思うのですが、
r1をやるとTHRESHOLDラインの前後を行ったり来たりのヘロヘログラフになっちゃうんですよ。
たぶん、BlockCipher()の修正を間違えていてe0でSUBKEY_1が正常に出せていないのではないかと...
なにぶん頭が悪いのでサブキーの計算方法もわからないからSUBKEY_1が正しいのかさえわからない状態です。
49:名無しさん@編集中
14/12/07 21:57:06.36 baUQaleD
>>48
Kmが既知ならサブキーの計算は>>39のmain関数をよく見れば判ると思うよ
50:名無しさん@編集中
14/12/07 22:42:13.58 baUQaleD
0,1,0,1,0,1,1,0,0,1,1,0,0,1,0,1,0,0,1,1,0,1,0,0,0,1,0,1,1,0,0,0
このfpで50e1bddbともう一つが出てくればBlockCipherは合ってるはずだよ
ちょっとコーヒーでも飲んでくるわ
51:名無しさん@編集中
14/12/08 02:43:49.69 a0OW4C3h
なんにしましょう >(´∀`)
( ´_ゝ`)< フレーバーコーヒー16くれ
3つで十分ですよ >(´A`;)
( ´_ゝ`)< いや16だ、8と8で16だ
3つで十分ですよ >(´A`;;)
( ´_ゝ`)< ドーナツもくれ
解ってくださいよ >(´A` )
52:名無しさん@編集中
14/12/08 07:27:55.80 Ynxpe70Z
>>49-50
遅レス、大変申し訳ない。
main関数の『int i;』が理解できたところで睡魔に襲われてしまい、
激闘の末!さっき、撃退しましたのでご安心ください。
0,1,0,1,0,1,1,0,0,1,1,0,0,1,0,1,0,0,1,1,0,1,0,0,0,1,0,1,1,0,0,0 -> found: 506135d3
なんじゃこりゃ!?やっぱBlockCipher()だ!!
同じミスをしない為にも恥を忍んで原因を記載しておきます。
原因:Cipher.Short[0]と[1]の行をコメントアウトしてました(爆)
理由:コンパイル時にエラーになったのでコメントアウトして忘れてた。
結果:
found: 50e1bddb
もうひとつは、これですかね?
found: badcaffe
>>51もヒントだったわけですね。ありがとうございます。
サブキーの計算についてはこれから勉強させていただきます。
53:名無しさん@編集中
14/12/08 12:21:43.52 UwtcgnuV
当方もブレードランナーは好きな映画ですが、話自体は原作の方が好きです(´ー`)
>>47
おお、これだけきれいに差が拾えるなら行けそうですね
カウンタの解像度が1GHzあるのもさることながら、シングルユーザモードも効いてそう
ここまで来ると穴なしカードでどうなるのか知りたいところ…
54:名無しさん@編集中
14/12/08 20:03:02.06 d9xs7NlA
BCASProtocol0XReverseKeyScheduler 1.0.1
URLリンク(www.unkom.info)
主な変更
・逆鍵スケジュールの関数化
・ビットインデックステーブル処理修正
・日本語化
55:47
14/12/09 02:31:51.59 Ko1FuCQq
>>53
恥ずかしながら原作はまだ読んでないですねぇ。
そういえば、イラストを来年の干支に差し替えて年賀状を刷るよう
親から言付かっていたのを思い出しました…(;´∀`)
まぁそんな事はどうでもよくて、先のMカードについてです。
r1以降は試していませんでしたので改めて試してみたのですが、
ちょっとだけ手間取りました。
一見良好なfpに見えても正解じゃない場合が有りました。
正解fpと比較して1ビット違いのfpが出てくるという現象です。
しかも割りと安定的に出てくるのでタチガワルイ。
違いは最初の1ビットだけで、1が来てほしいのに0。
現象はr1でのみ発生。少なくとも手持ちのTでは無かった事ですね。
最終的には、
N_MAXを大幅に増やすこと(BLOCK_NUM*512)で正解を得ることは出来ました。
#L値ランダムのアリ、ナシ両方で正解を得られました。
以上のような事が有りましたので、
Mに挑戦する方は気に留めておくと良いかもしれません。
56:名無しさん@編集中
14/12/09 15:23:13.29 7coCRu3A
初段のサブキーのビットパターンがなんだかうまい形に偏ってると、
連番でやってるLの生成とうまく相関しちゃって、初段の速度が偏るんじゃないかな?
二段目をやるときは、初段はランダムに動いてくれるのが理想なので、
Lの生成を乱数でやればよくなるのかも?
57:名無しさん@編集中
14/12/10 19:48:38.74 YKiMDlMR
よく見たらランダムありって書いてあったすまそ。
しかし、これは理屈がよくわからないぞ