NEMアドレスを増殖させる(3)

NEMアドレスの無限増殖を一晩動かして朝チェックしてみたら、まだエラーにならずに動いておった。確認の為に、一旦自動増殖を停止させて、Nano Wallet をチェックしてみることにする。

わしの構想では、アドレスが大量に追加されたウォレットをエクスポート(ダウンロード)して、その.wltファイルを以前に紹介したデコード方法でJSONに変換して、FireFoxで読み込んで見ようかと….
ところがどっこい、アドレスが多くなりすぎたもんだから、ウォレットのバックアップ機能がもはや動作しないwww

アカウント画面にある「別のアカウントを選択」のプルダウンメニューを選んで見てみると(といってもこの動作もかなり重くなっていてモッサリしか動かないがw)、山盛りのNEMアドレスは確認できる。じゃが、いくつアドレスが生成されたもんかも判断がつかないwww

【実験】
何個アドレスが追加されてるのか確認する

プルダウンメニュー表示されるアドレスの数を目視で数えるのはゲンナリするので、メモリー上にあるウォレットデータ(JSON)をのぞき見して、何個アドレスが生成されたのかを調べることにする。

(1)まず、プルダウンメニューの一番最後に表示されているアドレスをコピる。これが最後に追加されたアドレスであろう。

(2)そのアドレスをキーワードにして、「メモたん」でメモリーの中を探索する。

(3)見つかったJSON形式のウォレットデータをみれば、恐らく通し番号が記載されているはず。

さあ、やってみよう。

アカウント画面で、「別のアカウントを選択」でプルダウンメニューを表示してみると、最後に追加されたアドレスは

TCBWELE……..6V74

ざっくりと”TCBWE”くらいで、「メモたん」で探索してみると、

おおい、出た出た!

“10279”:{“address”:”TCBWELENJD3Y…….

10279番目のアドレスってことか!
ってことは、一晩中回して、約1万個のアドレスを追加することができたわけじゃ。
でも、Nano Walletが重たくなってきてるので、この辺りが限界かもしれんな。

ところで、何でこんな馬鹿なことをやってるのかって?

わははははは、バッカーじゃからなw


<大量アドレス保有の価値>

あんた、自分のNEMアドレスを何文字くらいで正しいと判定してる?

わしゃ、せいぜい頭の4~5文字とお尻2~3文字くらいじゃ。

ということは、誰かを騙して誤送信をさせようという時、頭とお尻の文字が似ているアドレスを持っていれば…….

ああ、怖い!

“NEMアドレスを増殖させる(3)” の続きを読む

NEMアドレスを増殖させる(2)

さて、NEM Nano Walletのアカウント機能で、新しいアドレスを追加していくのじゃが、手作業に疲れたので、自動操作プログラムなんぞを作ってみた。

【方法】

Windowsの操作ってのは、全てWindows Messageという機能で行われているので、これを自動的に生成してNano Walletを操作してしまおう。

そういえば、昔、アメーバピグってので遊んでた頃に、自動操作する簡単なプログラムを作ってあった。

これはデスクトップにあるWindowのどこをクリックするかを5個まで登録しておくとそれを順番にクリックしつづけてくれるプログラムじゃ。

こいつを改造すれば、アドレス無限追加操作が簡単に作れる。

動作はこんな感じの繰り返しじゃ。

1)[+ウォレットに新規アカウント(アドレス)を追加] をクリック
2)ポップアップのパスワード入力エリアをクリック(フォーカスを移動)
3)パスワード入力エリアに、パスワードの文字を1文字づつ入力
4)リターンキーを入力
5)[新規アカウントを追加] をクリック

それぞれのステップのターゲットとなるWindowハンドルをHotKeyで追加登録すれば、あとは自動で動いてくれる。

【実行】

さあ、Nano Walletのアカウント画面で、それぞれの入力エリアのWindowハンドルを登録して、追加ループスタート

今のところアドレスは成功しながら無限ループが続いているようじゃが、さあどうなるかw

ああ、また無意味な実験を……反省


<知っておくべき、セキュリティ上の事実>

無限増殖の実験はどうでもいいが…..(実は大問題があるのじゃがそれは後日)

よく考えてみておくれ、ウォレットは外部のプログラムから簡単に操作できておるじゃろ。送信先の書き換えとか、金額の書き換えとか、ハッカーには簡単に操作できてしまう事実を知っておくべきじゃろう。

