2012/10/25にくいなちゃんさん主催で開催された6さいカンファレンスのまとめ。 第7回は「Windowsのアプリをクラックしよう!(再)」です。
第4回「Windowsのアプリをクラックしよう!」はどこへいってしまったのでしょう? 頑張って探したけどこれしか情報が無い・・・?
昨日の 6さいカンファレンスは盛り上がりましたね (第4回 「Windowsのアプリをクラックしよう!」) 来週は、作曲講座をしようと思っています。 お楽しみに☆ #6saiconf
— くいなちゃんさん (@kuina_tesso) 9月 28, 2012 厳しい緘口令が敷かれているのか,参加者がくいなちゃんさんしか居なかったのか,そもそもそんなのなかったのか・・・.
勝手にまとめてしまったので、何か問題があれば@shogo82148まで。 (カンファレンスの内容にはくいなちゃんライセンスが適用されるらしいです.怖!)
—–キリトリセン—– くいなちゃん: 10/25(木) 21:00 から、第7回 6さいカンファレンスを開催します。 テーマは、「Windowsのアプリをクラックしよう!(再)」 です。 ** (再) と付いていますが、前回やった記憶はございません。 ** 参加されない方は、今のうちにご退場お願いします。 ROMでの参加も歓迎ですん☆ それでは、もうしばらくお待ちください。
くいなちゃん: それでは、第7回 6さいカンファレンスを開催します。 テーマは、「Windowsのアプリをクラックしよう!(再)」 ですん☆ しかし、これを開始する前に、いくつかの免責事項をお伝えしなければなりません。 (6さい的な事情)
くいなちゃん: まず、実際に既存の Windowsアプリをクラックする、という流れで 話を進めていきますが、実際にクラックを行っているわけではなく、 また画像も合成です。 実際に既存のアプリに対してクラックする行為は、 場合によっては犯罪となりますので、** 決してマネしないでください **。 本講座は、犯罪を助長する意図があるわけではなく、 むしろ攻撃側を知ることで、防衛スキルを身に着けようというものです!
マインスイーパ! くいなちゃん: はい、よろしいでしょうか。 では、本日クラックするアプリはこちらです! http://kuina.tes.so/6saiconf_7/img0.png
くいなちゃん: みなさん大好きな、マインスイーパですん☆ くいなちゃんは、マインスイーパが得意ではないので、上級をクリアする頃には、 時間が999になってしまいます。 そこで、この時間が経過しないよう、改造することを今日の目標としましょう。
くいなちゃん: まず、ollydbg というフリーソフトを起動します。 これは、主に アプリをクラックするのに使われるソフトです[要出典] http://kuina.tes.so/6saiconf_7/img1.png 画像は、ollydbg 上でマインスイーパを起動したところです。
コンシューマキー流出? 朝のTLにTwitter公式クライアントのコンシューマキーなるものが流れてきたので, なにか面白いことに使えないか セキュリティ的に何か問題になるのか 考えてみました.
コンシューマキーとは コンシューマキーとはクライアントの身分証眼書のようなものです. Twitterはコンシューマキーを使用してクライアントを識別します.
このコンシューマキーがどのように使われるのかを知るために, Twitterの認証方式であるOAuthについて簡単なスライドを描いてみました.
OAuthの認証は大きく分けて次の6ステップからなります.
認証開始 Twitterの使用を開始するためにユーザはクライアントに認証の開始を指示します 鍵の使用申請書の要求 開始指示を受けたクライアントは,コンシューマキーを利用して身分証明を行います 証明できたクライアントに対してTwitterは鍵の使用申請書を渡します ユーザの使用許可をもらう クライアントはユーザに使用申請書を渡し使用許可を求めます 使用申請書はウェブページのアドレスの形で渡されるので,多くの場合ここで自動的にブラウザが立ち上がります Twitter認証 ユーザはTwitterにパスワードを渡し,クライアントに使用許可することを伝えます ハンコを受け取る 使用許可の証としてPINコード(ハンコ)を受け取ります PINコードをクライアントに渡します 申請書を鍵を交換 クライアントは使用申請書とTwitterに渡し,鍵をもらいます 次回以降,クライアントは鍵を利用してTwitterにアクセスすることができます コンシューマキーが流出したということは, ステップ2のクライアントの身分証明の際に「自分は公式クライアントだ!」と名乗ることができてしまうという事です.
一般ユーザに対する影響 さて,これによる一般ユーザへの影響について考えてみましょう.
認証画面の偽装 ステップ4のTwitter認証の際,画面にはクライアント名が表示されます. 公式クライアントのコンシューマキーを使えばここに「Twitter for iPhone」「Twitter for Android」等, 公式クライアントの名前を表示することができてしまいます. これは間違えて認証してしまいそうですね!
・・・でも,ちょっと待ってください. ステップ4にたどり着くには,ユーザ自身が「ステップ1.認証開始」をする必要があります. これをするには,ユーザ自身がソフトをダウンロードして,解凍して,実行する必要があります. ** まともな ** な情報リテラシーを持ったユーザであれば,怪しいソフトは実行すらしませんよね?
偽装Webアプリ Webサイトであれば,アクセスしただけで「ステップ1.認証開始」をしたことにするのは技術的に難しくありません. ステップ1をクリアしてしまえば,流出したクライアントキーを使ってステップ4まで進むことができてしまいます. この時表示されるクライアント名は公式クライアントのものなので,悪意のあるサイトなのか本物なのか見分けが付きません.
ここで間違えてパスワードを入力し,使用許可を出してしまったとしましょう. Twitterにはクライアントアプリ(自分のPCで実行するもの)と Webアプリ(ブラウザを使うもの)の2種類があり,この違いによってステップ5での動作が少し変わります.
公式クライアントアプリに偽装していた場合, ステップ5でPINコードが表示されます. ** まともな ** なTwitterユーザであればこの時点で気が付きますよね? 一般的なWebアプリではPINコードが表示されることはまずありません. WebアプリのくせにPINコードが表示されたら認証を中止しましょう.
Webアプリに偽装していた場合, PINコードに当たるものが自動的にWebアプリに送られます. この送り先はアプリの作者にしか指定することができないため, 悪意のあるサイトの手にわたることはありません.
一般ユーザに対する影響まとめ コンシューマキーが漏れたからといって特別なことをする必要はありません.
** 怪しいアプリは実行しない ** ** 怪しいサイトでTwitterの認証をしない ** という,当たり前のことさえ気をつけていれば大丈夫です. このことさえ注意していれば鍵が盗まれることはありません. なんか最近犯罪予告の冤罪事件も発生しているので気を付けないといけませんね.
togetterでたくさんツイートをまとめたい Twitterは手軽に情報収集ができ他人とのコミニュケーションができる楽しいSNSですが、 古いツイートはしばらく経つとタイムラインや検索結果からはたどれなくなってしまいます。 過去のイベントに関するつぶやきを後から見たい、といった場合に不便です。
そこで登場するのがtogetterというサービス。 Twitterのツイートを引用して、「まとめ」を作ることができます。 Twitter上での議論やイベントに対するみんなの反応がわかりやすく見れるので便利です。 僕もJO_RI_botのツイートをまとめたりといろいろとお世話になってます。
簡単なまとめを作るのには非常に便利なtogetter。 しかし、ツイート数が多くなると少し大変です。 例えば何かのイベントのハッシュタグのついたツイートをまとめたい場合、 検索に現れるツイートの数には上限があるので、 漏れ無くツイートを集めるにはイベントの最中にまとめを作る必要があります。 togetterには自動更新機能がないので、数分毎に「検索」ボタンを押さなければなりません。 これは面倒だ・・・
ブックマークレットを書いてみたよ 面倒なので、自動的に検索ボタンを押すブックマークレットを書いてみた。
** ユーザスクリプトで書き直してみたよ! **
上のリンクをブックマークに登録しておき、togetterのまとめ作成ページを開くと、 検索ボックスのしたにテキストボックスとボタンが追加されます。 テキストボックスに検索ボタンを押す間隔(秒単位)を入れ、開始ボタンを押すと、 自動的に検索・移動・重複ツイートの削除・ソートをしてくれます。
スクリプト 元のスクリプトをgistにあげておきます。
{% gist 3883841 %}
ブラウザ拡張のほうが便利だろうけどブックマークレットとして実装しているのは、togetterのスクリプトやjQueryを自前のスクリプトから呼びたかったから。 ブラウザ拡張でも実現する方法はあるんだろうけど、調べるの面倒だからやってない。 DOMの操作だけでもなんとかなりそうだから、余力があれば書きなおすかも。
これ作るにあたって、togetterのソース見てたけど、重複削除やソートアルゴリズムがなんだか残念な感じ。 ツイート数に比例した回数だけjQueryのセレクタを呼び出している。 jQueryのセレクタって結構重い処理だし、オーダーが O( n^2 ) になるわけで・・・。 単なるソートにしては重すぎだろ、とは思ってはいたんだ。まさかこんな中身だとは。
2012/10/11にくいなちゃんさん主催で開催された6さいカンファレンスのまとめ。 第6回は「幼女を描いてみよう! ~原画から彩色まで~」です。
勝手にまとめてしまったので、何か問題があれば@shogo82148まで。 (カンファレンスの内容にはくいなちゃんライセンスが適用されるらしいです.怖!)
ゆるふわ☆タイム くいなちゃん: 今日も、前回と引き続き、プログラミングのプの字も出てこない、ゆるふわ講義ですん☆
くいなちゃん: テーマは 「幼女を描いてみよう! ~原画から彩色まで~」 ということなので、今回描いてみた絵を、いきなり完成形からご覧いただくことにします。 3時間で描いたです。 http://kuina.tes.so/6saiconf_6/img0.jpg
構図を描いてみるです! くいなちゃん: では、順を追って、描いていくことにしましょう。 最初はもちろん、カンヴァスは白紙です。 そこに、まずは構図をテキトーに描いてみるです: http://kuina.tes.so/6saiconf_6/img1.jpg はい、ここまではみなさん描けますね。 まるで6さいが描いたようなテキトーな落書きです。
くいなちゃん: ここでのポイントは、脳内に立体をイメージすることです。 構図をイメージしやすいように、背景に線を引いていますが、無くてもイメージできるなら描く必要はありません。 注意してほしいのは、2D絵を描くからといって、2Dで捉えないことです。 アニメ絵でも同様ですん
くいなちゃん: はい、キャラに、顔と髪を追加してみました。 http://kuina.tes.so/6saiconf_6/img2.jpg えっ、完成形と絵が違う? キニシナイ! あと、独りでは寂しいので、小鳥も追加しました。
色を塗っていくです! くいなちゃん: アニメ調の絵を描く場合は、ここからアニメ塗りをしていただけば完成しそうなんですが、せっかくなので、油彩画っぽく塗っていくことにします。
くいなちゃん: まずは、べた塗りです。 http://kuina.tes.so/6saiconf_6/img3.jpg
くいなちゃん: なんてことはありません。 太いブラシで、テキトーに塗っただけです。 はみ出しまくってますね。 しかし、ブラシが太いので、細かな部分はそもそも塗れません。 このくらいテキトーでもキニシナイでok
くいなちゃん: 人物に影が、若干付けられていますが、原画を描くときに立体を意識したならば、光源を意識すればある程度付けられると思います。 物理学的に考えるのです!
細部を塗っていくです! くいなちゃん: はい、次は、もう少し細いブラシで、細部を塗っていきます。http://kuina.tes.so/6saiconf_6/img4.jpg 基本的には、最初に太いブラシで大まかに塗り、徐々にブラシを細くしていき、細部を描きこんでいく流れですね。 ブラシの目安は、半々にしていくと良さそうです
くいなちゃん: この時点で、服に謎の模様が描かれていますが、テキトーです。 その太さのブラシで表現できる粒度のものを塗ってください。
くいなちゃん: で、更に細いブラシで塗っていきます(3段階目) そして、このあたりまで塗ったら、試しに線画(原画)を外してみましょう。 http://kuina.tes.so/6saiconf_6/img5.jpg おや、線画が無くても 綺麗に見えますね!
くいなちゃん: 目を描きこんでいなかったのは、意図的です。 最初のアニメ調の絵で完成させたい場合は、目も塗ってあげてください。
顔を描くです! くいなちゃん: はい、それでは、もう線画が無くても輪郭が解りますので、線画は非表示にしたまま塗っていきましょう。 更に細いブラシで塗ります。
2012/10/04にくいなちゃんさん主催で開催された6さいカンファレンスのまとめ。 第5回は「6さいからの作曲講座」です。
勝手にまとめてしまったので、何か問題があれば@shogo82148まで。 (カンファレンスの内容にはくいなちゃんライセンスが適用されるらしいです.怖!)
THE END くいなちゃん: みなさん、楽譜は読めますね!(チラッ
くいなちゃん: 今回は、作曲理論などの難しい講義というよりも、実際にどうすれば綺麗な曲が作れるのか、という実践的な内容になっています。 くいなちゃんの独自理論ですん
くいなちゃん: では、さっそく、曲を作ってみましょうー
コード くいなちゃん: はい、まず曲に必要なのは、 “コード” です。 「えっ、メロディじゃ?」 と言った あなたは素人です。 コードをしっかり押さえない曲は、聴くに堪えない感じになってしまいます。 くいなちゃんは、コードもメロディも全部同時に浮かぶことのできる天才肌ですが、とりあえず今回はコードを中心に創っていきましょう!
くいなちゃん: コードのルール: ** 「あるコードには、移りやすい次のコードが ある程度決まっている」 ** です! たとえば、C(ド・ミ・ソ) のコードからは、G(ソ・シ・レ) や F(略) や Am(略) に移りやすいです。 逆に、G や F から、 C にも移りやすいです。
くいなちゃん: ということなので、C → G → C → G は移りやすいコードのルールで作ったので、自然なコードということになりますね。 このコードで曲を作っていきましょ!
くいなちゃん: はい、この楽譜をご覧ください。 C(ドミソ) と G(ソシレ) が交互に来ているのが解るかと思います。 わからない人は、じっくり読んでね。 http://kuina.tes.so/6saiconf_5/img0.png(魚拓)
くいなちゃん: はい、コード完成です! せっかくなので、これを鳴らしてみましょう。 http://kuina.tes.so/6saiconf_5/snd0.mp3
くいなちゃん: 自然ですね!
メロディをのせる くいなちゃん: では、コードが完成したので、メロディを乗せて行きましょう。 メロディのルール: ** 「拍子の部分には、コードの音を使う」 ** です! さっきの、音が鳴っているタイミングの部分に、コードの音を使って、メロディを配置してみましょう。
2012/09/06にくいなちゃんさん主催で開催された6さいカンファレンスのまとめ。 第3回は「アルゴリズムを自力で生み出すプログラムを作ろう!」です。
勝手にまとめてしまったので、何か問題があれば@shogo82148まで。
WELCOME TO HEAVEN!! くいなちゃん: ところでみなさん、次の( ) に入る数を当ててください
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ( ) くいなちゃん: はい、正解です! これは、フィボナッチ数列と呼ばれ、 前の2つの値の和が、次の値になっているという数列です
くいなちゃん: これを、f(0) = 0, f(1) = 1, f(2) = 1, f(3) = 2, f(4) = 3, f(5) = 5, … と書いていくことにしましょう。 f(10) = 55 ですね!
くいなちゃん: もっと汎用的に考えて、f(x) の x を与えると、フィボナッチ数が返ってくることを考えましょう。 x = 10 のとき、f(x) が 55 になる、といった感じです
くいなちゃん: ではみなさん、この f(x) を、プログラムで書くことはできますでしょうか。 言語は何でも構いません。
くいなちゃん: やり方は、いくつかあります。 x = 100 と与えられれば、0, 1, 1, 2, 3, 5, … と 約100回繰り返して、x = 100 の値を求めるというものです。
昨日,Twitterで猫型さんのアイコンのテンションが上がっている話をしていたら, こんな無茶ぶりをされたんですよ.
明日には、いっちーがWebRTCでリアルタイムテンション上がってきたサービス作ってくれるだろうし、猫型さんがアプリの申請出してるだろう
— Takashi Sasakiさん (@civic) 10月 2, 2012 いいだろう,その挑戦受けてやる!
WebRTCって? WebRTCというのはブラウザ上で Real Time Communication を行うAPI群のことことです.
ローカルデバイス(Webカメラとかマイクとか)へのアクセス ブラウザ同士が(サーバを介さずに)直接通信 なんてことができるようになるらしいです. つまり WebRTCを使えば Skype っぽいものをプラグインのインストールなしにブラウザ上で実現できるってわけですね. Chrome の最新安定版で、ウェブの最先端に触れてみようから いろいろなWebRTCを使ったデモを見ることができます. 僕も似顔絵描いてもらったりしてみました.
getUserMedia API を使ってみる まだまだ仕様策定中で対応ブラウザがほとんどない状況ですが, 2012年10月現在,最新版の Chrome 21 で前者のローカルデバイスへアクセスするAPIである getUserMedia API が使えるようです. 早速遊んでみましょう.
navigator.getUserMedia( {video: true}, // constrains: 接続先のデバイス function successCallback(stream) { // アクセス成功 // stream に LocalMediaStream オブジェクトが入ってる // <video id="video"></video> 要素を取ってくる var video = document.getElementById('video'); // BlobURLに変換してsrcに入れる video.src = URL.createObjectURL(stream); // 再生 video.
2012/09/13にくいなちゃんさん主催で開催された6さいカンファレンスのまとめ。 第2回は「数学の定理を自動で発見するAI を Haskellで作ろう!」です。
勝手にまとめてしまったので、何か問題があれば@shogo82148まで。
WELCOME TO HELL!! くいなちゃん: それでは、まず、数学の「定理」とは何か、について説明したいと思います。 みなさん、日常的に「定理」という言葉を使っていると思いますが、「定理」とは何か、説明できますか
くいなちゃん: 「教科書に載っている公式が、定理だ!」と思うかもしれませんね。 確かに、教科書にも定理は載っています。
くいなちゃん: では、曖昧な理解の方のために、厳密かつ ゆるふわに説明しましょう。
くいなちゃん: 定理とは、次のように定義できます。
公理であるならば、定理である。 定理を推論規則によって推論したものは、定理である。 以上。
くいなちゃん: はい、みなさんこれで定理が何かを理解したと思いますので、数学の定理を自動で発見するAIを作ろうと思います。
くいなちゃん: Haskellで。
Haskell! くいなちゃん: そもそも、Haskellって何? という方もおられるかと思いますので、まずは Haskell について簡単に説明しておきたいと思います。
くいなちゃん: Haskell は、関数型言語です。 宣言的プログラミングによって、プログラムしていくプログラミング言語です。「○○は××である!」というのを繰り返してプログラミングする感じですね。 「まずは○○して、次に××しろ!」という C言語(手続き型言語)とはかなり異なります。
くいなちゃん: では具体的に、今回定理を発見するための数学の体系を説明しながら、同時に Haskell で実装してみることにしましょう。
くいなちゃん: 最終的には 大規模な数学体系の定理を発見するとしても、まずは試しに小さな体系で定理を発見してみることを考えます。 今回は、命題論理を対象としてみます。
定義 くいなちゃん: では、今回対象とする命題論理を、厳密に定義していきましょう。 まず、この体系で用いられる記号は、P Q R ¬ ⇒ の5種類です。 この5種類をうまく並べると、この数学体系でのあらゆる式や命題が記述できます。
くいなちゃん: まあ、たとえば、 P⇒P (PならばPである) といった感じですん。 わかりますね。
くいなちゃん: ¬ は数学における否定によく使われる記号ですが、いまのところ、単なる記号にすぎず、意味は定義されていません
くいなちゃん: ちなみに、くいなちゃんはポーランド記法が好きなので、 P⇒P を、 ⇒PP と書くことにしましょう
だいぶ時間がたってしまったけど、2012/09/06にくいなちゃんさん主催で開催された6さいカンファレンスのまとめ。 第1回は「C言語で作る、はじめてのDAWソフト制作」です。
勝手にまとめてしまったので、何か問題があれば@shogo82148まで。
BATTLE START!! くいなちゃん: みなさんは、既にC言語の基本的なところはマスターしていると思いますが、念のために軽く復習しておきましょう。 まずは、このソースコードをご覧ください。 http://kuina.tes.so/6saiconf/a.png(魚拓)
#include <stdio.h> #include <math.h> int main(void) { return 0; } くいなちゃん: 右下の100% は気にしなくてOKです。 このプログラムは、「何もせず終了するだけ」のプログラムとなっています。 ソースコードを順に解説しましょう。
くいなちゃん: まず、1行目と2行目に書かれている #include ですが、これはおまじないです。 プログラムの本質は、4行目からとなります。
くいなちゃん: int main(void) { } が、プログラムの本質となります。 コンピュータがこのプログラムを起動すると、int main(void) { } の { と } に囲まれた部分を上から順に実行していきます。 } に辿り着いたら終了です。
くいなちゃん: よって、このプログラムは、 return 0; を実行するだけのプログラムとなります。 return 0; とは、おまじないです。 えへへ☆
DAWを作ってみる くいなちゃん: はい、もう、C言語の基本的なところは全てマスターできましたね。 では、早速 DAWソフトを作ってみましょう。
くいなちゃん: DAWとは、簡単にいいますと、曲を作るソフトです。 それでは、int main(void) { } の中に、DAWっぽいプログラムを書いていきましょう。 とりあえず、int i, j; を書きます。
先週土曜日は第28回NDS(長岡技術者勉強会)でした。
スーツ vs ギーク Togetterのまとめを見ながら、内容を頑張って思い出してみる。 (せっかくローカルでブログ書ける環境作ったんだから、ちゃんとメモっとくべきですね・・・と思いつつ毎回できない)
プログラマは誰でもいい? 人に依存しないことはいいこと でも、本当にそれでいいの? 能力があれば誰もいいのかも 社長の方が誰でもいい (自称)ギークなスーツ 「これからはHadoopらしいよ」 ギークにもユーザの対応して欲しい 「技術的な制限で無理」なことを説明するときとか 浅い知識だけでは矛盾点を突かれて、Yesと言わざる負えない時も 「ときどき行く→ギーク行くといいじゃんってなる→ときどきが毎回になる」と困るよね 判断を全部ギークに丸投げしないで! 例えば、初期コストを取るか、拡張性を取るか、とか 技術的な利点・欠点は説明するけど、実際どっち使うかの判断はスーツな人にお願いしたい スーツを手玉に取るコミュ力 コミュ力の低いギークは技術力を生かせなくてもったいない! ギークもコミュ力を身につけるべき 名選手と名監督は両立しない 技術者からの叩き上げでマネージメントする側になった人は他人を上手く使えない マネージメント系は手足のように他人を使えなければならない 社会は怖いところです。
通常セッション マッチョ見積もり by @hiro55bsさん 「つまり、見積りは予想ではなく、帳尻をあわせるものなんだよ!」 見積もりはリスク管理、プロジェクト初期だけでなく随時やっていくもの プロジェクト初期では見積もりに幅があって当然 もる いろんな統計データからざっくり見積もれるんですね。勉強になります。 ワンライナーでノイズミュージック by @neko_gata_sさん Experimental music from very short C programsに触発されたというお話 RIFFヘッダつけるとこは Perl でやってます! 波といえば正弦波の組み合わせで・・・と思っていたので、ビット演算で音を出してみるというのはおもしろいです。ぜひやってみたいです。 LT SIの現場から感じた未来 by @nemuzukaさん 現在の契約形態に対する問題提起 皆さんで考えて行きましょう RubyMotionでiOSゲームを作るっきゃない by @jewel_x12さん Pythonが主人公のゲーム Android版はまだですか? Echigo Network Operators’ Group について by @yyasuyukiさん コイントスで決めよう お姉さんのコンピュータを高速化したお話 補足とか スライド上げようと思ったんですけど、よく考えたら半分他人さまの画像使ってるのであまりよろしくないですね。 検索アルゴリズムの紹介などは「おねえさんのコンピュータを作ってみた」を ご覧ください。