ブログの名前なんて適当で良いのでは

説明を求めるな、記事を読め

Go言語 Webスクレイピング用ライブラリ Surf を使ってみる

はじめに

Surfとは、WebスクレイピングするためのGo言語用のライブラリである。イメージとしては、RubyMechanizeのGo言語版とでもいった感じだろうか。
Rubyだと導入の際にRuby環境が求められてしまうが、Go言語は単一のバイナリを吐くことができるため、そういった障壁を超えることができて、とても便利だ。
Surfは日本人があまり使っていないせいか、日本語記事が少ないので、公式のチュートリアル的なことを日本語で残しておこうと思う。 題材としては、GitHubにログインするといった処理をSurfを使って書いてみようと思う。

Surfの導入

go getするだけ。

$ go get github.com/headzoo/surf

Githubにログインするコードを書いてみる

Webスクレイピングする際は、WebページのHTMLをにらめっこしなくてはいけないので、https://github.com/loginに行き、ソースを表示してみよう。
ソースを見てみると、どうやらformタグは1つで、その中に、ユーザネームを入れるためのname="login"とパスワードを入れるためのname="password"という2つのinputタグがあることを確認できる。 では、これらの2つのinputタグに値を入れて、実際にログインボタンを押す処理を書いてみよう。と言っても、ソース自体短いので、貼っておく。

package main

import (
    "os"    
    "fmt"
    "github.com/headzoo/surf"
)

func main() {

    bow := surf.NewBrowser()

    err := bow.Open("https://github.com/login")
    if err != nil {
        fmt.Println(err.Error())
    }

    fm, err := bow.Form("form")
    if err != nil {
        fmt.Println(err.Error())
    }

    fm.Input("login", os.Getenv("GITHUB_USERNAME"))
    fm.Input("password", os.Getenv("GITHUB_PASSWORD"))

    if fm.Submit() != nil {
        fmt.Println(err.Error())
    }

    fmt.Println(bow.Body())

}

まずはじめに、surf.NeBrowser()で、ブラウザ用のインスタンスを生成する。次に開きたいURLを引数に、Openメソッドを実行する。適宜エラー処理などをしたら、formタグのインスタンスを取得する。
この処理には、Formメソッドが使えて、引数にform.class_nameのようなCSSセレクタを利用することができる。このように引っ張って来たい要素を指定できるのは、便利だろう。次に、そのformタグ用のインスタンスに対して、Inputメソッドを実行する。これは、1つ目の引数にname属性の値、2つ目の引数に、入力したい値を入れることで、入れた状況を生成できる。ログインに必要なユーザ名とパスワードを入力する。
最後に、ログインボタンを実行しなくてはいけないので、Submitメソッドを実行する。これを行うことで、現在のブラウザ用のインスタンスは、見ているページが代わる。そこで、Bodyメソッド使って、実際の内容を表示してみると、ログイン後のページが表示されていることがわかる。

おわりに

Go言語のWebスクレイピング用のライブラリSurfを使って、GitHubのログイン処理を行ってみた。ソースコードの記述量からもわかるように、長くなりがちなGolangにしてはかなりスッキリとかけている。今まで、ライブラリが便利でその言語を使ってスクレイピングしていた人も、このSurfを使ってGo言語でのWebスクレイピング生活を送ってみてはどうだろうか。

nasneを買った

はじめに

家族と酒を飲み、気づいたら、前から気になっていたnasneが手元にあった。

nasneとは、PS3PS4と連携してテレビの録画を取れたり、NASとしても使えたりする便利グッズの一つだが、 PS3を売り払って、PS4ではなくNintendo Switchに寝返った私としては、使えない製品だと勝手に思っていた。 しかし、ひょんなことからnasneはPS機器がなくても使えるということを知った。ただ、録画とか閲覧とかに外部アプリを使う必要があるらしい。
でもそれを考慮しても、PS4などを新しく買うよりは遥かに安い。 今回は、そのnasneを購入後にやったことを備忘録としてまとめておく。買ったのは、以下の製品である。

nasne

設定

