スキップしてメイン コンテンツに移動

投稿

12月, 2017の投稿を表示しています

MONIT でmacの通知センターにCPU、メモリなどの情報を表示する

 mac上で、 LinuxでいうConkyのようなシステム状況が一目でわかるようなソフトを購入したので紹介します。 MONIT  MONITは、macの通知センター上にCPU、メモリ、ディスク、バッテリー、ネットワークの情報を表示してくれるソフトです。  Mac App Storeからインストールすることができます。(有料:¥360,(2017年12月現在)) MONIT を Mac App Store で             起動すると最初にこんな画面が出てきて、 通知センターの一番下のある編集ボタンからMONITを追加しろと言われます。  追加したところはこんな感じ。   ここで、右上の i マークをクリックすると設定画面が開く。  ここでは表示するシステム情報の種類、温度表示、背景の色を変えることができる。  背景色は白と黒の二種類で、白を選ぶとこんな感じ。 自分は黒の方が好みなので、黒に設定した。   また、それぞれのシステム情報についての詳細が見たいときは、それぞれの項目付近をクリックする。  CPUの情報の表示はこんな感じ。  次はメモリ。  円グラフがわかりやすい。メモリ情報は意外と重宝します。  次はディスク情報。 BootCampがやばい...  また、最後に">"がついている項目はクリックするとさらに詳細な情報が出てくる。  次はバッテリー情報。   Cycle Countが地味に嬉しい。。。  最後にネットワーク。  全体的に、いろんな情報がシンプルにまとまっていてかなり見やすい。 感想  必要な情報がシンプルに、スタイリッシュにまとまっていて感動した。  システムの情報が一目で、詳細な数値でみることができるのは非常に大きいと思う。  macの標準アプリ、アクティビティでは表示される情報が多すぎてわかりづらい。  また、通知センターに常に表示されているので、見たいと思った時に1秒もかからずにみる事が出来るのも嬉しい点。  しばらく使って見ての感想は、  MONITのないmacにも 何かの意味はきっとあって  で

ksnctf #7 Programming 解けなかった。

 ksnctfの7問目、Programmingを解こうとしたけど解けなかった話。 問題   http://ksnctf.sweetduet.info/q/7/program.cpp  問題ページにはc++のコードっぽいものが書いてありました。  空白やタブばかりでぐちゃぐちゃだったので綺麗にしてみた。(これが落とし穴...) #include <stdio.h> #include <string.h> int main(){ const char *s =" " "0123456789" " "" "" " "ABCDEFGHIJ" ; printf("%c",strlen(s)); int i = 020000000 + 001000000 + 000600000 + 000040000 + 000007000 + 000000500 + 000000020 + 000000002; printf("%s",&i); long long l = 2LL * 11LL * 229LL * 614741LL * 9576751LL + 5LL; printf("%s",&l); float f = 1.0962664770776731080774868826855754386638240000e-38f; printf("%s", &f); double d = 6.7386412564254706622868098890859398199406890000e-308; printf("%s",&d); }  これを実行してみると... FROG_This_is_wrong_

ksnctf #6 Login を解く。

 ksnctfの6問目、"Login"を解いていきます。 問題   http://ksnctf.sweetduet.info/problem/6  問題ページには次のurlのみありました。   http://ctfq.sweetduet.info:10080/~q6/  このページにアクセスすると、  上のようなログイン画面が出てきます。  どうやら"admin"としてログインしろとのこと。  これはSQLインジェクションで解けそう。 解法  とりあえず定番の" ' OR 1=1 --"をID欄に入力して送信ボタンを押してみた。  ちなみに" ' OR 1=1 --"は1=1が常に真となり、'--'でそれ以降の文をコメント扱いにしてしまうので、SQL文全体が真となって必ずログインできるという優れもの。 Congratulations! It's too easy? Don't worry. The flag is admin's password. Hint: <?php function h($s){return htmlspecialchars($s,ENT_QUOTES,'UTF-8');} $id = isset($_POST['id']) ? $_POST['id'] : ''; $pass = isset($_POST['pass']) ? $_POST['pass'] : ''; $login = false; $err = ''; if ($id!=='') { $db = new PDO('sqlite:database.db'); $r = $db->query("SELECT * FROM user WHERE id='$id

