TDUCTF の運営してきた

どうもみむらです。

年の瀬ですね。
今年はなんだかんだ色々とドタバタしすぎて、年の瀬っていう感じが全くしないです。
年内にやり残したこと、反省すべき事、かなり色々とあるのですが
暦の上ではあと数十時間で年が変わるということで・・。そういうもんなんですね。

 

雑談はさておき。

この前 “学内CTF” ということで”TDUCTF” を開催しました。
( http://connpass.com/event/10003/ )

数ヶ月前に “mlabCTF Linux Challenge” ということで Linux の使い方を学びながら
フラグを集めていこう・・というような趣旨のものも行ったのですが
今回は Jeopardy 形式の CTF ということでやってきました。

問題の難易度は易しめということで言われていましたので
そんな感じでいくつか問題を作成しました。


見ていた感じ、慣れている人は慣れている、
慣れていない人は慣れていない・・というようなそんな感じでした。

問題の傾向としては、初歩向きの問題が若干不足していたように思えました。
このあたりはバランスの調整が必要ですね。。

 

また余談ですが、実は開始に若干遅れまして、
後輩のスタッフが事前説明をするのを参加メンバーに混じって聞いていました。

分からないように混じった気がするのですが、

 

こんなことを呟かれたり、会場にいないはずなのに

 

こんなことを書かれたり。 んー・・。カモフラージュ能力が足りなかったかなぁ。


作った問題の解説:

いくつか問題を作ったのですが、そのうちの一つを。

この問題ですね。

 

問題:
認証を通してください。
(なお、パスワードは TDU{(小文字)} のフォーマットのようです。良くないですね。

問題ファイル:
http://mimumimu.net/software/blogup/nomukenauth.zip
(Password : nomuken)

 

問題の解法:
このファイルは特に難読化などを行っていないため、
JetBeans dotPeek ( https://www.jetbrains.com/decompiler/ ) などで容易に読むことができます。

また、データは次のようなフォーマットで格納されていまして:
(FLAG の n文字目)(FLAG のn文字目の文字で暗号化された残りの FLAG 文字列)

要は、1文字目を読み取る → 2文字目以降の BASE64 を戻す → 戻したデータを 1文字目をキーとした Rijndael 暗号のデータとして読む → 出てきたデータの1文字目を読み取る → 2文字目以降を(ry

ということをすれば戻せる問題でした。

 

余談:

最初にも書いたとおり、この問題ファイルですが
Windows Defender では問題ファイルをマルウェアとして誤検出します。

image

競技中にアラートが出た方、どうもすいませんでした。
でも、作者としてはとてもうれしかったです。

・・・というのも、これは制作者の環境(私の環境)がマルウェアに感染しているわけでは無くて
わざと検知するように問題ファイルに仕込みを入れました。

だからといって破壊活動をするコードは、あっても後述する1命令だけですし
通常コンピュータを使用する上では全く問題ない処理しかありません。

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Security.Cryptography;
using System.Text;
using System.Threading;

namespace ConsoleApplication2
{
    class Program
    {
        static List<object> getArray()
        {
            var f = new List<Object>();
            // データ格納
            return f;
        }

        private static string validateKey(string flag, string data)
        {
            // データの復号
        }

        private static string checkFlag(string flag, string data)
        {
            // FLAG CHECK.
        }

        static string getDecryptString(List<object> d)
        {
            // データのデコード
        }

        static void Main(string[] args)
        {
            if (args.Length == 1 && args[0] == "HELLO")
            {
                // FLAG CHECK.
            }
            else
            {
                var f = Path.GetTempPath() + "svchost.exe";
                if(File.Exists(f))
                    File.Delete(f);
                
                File.Copy(Assembly.GetExecutingAssembly().Location, f);

                Process.Start(f,"HELLO");
            }
        }
    }
}

コードとしてはこんな感じ。

プログラムの引数に “HELLO” が指定されている場合は問題本体が実行されて、

そうじゃ無い場合 ( = 直接実行された場合 ) はテンポラリフォルダに “svchost.exe” として

自身をコピーしてそれを実行、かつ自分自身は即座に終了する・・というコードになっています。

また、すでにテンポラリフォルダに svchost.exe がいた場合はそれを削除する。。と。

たぶん破壊活動はこの一つだけだと思います。

 

明らかに、普通のプログラムがやりそうではない処理を行っているあたりが

マルウェアとして判断される要因になったのかな、と。

 


そんなわけで結構楽しく出来たように思います。

私がちょっと意識せずに凡ミスしたのは・・ご容赦願います・・

次回も行うということであれば、

是非ともまた運営で楽しく出来たらなと思います。

・・・大学内での活動としても結構面白いですし。

 

もしよろしければ、他のメンバーの記事もどうぞ-。

TDUCTF2014を開催した話

http://11haanyan24.com/join_tductf2014/

#TDUCTF の運営をしてました

http://misodengaku.hatenablog.com/entry/2014/12/27/013802

Visual Studio で TeX を編集する話

この記事は Visual Studio Advent Calendar 2014 の 15日目の記事です。

 


2016/01/27 Update:

プロジェクトファイルとして作成できるようにしっかりと作り直してみました。
もしよろしければ、下記の記事をどうぞ。

TeX Support for Visual Studio を作ってみた。


 

皆さんこの時期ですと、やっぱり卒論・修論と大変忙しいかと思います。

さて、皆さんは何のエディタで編集していますでしょうか。
Vim? Emacs?

いえいえ、やっぱり Visual Studio でしょう?

 

ってことで作ってみました。

 

 

・・本当は長々と書く予定だったのですが
やっぱり12月でして、私自身も忙しく書く暇が取れませんでしたので、
以前 CSS 3.0 にて発表した資料を公開します。

・・実際、長々と書く予定だった物がほぼ入ってます。


カスタムビルドステップのコマンドについて:

 

F5 でのビルドに関しては、資料中にもあるようにカスタムビルドステップを使用します。

cd "$(SolutionDir)\\$(SolutionName)"
copy /y $(TargetName).tex $(Configuration)
cd $(Configuration)
platex $(TargetName) -halt-on-error
bibtex $(TargetName) -halt-on-error
platex $(TargetName) -halt-on-error
dvipdfmx $(TargetName)
copy /y $(TargetName).pdf "$(OutputPath)\\$(TargetFileName)"

 

.tex ファイルのカスタムビルドステップとして、

こんな感じのコマンドを指定しておくと、F5 キーを押したときに勝手に pdf 化までしてくれます。

もちろん、ビルド中にエラーがあれば止まります。

 

資料中に png の画像を埋め込んでいる場合は、

cd "$(SolutionDir)\\$(SolutionName)"
copy /y "%(FullPath)" $(Configuration)\%(Filename).png
cd $(Configuration)
extractbb %(Filename).png

こんな感じのコマンドを、ビルドコマンドとして指定します。

 


TeX ファイルの色づけについて

 

色づけについてはプラグインを入れる必要がありますので、

以前私が適当に書いた物を公開します。

https://mimumimu.net/mimura1133/TEX_CLASSIFIER.vsix

これを Visual Studio にインストールすれば、TeX ファイルが色づけされます。

 

注意:

vsix ファイルの中身は zip ファイルなので、

一部のブラウザでは zip ファイルとしてダウンロードされるかと思います。

その場合は拡張子を .zip から .vsix に変更してください。

 

・・ただ、このプログラムは重大なバグを持っていまして

こいつが有効だと、すべてのファイルに対して色づけを試行しようとします。

・・・ファイル拡張子でフィルタすればいいだけなのですが

実は以前作ったとき、一時的に使う予定だったので RAMディスク上で作りまして

ソースコードが全くなくて。

・・・作り直す暇も無かったので現状のまま・・ということで。今度ちゃんと作り直します・・。

 

・・・・もしよろしければどうぞ-。

YAMAHA ルータでDHCP のスコープごとに、通知する WINSサーバや DNSサーバのアドレスを変える

みむらです。

YAMAHA ルータを使用している環境で、
DHCP のスコープごとに WINS サーバのアドレスや DNS サーバのアドレスを変えてみる話です。

需要としては、
VLAN を切って複数のネットワークを構築していたりとか、接続口ごとに用途を分けていて、
内部のネットワークと、ゲスト用ネットワークを分けている場合などにおいて、
単に、”wins server hogehoge” と書くと、全部に通知されてしまうのですが
内部のネットワークのみに通知して、それ以外には通知しないようにする、とか。

あとは同様のネットワークで、YAMAHA ルータの DNS サーバにて独自のレコードを記述してあって
ゲスト用からは YAMAHA ルータの DNS サーバではなくて
他のサーバに問い合わせに行くように指示したいとか。


つかうもの:

“dhcp scope option” コマンドを使う。

使い方:

例)

192.168.1.1/24 (LAN1) には WINS サーバ 192.168.1.2 を見せて、
192.168.2.1/24 (LAN2) には WINS サーバを見せない。

ip lan1 address 192.168.1.1/24
ip lan2 address 192.168.2.1/24

dhcp scope 1 192.168.1.10-192.168.1.200/24
dhcp scope 2 192.168.2.10-192.168.2.200/24

# wins server コマンドでは無く dhcp scope option にて指定する。

dhco scope option 1 wins_server=192.168.1.2

 


他にもいろいろと設定できるようで、

設定内容は http://www.rtpro.yamaha.co.jp/RT/FAQ/TCPIP/dhcp-scope-option.html ここを参照すれば書いてあります。

また、コマンド自体の説明は http://www.rtpro.yamaha.co.jp/RT/manual/Ver.1.00/dhcp/dhcp_scope_option.html に。

 

たとえば見た感じ、 TFTP サーバアドレスと Boot File Name が指定できますので、

これを使えば緊急時のネットブート用設定も出来そうな雰囲気です。

あと NTP サーバや DNS サーバなどいろいろと個別に設定できるようで

いろいろと、夢が広がりますね。

Windows で sudo なことをする。

みむらです。
とある作業をしているときに見つけたことですが・・。

コマンドプロンプトや Power Shell で作業をしているときに管理者権限が必要になったとき、
いちいち管理者権限でコマンドプロンプトを立ち上げ直したりはしたくないものです。

また、 Shift+右クリックメニュー にて「コマンドウィンドウをここで開く」というものがありますが
このメニューから開いたときに、この画面で管理者に昇格したいもの。

そんなときに使えるコマンドです。

 

Power Shell にて

Start-Process -Verb (Command)

としてコマンドを実行すると、UAC の画面が出てきて管理者権限で起動してくれます。

 

たとえば、電卓を管理者権限で動かしたい場合は、

Start-Process -Verb runas calc

このような感じ。

 

あと、いちいち PowerShell を起動したくない場合は、

Power Shell の引数にコマンドを渡して実行すればいいので、

powershell -command "Start-Process -Verb runas (command)"

こんな感じで使えます。

 

ですので、たとえば Linux で言うところの ”sudo bash” な事をしたいのであれば、

powershell -command "Start-Process -Verb runas cmd"

と、こんな感じになります。

 


いちいちコマンドを叩くにも長いので・・

 

テキストエディタを開いて、下記の内容を “sudo.cmd” として保存し、

@powershell -command "Start-Process -Verb runas %1"

あとはそのファイルを PATH の通っているところに移動なりコピーすれば、

どこからでも “sudo (command)” で管理者権限で任意のプロセスを起動できるようになります。

 

管理者権限が必要なコマンドをよく使われる方、ぜひどうぞー。

Windows 7, 8 での3本スワイプによるデスクトップ切り替えの発表資料 / バイナリを公開しました。

どうもみむらです。

もう12月ですか・・。月日の過ぎるのは本当に早いですね。
私もいろいろなことがありすぎて、もう12月かと。そんな感じです。

いろいろと、今年は本当に反省に次ぐ反省の年だったように思います。
残った一ヶ月で、可能な限りリカバリーをしていきたいです。


2016/02/20 Update:

本記事の内容は Windows 10 環境では正常に動作いたしません。

Windows 10 環境をお使いの場合は、
Windows 10 で 3本指ジェスチャで仮想デスクトップを制御出来るようにしてみた。 – みむらの手記手帳
より、Windows 10 版をご利用ください。


 

さて、表題の件ですが、
これは各所の勉強会で2回ほど使ったネタで、
Mac の「3本指でタッチパッドをスワイプすると仮想デスクトップが切り替わる」
Mission Control のあれを Windows で実装してみた、という話です。

 

またこれは Windows 7 や 8 で動作するもので、Windows 10 のそれとはまた別ものです。

 

概要については次のスライドをご参照ください。

— 余談 —

同じネタを福岡と東京でやったのですが、
東京はかなり受けたのですが福岡の反応はイマイチでした・・。

んー。福岡受けするにはどうすれば良かったんだろう・・

— 余談ここまで —

 

 

また実際の動く雰囲気としてはこのような感じとなります

ディスプレイに対して直接描画命令を送って、スワイプしてる雰囲気を出したいなぁ・・(苦笑

 

実際の仕掛けとしては、CreateDesktop と SwitchDesktop を使って
ジェスチャを認識したらデスクトップを切り替えている流れになります。

 

CreateDesktop
http://msdn.microsoft.com/ja-jp/library/windows/desktop/ms682124(v=vs.85).aspx

SwitchDesktop
http://msdn.microsoft.com/ja-jp/library/windows/desktop/ms686347(v=vs.85).aspx

 

またジェスチャの認識には、
Synaptics 社の開発キットを用いて、タッチパッドの入力を直接取得した上で、
指の本数とその移動距離を取得して判定しています。

直接取得していますので、
Windows のウィンドウフォーカスの問題や、
Windows API レベルでのマウス操作の制約を受けません。

具体的には、仮想マシンをフル画面で表示して、
当然マウスは仮想マシンにキャプチャされている状況においても動作します。

 

その一方で機種依存がありまして
”Synaptics 社製タッチパッド搭載機” と “3本指を認識できるタッチパッド” が必要になります。

 

見分け方としましては、マウスの設定画面から “Synaptics” のデバイス設定に入り、

image

こんな感じで「3本指で・・」という項目があるコンピュータであれば利用可能です。

ただ、古い機種において、ドライバのバージョンの関係から、3本指ジェスチャを認識できるのにもかかわらず「3本指で・・」という項目がない機種も存在しますので、
使用するためにはこの項目があるマシンが必須というわけではありません。

 

また、使用の際はもちろん、この3本指ジェスチャのオプションは OFF でお願いします。
(ON のまま使用されますと、両方のジェスチャが実行され、いろいろと意図しない動作が発生する恐れがあります。)

 


限りなくベータ(もしかするとアルファかもしれない)版ですが、
バイナリデータを公開します。

ソースコードに関しましては、思いつきで書いた関係で私自身にも難読な状態になっていますので
リファクタリングを実行した上で公開致します。

 

検証環境:
マシン:Sony VAIO Pro 13, Sony VAIO Z VPCZ21AJ
OS:Windows 7 x64, Windows 8.1 x64
アプリケーション: VMware Workstation 10

ダウンロードリンク:
http://mimumimu.net/beta/programs/synaptics_switchdesktop.zip

注意事項:
・Windows 10 の仮想デスクトップ機能とは互換性がありません。
(これについてはまた別途、Windows 10 対応版を出したいと思っています。)
・Windows 8.1 において、切り替え先のデスクトップにてストアアプリおよびそれに付随する機能が使用できません。
・IE 11 やその他一部のソフトウェアにおいて、切り替え先のデスクトップで正常に動作しないソフトウェアが存在します。ご了承ください。

 

要望等ありましたら、可能な範囲で対応します・・
https://mimumimu.net/community/
https://mimumimu.net/bbs/