箱を開封すると、LANケーブル、アンテナケーブル、電源コード、nasne本体、B-CASカードが入っている。nasne自体にはアンテナケーブルのINとOUTがついており、もとTVについていたアンテナケーブルを取り外し、nasneのINに、付属のアンテナケーブルをnasneのOUTからTVに装着する。
その他電源やLANケーブル等を接続して少しすると、疎通が取れるようになるのだが、普通の人だとPS機器を持っていないと次にどうすればいいのか一瞬悩むが、IPが振られているということはすでに勝ちなので、アクセスして見ると、nasne_home というディレクトリが存在し、その中に、index.htmlがあって、それを開くと、各種設定ができるようになる。

f:id:encry1024:20180722131421p:plain

とりあえず以下の設定を行った。

  • チャンネルスキャン
  • アップデート
  • リモート録画ができるようにするための登録
  • アップデート
  • 固定アドレス(常時動かしとく系はそうしているというだけ)

とりあえずここらへんを済ませると録画自体はできそうな感じ。

アプリ連携

どうやらVAIOとかだと無料でPC用のソフトがあるらしいが、Macではな無くて、仮想上でも使えないみたいなやつらしく、サードパーティなやつを使うしか無いみたい。以下が有名らしいけど、評価が低いからうんたらかんたらと誰かの記事でみた。

DTCP-IPプレーヤーアプリ

またiPhoneのアプリだと「torne mobile」があり、これを使うと操作ができるそうだが、録画とかをするためには課金が必要(でも600円程度)なので注意。今回はとりあえず、このアプリをダウンロードしてきて、iPhoneに入れて使ってみている。ちょうど今録画を試しに走らせている最中だ。さらに800円ぐらい課金すると書き出し機能もあるらしい。もちろんだが、iPadでもこの購入自体は引き継げるので、iPadでも録画した動画を見ることができる。非常に便利だ。

おわりに

勢いでnasneを買ったが、地味に便利なのではと思い始めてきた。私自身はよくTVを見るタイプの人間なので、外から録画できるという機能がどれぐらい役に立つのかわくわくしながら明日からの社会をがんばっていきたい。

ウェアラブルスピーカーを買った

いやぁ結構つらいですね、色々と。

そんなわけで、巷で有名だった「ウェアラブルスピーカー」を購入してみました。 今回私が購入したのは、以下の商品です。

https://www.bose.co.jp/ja_jp/products/speakers/portable_speakers/soundwear-companion.html

首からかけるタイプで、Bluetoothで接続できます。 初めてのBOSE製品で、そういう面でも良さを感じています。

このデバイスのとても良いところは、メガネをかけている人とかだとヘッドホンすると耳が痛くなるという現象を対策することができます。

実際にかけてみるとこんな感じです。

f:id:encry1024:20180501210917j:plain

1週間ほど使ってみて個人的に感じた所感を箇条書きでまとめておきます。

  • Bluetoothはやはり便利
  • 首に重さを感じると思ったが、ぶっちゃけ気にならない
  • 音は普通に漏れ、指向性はないので、家で使うしかない
  • 映画とかだと臨場感があるサウンド、特に低音を感じられる
  • ヘッドホンなどと違い耳が密封されていないのに、耳元で音がなるので少し不思議な感覚
  • 便利ではあるが、3万出すのはちょっと高いかなぁ・・・

値段が高いという点を除けば面白いアイテムなので、お金に余裕のある方はぜひ使ってみてください〜

Rust用VirusTotalライブラリを強化したら、VirusTotalに掲載してもらえた話

はじめに

encry1024.hatenablog.com

以前、VirusTotalのRust用ライブラリが見当たらないということで、需要があるかは知らないが軽くモックを作成したという話をブログに投稿した。
今年の4月から新社会人として忙しい日々を送っているわけだが、新入社員研修中だからといって、コードを書く感触を忘れてはならないので、このライブラリをもっとまともに拡張しようと決意した。また、一つの目標としてある程度ちゃんと作って、VirusTotal APIの利用例のところに載せてもらうことを目標にがんばった。(これに関してはまたあとで詳しく記述する)

前回との差分

github.com

対応APIを増やした

以前はモックとして作成しただけなのでURLの検査ぐらいだったが、ファイル、ドメインIPアドレス、コメントなど様々なAPIに対応させた。対応している機能は、GitHubのREADME.mdに書いてある。

ドキュメンテーションを書いた

これに関してはまだ不十分かもしれないが、ドキュメンテーションを作成した。また、小さなexampleも添えたので使い方には困らないと思う。(まぁどれもまったく同じような使い方しかしないので、一回使えば関数名変えればすぐ使えるのでそこまで需要はないかもしれないが)