ksnctf #5 Onion

 ksnctfの5問目、"Onion"を解いていきます。 問題   http://ksnctf.sweetduet.info/problem/5  問題文は意味不明な文字列が並べられているだけ。  とりあえず暗号か何かを疑ってみたりしましたが、文字列には空白文字もなければ意味不明な場所で改行していたりと全く手がかりを見つけることができなかった。   一時間ほど粘ってみたが、自分の知識ではどうにかなるものではないと悟った。  ここで先人の知恵を拝借。 解法   ヒントが書かれたページ を見ると hint1:base64 hint2:fileコマンド便利だよね と書いてあった とりあえず問題文をファイルにしてfileコマンドに投げてみると $ file onion onion: ASCII text   ここで問題文はASCIIコードで表すことのできる文字のみで構成されていることが判明。  次にbase64について調べると、 7ビットで表されるASCII文字しかやり取りできない環境で、他のデータも送受信可能にする為に元データを6ビットずつに分割し、分割された値に対応するASCII文字を割り当てている。 '000000'~'111111'に対応するASCII文字(= 'A'~'Z' , 'a'~'z' , '0'~'9' , '+' , '/')と'='のみで構成される。 76文字ごとに改行が入る。  また、デコードはweb上でもコマンドでもできる模様。  base64には改行が含まれているようなので、web上で実行しました。  一回デコードするとまたbase64らしき文字列が出てくるので、デコードできなくなるまでデコードを繰り返すと、 begin 666 <data> 51DQ!1U]&94QG4#-3:4%797I74$AU end  こんなのが出てきた。  これも暗号っぽいのでgoogle先生に聞いてみると、"

ksnctf #4 Villager A 初めての書式文字列攻撃。

 ksnctfの4問目、Villager A を解きました。 問題 https://ksnctf.sweetduet.info/problem/4  問題ページにはアドレス、ID、パスワードが書かれているのでSSHでログイン。  ログインしたら、とりあえずls。 $ ls flag.txt q4 readme.txt  readmeには大したこと書いてなかった。  flag.txtはもちろん開けない。  とりあえずq4を実行してみる。 $ ./q4 What's your name? Sugita Genpaku Hi, Sugita Genpaku Do you want the flag? はい Do you want the flag? yes Do you want the flag? نعم فعلا Do you want the flag? いいえ Do you want the flag? no I see. Good bye.  "no"と答えるまで煽られ続ける模様。  ユーザーが入力した値を出力しているあたり、この前本で読んだばかりの書式文字列攻撃を使うっぽい。  いきなりアセンブリ読むのもアレなのでstringsかけてみる。  stringsコマンドは、ファイルに含まれる文字列を出力してくれる。 strings q4 /lib/ld-linux.so.2 libstdc++.so.6 __gmon_start__ _Jv_RegisterClasses __gxx_personality_v0 libm.so.6 libgcc_s.so.1 libc.so.6 _IO_stdin_used fopen puts putchar stdin printf fgets strcmp __libc_start_main CXXABI_1.3 GLIBC_2.1 GLIBC_2.0 PTRh [^_] What's your name? Hi, Do you want the flag? I see. Good bye. flag.txt  どうにかすればfopenでflag.txtの中身を出力してくれると予想。  ここでもう一度