“NEMアドレスを増殖させる(2)” の続きを読む

NEMのアドレスを増殖させる(1)

NEMの場合は、同じウォレットに複数のアドレスを持つことができないのじゃろか?

こんな疑問が沸いたので、Nano Walletを調べてみると….
ちゃんとあるじゃありませんか!

アカウントのページに移動すると

「ウォレットに新規アカウントアドレスを追加」があるので、こいつをクリックしてみると

こんな感じで、ウォレットのパスワードを入力すれば新しいアドレスが追加できるようになっておった。

試しに3つほど追加してみると、アカウントがプルダウンメニューで選択できるようになった。これで、請求先に応じたアドレスが生成できるぞ。



こうなると、またワシの悪い虫が疼き出しちまって!


疑問:このアドレスはいくつまで追加できるんじゃろ?

必死に、追加作業を繰り返してみたら、100個を過ぎてもまだ追加できる。

こうなってくると、手動ではやってられないので、自動追加装置を作らねばならん。

よ~~し、Nano Walletを自動操作するハッキングプログラムを作って、何個まで追加できるか実験してやるぞ!

自分でもアホ過ぎると思うが、思い立ったら止まれないのじゃw

“NEMのアドレスを増殖させる(1)” の続きを読む

「もにゃ」から秘密鍵を取り出す(2)

さあ、ローカル版に改造した「もにゃ」のローカルにあるJavaScriptファイルを書き換えて、秘密鍵を取り出すぞ。
で、どこを改造すればいいのか….この膨大なソースの中から……(悩)

【STEP3】オープンソースの改造部分に当たりをつける

「もにゃ」はオープンソースなので、それを見たほうが足掛かりを掴むのは早そうじゃ!

もにゃの公式TOPページで、[ソースコード]を選択すれば、「もにゃ」の全ソースが表示される。

JavaScriptのソースなので、おそらくこのjsの中にあるはずじゃ!

この中のJSファイルに、秘密鍵を使って署名をする部分があるはずなので、それぞれのソースコードの中を[ctrl]+[F]検索してみる。キーワードは”sign”や”privatekey”ってなところやってみる、すると…….

二番目のファイル、”currency.js”の中に、それらしい部分を発見したのじゃ!

keyPairを使って、signしているっぽいのがわかる。

keyPairということは、おそらく公開鍵と秘密鍵のセットじゃな、これを取り出せばバッチリじゃ!

とりあえずこの中身を確認するために、デバッグ用のコンソールに出力するコード

console.log(keyPair);

って感じで書き加えてしまえば、Chrome上で[F12]を押した時に表示されるコンソール画面に出力されるはずじゃ!

 

【STEP4】dist.jsファイルを書き換える

そんじゃ、ローカルに保存したdist.jsをメモ帳で開いて、該当部分を書き換えてみよう…..

ありゃりゃ???
なんだ、このJSファイル!
改行がないし、変数名も一文字、さらに構文も普通のJavaScriptと違うじゃんか!

そう、「もにゃ」のdist.jsは、圧縮や難読化の為に、JavaScriptの簡易表記に書き換えられておるのじゃ!
変数名も分かりやすい元の文字列表記から a,b,c,d などの一文字アルファベットの簡易変数名に変換されているので、そのまま検索をかけてもgithubにあるソースコードとは一致しそうもない。だから、定数名やメンバー名などの簡易表記できない要素を頼りに探す必要がありそうじゃ。