crates.ioに公開した

前回のはGitHubにあげていただけなので、Cargo.tomlとかに書いて読み込めるようにcrates.ioにアップロードした。この手順は以下のサイトを参考にした。簡潔、明瞭で非常に分かりやすかった。

takatorix.hatenablog.com

これからの課題

まだテストコードを書いていないのと、行き当たりばったりな実装をしているため、レスポンスのjsonのデシリアライズが適当な感じがある。というのも、構造体名とかを適当につけてしまっている。使う人がいるかわからないけど、迷惑がかからないうちに規則の整った名前に一括して変更したいと思う。

VirusTotal API 利用例一覧のところに名前が乗った

実は、この記事を書いているのもこれが嬉しかったから、せっかくだしまとめようと思った次第である。 VirusTotalのページの中で、APIを使って作られた利用例一覧のページが存在する。 support.virustotal.com

f:id:encry1024:20180416213121p:plain そして、ここに自分のライブラリ、そして名前が掲載されたのだ。
見ればわかるが、実はRustのライブラリが今まで一個もなかったのだ。やったね先駆者になれた(極小領域で)

おわりに

実装して、英語で交渉するだけで達成できる感じではあるが、有名なサービスの末端にでも自分の名前が乗ると嬉しいという感情を初めて体験した。OSS等にもまったく貢献していないので、貢献したら自分のコードがマージされた時の嬉しさっていうのはこういう感じなんだろうなぁと思った。
終盤、非常にエモい内容になったが、Rustしか使えないけどVirusTotal使いたいっていう人の役に立てたら幸いです(そんな人おるんか?)

Franzのfilmarks用プラグインを作成した。

はじめに

学生生活が終わり、明日は入社式。 社会人になってもプライベートで、何かアイディアを形にしたり、便利なものを作ったり、改良したり、そういう心持ちでがんばりたいと思います。 というわけで、タイトルのものを作りました。

Franz

そもそもFranzってなんだよっていう人は以下の記事でも見てみてください。

liginc.co.jp

簡単に言うと、いろんなチャットツールなどを一元管理できるアプリです。 実は、結構初期から使っているんですが、あまり人におすすめしたことはなく、最近ようやく知名度が上がってきたかなぁという感じだと思います。一元管理できる系は、賛否両論あると思いますが、私は好きです。

Franzで管理できる例として、有名なチャットサービス系Slack 、ChatWorkを始め、TrelloやGitHubなどいろんなサービスがもとから管理できるようになっています。ただ海外で有名なサービスがほとんどで、日本人にとっては馴染みが薄いサービスも多いです。 しかし、Franzの良いところは拡張のプラグインが簡単に作成できるという点です。当初は、ほとんど日本語記事がありませんでしたが、最近はちらほらQiita等でも見かけます、基本1次ソースを追うほうが良いのは自明で、GitHubプラグインリポジトリを見れば、作り方はすぐわかると思います。

github.com

ざっくりまとめると、アイコンに使う icon.svgicon.png、サービス情報などを記載するpackage.json、Franzでサービスを追加する際に呼ばれるindex.js、画面のUIを担当するwebview.jsディレクトリにまとめて、所定のプラグインディレクトリに入れれば良いだけです。

Filmarks

Filmarksってなんだよっていう人も多いと思うのですが、これは映画視聴管理SNSです。見たい映画のclipや、見た映画のレビューを書いたり、フォロー、フォロワーが見た映画とかを教えてくれたりする感じです。まぁ誰も知らないと思うんですが、私はめちゃくちゃ洋画を見るので、こういう感じのもので管理しないと辛いという現状があります。ちなみに私のアカウントは、これです。

filmarks.com

ツイッターほど流速が早いわけではないですが、定期的に見たり、映画検索に使いたいサイトなので、Franzで試しに管理してみようと思いました。それで作成したプラグインはこちらです。

github.com

一応、フォロワーからのイイネ的な新着通知の数も取得してFranz側で表示したようにしてます。 Filmarks上で新着があると、Franz側ではこんな感じで表示されます。

f:id:encry1024:20180401172949p:plain f:id:encry1024:20180401172953p:plain

おわり