Union-Find木を実装する。。。

 最近競プロを始めて、UnionFindを使う問題に出会うことが増えたので実装してみた。 Union-Findとは  UnionFindは、素集合(互いに素な集合)を求めるアルゴリズムです。  例えば、グラフのある二つの頂点が連結されているかどうか調べたり、ある頂点にいくつの頂点が繋がっているかなどを調べるためのアルゴリズムです。 コード  チーター本の実装をアレンジした形になっています。 class UnionFind{ public: vector<int> uni; UnionFind(int s) : uni(s, -1) { } //頂点aが所属するグループを調べる int root(int a) { if (uni[a] < 0) return a; return uni[a] = root(uni[a]); } //頂点aと頂点bを繋ぐ。もともと同じグループの時falseを返す bool connect(int a,int b) { a = root(a); b = root(b); if (a == b) return false; if (uni[a] > uni[b]) { a ^= b; b ^= a; a ^= b; } uni[a] = uni[a] + uni[b]; uni[b] = a; return true; } //頂点a,bが同じグループであるかを調べる bool isConnect(int a,int b) { return root(

ARC087 / ABC082 A~D解こうとしてみた。

 ARC087 / ABC082を解いたので、初心者なりに考え方などを書いて行きます。  AtCoderの解説放送を参考にしています。 https://www.youtube.com/watch?v=GDuzZIuWs2Q A - Round Up the Mean  a+b+1の平均を取れば良い。 #include <bits/stdc++.h> using namespace std; int main() { cin.tie(0); ios::sync_with_stdio(false); int a,b; cin >> a >> b; cout << (a+b+1) / 2 << endl; return 0; } B - Two Anagrams  s,tをソートして、tを逆順にして比較すればおk。 #include <bits/stdc++.h> using namespace std; int main() { cin.tie(0); ios::sync_with_stdio(false); string s,t; cin >> s >> t; sort(s.begin(),s.end()); sort(t.begin(),t.end()); reverse(t.begin(),t.end()); cout << (s < t ? "Yes" : "No") << endl; return 0; } C - Good Sequence  数字が出てきた回数がその数字よりも少なかったら出てきた回数、多かったら回数-その数字で良い数列にすることができます。  数字が出てきた回数を数え上げるところで少し悩んだ。 #include <bits/stdc++.h> using namespace std; int main() { cin.tie(0); ios

ksnctf #3 Crawling Chaos解いた

 ksnctf3問目の、Crawling Chaosを解いていきます。 問題   http://ksnctf.sweetduet.info/q/3/unya.html  と書いてあるだけです。こんなの初心者にはわかる筈ありません。3分も考えずに答えを見てしまいました。  どうやら書かれているurlのページへ行きソースを見ると、怪しい文字列が書いてあるようです。 <!DOCTYPE> <html> <head> <meta charset="utf-8"> <title>Crawling Chaos</title> <style> form { text-align: center; margin-top: 4em; } input { font-size: x-large; } </style> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> <script> (ᒧᆞωᆞ)=(/ᆞωᆞ/),(ᒧᆞωᆞ).ᒧうー=-!!(/ᆞωᆞ/).にゃー,(〳ᆞωᆞ)=(ᒧᆞωᆞ),(〳ᆞωᆞ).〳にゃー=- -!(ᒧᆞωᆞ).ᒧうー,(ᒧᆞωᆞ).ᒧうーー=(〳ᆞωᆞ).〳にゃー- -!(ᒧᆞωᆞ).ᒧうー,(〳ᆞωᆞ).〳にゃーー=(ᒧᆞωᆞ).ᒧうーー- -(〳ᆞωᆞ).〳にゃー,(ᒧᆞωᆞ).ᒧうーー=(〳ᆞωᆞ).〳にゃーー- -!(ᒧᆞωᆞ).ᒧうー,(〳ᆞωᆞ).〳にゃーー=(ᒧᆞωᆞ).ᒧうーー- -(〳ᆞωᆞ).〳にゃー,(ᒧᆞωᆞ).ᒧうーーー=(〳ᆞωᆞ).〳にゃーー- -!(ᒧᆞωᆞ).ᒧうー,(〳ᆞωᆞ).〳にゃーーー=(ᒧᆞωᆞ).ᒧうーーー- -(〳ᆞωᆞ).〳にゃー,(ᒧᆞωᆞ).ᒧうーーー=(〳ᆞωᆞ).〳にゃーーー- -!(ᒧᆞωᆞ).ᒧうー,(〳ᆞωᆞ).〳にゃーーー=(ᒧᆞωᆞ).

ksnctf #2 シーザー暗号を解くプログラムを作る

 CTFの練習のために、今回からksnctfの問題を解いていこうと思います。   http://ksnctf.sweetduet.info/  ksnctfの1問目はフラグをコピペするだけなので飛ばします。 問題   http://ksnctf.sweetduet.info/problem/2   EBG KVVV vf n fvzcyr yrggre fhofgvghgvba pvcure gung ercynprf n yrggre jvgu gur yrggre KVVV yrggref nsgre vg va gur nycunorg. EBG KVVV vf na rknzcyr bs gur Pnrfne pvcure, qrirybcrq va napvrag Ebzr. Synt vf SYNTFjmtkOWFNZdjkkNH. Vafreg na haqrefpber vzzrqvngryl nsgre SYNT.  問題ページには、この文字列だけ書かれています。  この暗号は、シーザー暗号と呼ばれるもので、アルファベットを同じだけずらしていくことで答えを得ることができるようです。  アルファベットを一つずつ自分でずらしていくのもアレなので、プログラムを書いてみました。C++です。 #include <iostream> #include <string> using namespace std; int main() { //暗号を入力 cout << "Code : "; string s; getline(cin, s); //フラグに必ず含まれるアルファベットを入力 cout << endl << "KeyWord : "; string key; getline(cin,key); for (int a = 0;a < 26;a++){ //一つずつずらす for (int i = 0;i < s.length();i++){ if (s[

ページビューの合計

ラベル一覧を表示