G検定について
G検定とは - 一般社団法人日本ディープラーニング協会【公式】
はじめに
2020年第二回G検定(ジェネラリスト検定)の試験料が半額になっていたため受検したところ合格できたのでそれについて思ったことを書きます。
G検定とは
G検定(ジェネラリスト検定)とは、一般社団法人日本ディープラーニング協会が実施している資格試験です。ディープラーニングの基礎知識を有し、適切な活用方針を決定して、事業活用する能力や知識を有しているか検定します。
感想
もともと機械学習については少し勉強していたので、前日の夜から偉人の名前を詰め込み始め、テスト前には模擬試験で8割くらいとれるようにはなっていました。そして自信をもって本番に挑みましたが、、
?????????
法律問題多すぎね、、、??
今回のG検定では法律の問題が大量に出ました。もちろんつけ刃の僕がそんな問題解けるわけもなく結構長い時間鉛筆を転がしてました、、(笑)絶対落ちたと思って落ち込んでいたのですが、結果を見ると合格、、!
12552人中8656人が合格したようです。合格点低そう、、(笑)
受けて良かった点
- 時事問題の勉強をすることでAIの歴史に少し詳しくなることができた
- どんな場面で実際に機械学習が使われているのかを知ることができた
- 機械学習のアルゴリズムのロジックやそれぞれの問題点について確認することができた
おわりに
合格率が非常に高く、情報系の学生は持っていてもあまり自慢にならない感じがしたので、情報系で機械学習を学んでいる人にとっては別に受ける必要性はないと思いました。しかし、AIの歴史や機械学習の運用事例などを知ることができるため、機械学習、AIについて知りたいといった人にはおすすめの検定なのではないかと思いました。
本を買った
面白そうな本が売っていたのでポチってしまいました。これから少しずつ読み進めていこうと思います。
ksnctf(2)
ksnctf今日も元気にやっていきましょう!
G00913 30点
円周率の中で最初に出てくる連続した10桁の素数を求める問題です。 競プロerには優しい問題でしたね!
import math def is_prime(n): if n == 1: return False for k in range(2, int(math.sqrt(n)) + 1): if n % k == 0: return False return True pi = "31415926535 8979323846 2643383279 5028841971 6939937510 5820974944 5923078164 0628620899 8628034825 3421170679 8214808651 3282306647 0938446095 5058223172 5359408128 4811174502 8410270193 8521105559 6446229489 5493038196 4428810975 6659334461 2847564823 3786783165 " pi = pi.replace(" ", "") index = 0 while True: s = pi[index:index+10] if(is_prime(int(s))): print(s) break index += 1
この素数判定のプログラムの計算量はO(√n)なので、10桁の数を判定するのには105回の計算が必要です。コンピュータは1秒で108回くらい計算できるので、十分余裕をもって計算できます。
Basic is secure? 50点
pcapの中身がブラウザで表示されてしまい、ダウンロードすらできない、、、。
結局右クリックから名前を付けて保存でダウンロードすることができました(笑)
いつも通りwiresharkで分析していきます!
Basic
httpでフィルターをかけて、上から順番に、右クリック→追跡→HTTPストリームで見ていくと、No.13のところで、
Authorization: Basic ~
というのが書かれています。これはBasic64 で暗号化されているのですが、WiresharkにはデフォルトでBasic64の復号機能が付いています!AuthorizationをクリックするとCredentialsと出てきてFlagゲットです!
Basic認証は危険なんですね、、、。
Crawling Chaos 100点
一見何の変哲もないwebサイトですが、ページのソースを見ると、とんでもないスクリプトが書かれています。
(ᒧᆞωᆞ)=(/ᆞωᆞ/),(ᒧᆞωᆞ).ᒧうー=-!!....
何だこのスクリプトは、、、!と思いながらググると、console.logを使って複合できるそうなので、console.log((ᒧᆞωᆞ)=(/ᆞωᆞ/)........)のように書き換えてあげます。そしてhtmlファイルを開いて、DevToolsのconsoleを見ると、ちゃんと復号されています。
ここで最後のほうに注目すると、
ƒ Function() { [native code] } -0 "$(function(){$("form").submit(function(){var t=$('input[type="text"]').val();var p=Array(70,152,195,284,475,612,791,896,810,850,737,1332,1469,1120,1470,832,1785,2196,1520,1480,1449);var f=false;if(p.length==t.length){f=true;for(var i=0;i<p.length;i++)if(t.charCodeAt(i)*(i+1)!=p[i])f=false;if(f)alert("(」・ω・)」うー!(/・ω・)/にゃー!");}if(!f)alert("No");return false;});});
と書かれており、 平文のi文字目 × (i+1) = p[i] となるときに 絵文字が出力されていることがわかります。よってこれの逆の行動、つまりp[i] // (i+1) をすれば平文のi文字目がわかります。
p = [70, 152, 195, 284, 475, 612, 791, 896, 810, 850, 737, 1332, 1469, 1120, 1470, 832, 1785, 2196, 1520, 1480, 1449] for i, c in enumerate(p): print(chr(c//(i+1)), end="")
Onion 70点
わかんなかったので調べました。Base64が16回施されているそうです、、。こんなのどうやったらわかるんだ、、。
まあとりあえずCyberChefを使って16回復号してみます。
すると意味のありそうな形になりました。調べてみると、uuencodeというものが施されているそうです。そうとわかれば、これをtxtファイルに保存して、pythonを使ってdecodeします。
import uu uu.decode("a.txt","flag.txt")
これでカレントディレクトリにFlagが書かれたflag.txtが生成されて完了です!
VirtualBoxでWindowsからUbuntuをGUIでいじれるようにしたい
ctfをやっていると、いろんな環境が必要になります。
時にはwiresharkを使うためにWindowsを使ったり、また時にはlibureofficeを使うためにLinuxを使ったり、、、。
現在の僕の環境はデュアルブートでWindows10とUbuntu LTS20.04が入っているのですが、いちいち切り替えるのが面倒臭いんです、、、。
ということで
VirtuBoxを使ってWindowsからどっちもいじれるようにしよう!
となりました。
この記事を参考に進めていきました。
やってみた感想
重すぎて使えたもんじゃない!!!
設定をいろいろいじって少しは軽くなったものの、使うか悩むレベル。とりあえずこれについてはまた今度考えます。
ksnctf(1)
cpawctfが解き終わってしまったので今日からは
を解いていこうと思います。
36問もありますね!
Easy Cipher 50点
まずはいつものやつですね。
def encrypt(text, s): result = "" for char in text: if (char == " " or char == "."): result += char elif (char.isupper()): result += chr((ord(char) + s-65) % 26 + 65) else: result += chr((ord(char) + s - 97) % 26 + 97) return result ENC = "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." s = 13 print(encrypt(ENC,s))
もう書きなれたもんですね。
#! 20点
Unix系でコードを書きなれている人ならばみな知っているであろう、コードの最初に書くこいつ、、。意味は知っていても名前なんて知らねえよ、、(笑)
ということでググって完了。
Simple Auth II 20点
コードを読んでいくとsqliteにクエリを飛ばしているので、とりまSQLインジェクションをしてみるがうまくいかない。 結構考えてもわからなかったので調べると、database.dbが相対パスで指定されていることに気が付く。よってurlのauth.phpをdatabase.dbに変えてあげるとファイルをダウンロードできる。あとはDB Browser(SQLite)なりで開いてあげればFLAGをゲット!
Simple Auth 50点
とても単純なコードになっていて、明らかにstrcasecmpが何か問題を起こすだろうと予想した。調べるとどうやら脆弱性があるらしい。引数に配列を渡すとnull (0)を返すらしいので、今度はphpのinputに配列を投げる方法を調べる。inputタグのnameを配列の形にしてあげればいいらしいので、Chrome Dev Toolsからhtmlを書き換えて送信を押したらFlagをゲット。
これぞCTF!って感じの面白い問題でした。
今日はこの辺にして続きは次回やります!