JavaScriptの初心者の私でもリポジトリ見れば簡単に作れたので、常時見ておきたいサイトなどがある人は、Franzを使って一元管理してみると便利かもしれません。ぜひ作ってみてください。

Filmarksの中の人へ
Filmarksには公式のAPIとかがないので、提供するのが義務とは思っていませんが、いろいろと情報を集めたいときにHTMLゴリゴリパースプログラムを書かなくてはいけなくてしんどいので、もしFilmakrsの中の人が見てたら、公式API提供とかも考えてくださると大変うれしく思います。 Filmarksはとても使いやすくてデザインも好きで大ファンです。

angstrom ctf 2018のwriteupと感想

Twitter上でとあるプロがWeb全完しているツイートをしていたので、僕もWebだけチャレンジしてみた。

Source Me1

HTMLを見るとパスワードが書いてあるので、普通にログインするとフラグ
actf{source_aint_secure}

get me

パスにauthパラメータがあるので、これをtrueにすればフラグ
actf{why_did_you_get_me}

Source Me2

HTMLを見るとJavaScriptでなんかのmd5値の比較があったので、そのハッシュ値をググったら、password1234がでてきた。これを使って普通にログインするとフラグ
actf{md5_hash_browns_and_pasta_sauce}

SEQUEL

適当にシングルクォーテーションを入れると以下のエラーがでる。

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in /root/problems/web/sequel/deploy/source/public/index.php on line 5

よって、 ' UNION SELECT 1, 2 #-- とかやればログインできてフラグ
actf{sql_injection_more_like_prequel_injection}

MADLIBS

http://web2.angstromctf.com:7777/get-source からソースが見れる。 app.secret_keyflag.txtの内容を読み込んでいることがわある。 あとまぁ自明にSSTIだとわかるので、試しにAuthorNameに適当な入力を {{ 1 + 2}} とすると、3がHTMLに描画される。app.secret_keyとかは、app.configに辞書型として保存されているので、{{config}} を投げてみると一気にリークするので、その中にフラグ

(でもなんでapp.configじゃなくてconfigでいいんだろう・・・グローバル定義されているのかな・・・) actf{wow_ur_a_jinja_ninja}

md5 (writreupを見て理解)

ソースを見ると、入力は違うけど、salt付きmd5が等しい場合にFLAGを出力する問題

<?php  
  include 'secret.php';  
  if($_GET\["str1"\] and $_GET\["str2"\]) {  
    if ($_GET\["str1"\] !== $_GET\["str2"\] and  
        hash("md5", $salt . $_GET\["str1"\]) === hash("md5", $salt . $_GET\["str2"\])) {  
      echo $flag;  
    } else {  
      echo "Sorry, you're wrong.";  
    }  
    exit();  
  }  
?>

よくあるタイプのmd5比較かと思いきや、===で比較している。うーんと考えていて結局わからなかった。誰か教えて。 他の人writeupを見たら、PHPだと以下のような結合が可能なみたい。

php > echo "secret" . array();
secretArray
php > echo "secret" . array("x", "y", "z");
secretArray

なので、配列としてパラメータを投げてあげれば良い。

http://web.angstromctf.com:3003/?str1[]=a&str2[]=b

actf{but_md5_has_charm}

FILE STORER

アカウント作ってログインしてみると、URLを指定してファイルをuploadできる。色々見ても特にそれっぽい手がかりがないが、files以下で.gitとかにアクセスすると、\[Errno 21\] Is a directory: u'.git' とか出るので、存在が確定。 dvcs-ripperを使ってしゅっと取ってくる。

$ dvcs-ripper/rip-git.pl -u http://web2.angstromctf.com:8899/files/.git

取得してきたファイルの中ににindex.pyがあるので見てみると、最初のほうでadminユーザの作成を行い、そこでadminのパスワードがフラグだとわかる。

class user:
    def __init__(self, username, password):
        self.username = username
        self.__password = password
        self.files = []
    def getPass(self):
        return self.__password

users = {}

users["admin"] = user("admin", os.environ["FLAG"])

また、後ろの方に/user/usernameのルーティングがあることがわかる。

@app.route("/user/<username>", methods=['POST'])
def getInfo(username):
    val = getattr(users[username], request.form['field'], None)
    if val != None: return val
    else: return "error"

よって、/user/adminに対してPOSTで、fieldパラメータに_user__passwordを設定して投げればフラグ