“).keyPair” や “.sign(“

こんなキーワードで、前後のソースを見ながら探していくと
……見つけたのじゃ!

githubのコード

該当するもにゃのdist.js

keyPairをdという名前の変数に入れているので、その直後にdをコンソールに出力するようにコードを挿入してみる。

d=s.derive(0|i[u][0]).derive(0|i[u][1]).keyPair,console.log(d),this.enableSegwit

【STEP5】もにゃを実行して送金してみる

dist.jsの書き換えが終わったら、そのままローカルの「もにゃ」を起動して、自分宛に送金をしてみる(署名のみのオプションをチェックして実際には送らなくてもいい)

とりあえずBitzenyで、自分のアドレスに送金する設定で、署名のみを行ってみた。
[F12]を押して、Chromeのデバッグ画面を表示させ、Consoleのタブを選択すると、

“ECPair”というオブジェクトがコンソールに出力されているが、秘密鍵は含まれてない。だが、コンソール画面で、ECPairのメンバーを掘り下げて見ていくと、toWIF() ってメンバー関数がある。
これが秘密鍵を出力するメンバー関数っぽいのじゃ!

WIF(Wallet Import Format):
ウォレットで扱う秘密鍵の表示形式

ということで、先に改造したコードをちょいと再改造して

d=s.derive(0|i[u][0]).derive(0|i[u][1]).keyPair,console.log(d.toWIF()),this.enableSegwit

と変更して再度送金テストしてみると

コンソールに秘密鍵っぽい文字列が表示されているぞ!大成功じゃ!
これで、改造したローカル版「もにゃ」を使えば、いつでも秘密鍵を取り出せるようになった!

もしコンソール画面が嫌いで、メイン画面に秘密鍵を表示したければ、

console.log(d.toWIF()) → alert(d.toWIF())

と書き換えれば、メイン画面に秘密鍵が表示されるようになる。



で、これは誰が何に使うのだろうかw

“「もにゃ」から秘密鍵を取り出す(2)” の続きを読む

「もにゃ」から秘密鍵を取り出す(1)

さあ、「もにゃ」をハッキングして秘密鍵を取り出してみるのじゃ。
(そんなことして何の意味があるのか不明じゃがなw)

ここは「メモたん」で….と行きたいところじゃが、秘密鍵が分からないと探索のしようがないw
だから今回は、javascriptの書き換えで、秘密鍵を取り出してみようと思う。

さてと、どうしようかな。

「もにゃ」はGithub.ioに置いてあるオープンソースプロジェクトじゃ。
だから、このソースを書き換えて秘密鍵をプリントアウトするように書き換えればいい。簡単だ。
でも…..実は、ワシはjavascriptの実行の仕方やビルドの仕方を知らないのじゃ(恥)

だから超強引な方法でやってみるぞw

【STEP1】「もにゃ」をローカルアプリに変更しちまえ!

もにゃの公式サイトに行く
https://monya-wallet.github.io/

ここのページにソースコードもブラウザベースのウォレットも、アプリ版もみんな置いてあるので、[→今すぐ使う]を選んでブラウザ版を表示してみる。

とりあえず、「もにゃ」が表示されたはずじゃ!
ここで、この「もにゃ」のHTMLソースを表示してみるぞ。右クリックで[ページのソースを表示]を選択すると

WEB版「もにゃ」のHTMLファイルが表示されるはずじゃ。
よく見ると、何だがいろいろと書いてあるが、bodyの中身は、最後に書いてある

<script src=dist/dist.js defer></script></body></html>

このスクリプトだけなのが分かる。
とりあえず、このHTMLファイルをPCのローカルファイルに保存してしまおう。
わしは、start.htmlというファイル名で保存した。

つぎにHTMLの中に書かれている、scriptファイルをダウンロードできるかをやってみよう。

WEB版「もにゃ」のアドレスは、
https://monya-wallet.github.io/wallet/“なので、
このアドレスをベースにスクリプトのアドレスを追記すると「もにゃ」のスクリプトのアドレスは

https://monya-wallet.github.io/wallet/dist/dist.js

となる。
ここにアクセスしてみると

おお、すごい長さのJavaScriptのソースが表示たのじゃ。
これも、右クリックで先にHTMLを保存したローカルのフォルダの下にdistというフォルダを作って、その中にdist.jsという同じ名前で保存してしまおう。

\\マイフォルダ\start.html

\\マイフォルダ\dist\dist.js

こんな感じで保存されてればいい。

【STEP2】ローカル版「もにゃ」を起動

NEMのNanoWalletと同じ方法になるが、このローカルのマイフォルダにあるstart.htmlをChromeにドロップダウンすれば、WEB版ではなくローカルの「もにゃ」が起動するようになるはずじゃ。
画像ファイルはダウンロードしていないので、見た目でちょっと違うが、ハッキングする上では何も問題ない。

これが起動できてしまえば、あとはダウンロードしたdist.jsの中身を書き換えれば、「もにゃ」の中から秘密鍵を盗み出す改造が自在にできると思う。
アドレスや秘密鍵などの設定は、WEB版の「もにゃ」の設定メニューからエクスポートして、ローカル版の「もにゃ」にインポートすればそれで完了する。

さあ、とりあえず動いたぞ!
あとは上手にハッキングできるかが楽しみなのじゃ!ワクワク!!

“「もにゃ」から秘密鍵を取り出す(1)” の続きを読む