$ curl -X POST -d "field=_user__password" http://web2.angstromctf.com:8899/user/admin

actf{2_und3rsc0res_h1des_n0th1ng}

the best website (時間内には解けなかった)

アクセスするととりわけ、いわゆる普通なページが表示される。ソースコードを見ると、コメント文でlog.txtとあるので、アクセスしてみると以下の様に出る。

Sat Aug 10 2017 10:23:17 GMT-0400 (EDT) - Initial website
Sat Aug 10 2017 14:54:07 GMT-0400 (EDT) - Database integration
Sat Aug 11 2017 14:08:54 GMT-0400 (EDT) - Make some changes to the text
Sat Mar 17 2018 16:24:17 GMT+0000 (UTC) - Add super secret flag to database

何をやったかとその時間が表示されている。一番最新のコメントからデータベースにフラグがあるとわかる。 そこで、データベースとの通信している箇所を探してみると、怪しい感じの通信がある。

http://web.angstromctf.com:7667/boxes?ids=5aad412be07e1e001cfce6d2,5aad412be07e1e001cfce6d3,5aad412be07e1e001cfce6d4

これのレスポンスが以下である。

{"boxes":[{"_id":"5aad412be07e1e001cfce6d2","data":"Go away.^This website has literally nothing of interest. You might as well leave.","__v":0},{"_id":"5aad412be07e1e001cfce6d3","data":"You will be very bored.^Seriously, there's nothing interesting.","__v":0},{"_id":"5aad412be07e1e001cfce6d4","data":"Please just leave.^Scrolling more will only give you more boring content.","__v":0}]}

要は、idを3つ指定してその要素がレスポンスされている。あまりデータベースに詳しいわけじゃないので、_idを検索してみると、Mongodbの記事がいっぱいヒットするので、Mongodbだとわかる。 次に、どうやってここからフラグを引っこ抜くかだが、指定したidの情報を返してくれるという機能があるので、フラグが格納されているデータのid情報をおくれば良いと考え、mongodbのid生成方法についてぐぐると以下の記事を見つけた。

http://toshitanian.hatenablog.com/entry/2014/02/14/015314

これを見ると、mongodbのidは以下のフォーマットになっているらしい。

4バイトの,[Unix](http://d.hatena.ne.jp/keyword/Unix)エポックからの経過秒数([Unix](http://d.hatena.ne.jp/keyword/Unix)時間)
3バイトのマシンID
2バイトのプロセスID
3バイトのカウンタ(開始番号はランダム)

最初のlog.txt情報からフラグをデータベースに追加した時間はわかり、5aad4131となる。次にマシンIDとプロセスIDはきっと同じだろうと予想して、カウンタの末尾1byteだけをブルートフォースするスクリプトを書いて回していたら、5aad4131e07e1e001cfce6d5のidで、フラグが降ってきた。

actf{0bj3ct_ids_ar3nt_s3cr3ts}

日商簿記3級 受験体験記

はじめに

本日,第148回の日商簿記3級を受けてきました. 合否はまだですが,解答速報の結果とかを見る限り9割後半での合格してそうです.これで落ちてたら面白いですね.そしたらこの記事はきっと消えます.

2018年3月15日 追記 97/100点で1問ミスで合格していました。良かったね。唯一やらかしたミスは、凡ミスで計算に使う値を間違ってしまった感じです。

普段パソコンオタクがやっている僕が,なぜ簿記の試験を受けたのか疑問に思う人が多いと思いますが僕にもよくわかりません.(は?) たぶん,最近はIPA情報処理試験しか受けていなくて,違うタイプの資格の勉強とそのテストを受けたかったんだと思います.3級は個人事業主の仕訳とかが主なテスト範囲なのですが,最終的には決算整理をして,貸借対照表損益計算書を作るところがゴールになるので,企業内のお金のこととかもこの資格を通して勉強したことにより理解しやすくなるんだろうなぁという感じはしてまぁ無駄ではなかったかなぁという感じがしています.

さて,前置きはこれぐらいにしておいて,簿記3級を初めて受ける人の参考になるように勉強法とかを記録しておきたいと思います.半分自分の日記も兼ねているので読みにくいかもしれませんが. 重ね重ねいいますが,僕はただのパソコンカタカタする人間で,大学もパソコンカタカタ学科なので,0から勉強する人とまったく同じスタートラインだと思ってください.

教材

教科書としては以下の本を利用しました.

https://www.amazon.co.jp/みんなが欲しかった-簿記の教科書-日商3級-商業簿記-みんなが欲しかったシリーズ/dp/4813268897

問題集としては以下の本を利用しました.

Amazon CAPTCHA

この2冊からわかるように予想問題集のようなものは買いませんでした.最初は過去問題集も買わない予定でしたが,後から振り返ってみてみると買わないと合格はさすがに厳しいと感じました.

勉強の流れ

まず全体的な勉強時間に関してですが,合計約1ヶ月ぐらいだと思います.ただ,卒業論文に追われたりしながらやっていたので,1月の勉強量はかなり少なく,2月も試験直前の1週間しかやっていません.さらに言えば試験1週間前にインフルエンザB型になってしまったので,時間換算して見れば結構少ないかもしれないです.

教科書を使って知識を詰め込む

1月中は少ない時間をやりくりしながら上述した教科書を用いて勉強しました.この本に「二回は読んで二回は演習問題を解く」ということが書いてあったので,その通りやりました. 簿記では,勘定科目という仕訳をする際に重要な用語が数多く出てきます.例えば,いわゆる通貨・紙幣は,現金(資産) といったように勘定科目名と,属する貸借対照表損益計算書の中の5つのカテゴリがあるので,これも両方しっかりと覚えるようにしました.あと普段パソコンオタクをしているせいで字を全く書かないので漢字練習をやる小学生の如く何回も書いたりもしました. また,この資格においてゴリ押しで暗記するとコケる(もとい勉強するのが目的だったので最初からこれをやろうとは思いませんでしたが)ので,理解しながら覚えるようにしました.よくある店主個人の所得税租税公課として処理しないといったような細かいところも見逃さないように本の隅々まで見ました.あとは,簿記の試験どの問題も突き詰めれば仕訳がしっかりできていないと後段の計算も間違ってしまうので,最低,仕訳問題は解けるということを意識して取り組むと良いかもしれません.試算表や貸借対照表の説明とかはありますがこれらは読むより解く方が慣れるので演習の時期にたくさんやればなれます.

過去門演習

次に試験1週間前ぐらいに過去問題集を買ってきてやりました.とりあえずこの頃にはインフルエンザだと発覚する前ですが発熱していたので,無理をしない程度に1日2回分ぐらいやっていて(たまに多くがんばったり),試験の2日前には掲載されている12回が終わるようにしました.ちなみにこの12回の点数はほとんど70 ~ 85ぐらいで,最後の二回だけ慣れてきたのか90点台が出ていました. やるとわかるのですが,第3,5問が配点が大きくなおかつ計算も大変です.いかにこの2つの計算や電卓計算が慣れれるかが勝負どころだとは思います.しかしこれらもまずは仕訳をしなくてはならないので,第1問に出てくるような仕訳ができないと元も子もないです.

試験前日

試験前日は,過去に間違った問題を見直したり,自分なりの直前チェックシートを作ってそれを眺めたりしていました.試験当日はこの直前チェックシートを見てました.この直前チェックシートでは,過去門演習を通して自分がやりがちな間違いとかどうしても覚えきれていないこととかを書いておきました.

反省点

章を作ったけれど正直あまり反省点はないかもしれない.一応教科書にあるようなことはほぼ頭に入ったし,1年とおしてどうやって個人商店がお金の管理をしているのかとかもわかったし. ただ,唯一あるとすれば,すべり止めがしっかり効いた電卓を使うべきだったということかもしれない.試験本番になるとやはり力が入るので普段キーボードを叩くような感覚で電卓を叩く.そうするとすべり止めが甘い電卓だと打っている最中にどんどんずれてとても打ちにくい.第3問とかは百万単位ぐらいの足し算を10回連続で計算したりするのでとても打ちにくかった.受ける人は,いつもより早く強くタイプしても電卓がずれないかを確認しておいたほうが良いと思う.

おわりに

合否もでてないがこんな記事を書いてしまって,ここまで来て今更ながら落ちていたら恥ずかしいなと思うんですがまぁきっと受かっているでしょう.もしゼロから簿記3級を勉強しようとしている人の参考になると嬉しいです.