ちょっとしたWindows向けウィルスをPythonで作ろう
プログラマーはたまに「ハッカー」と呼ばれることなんてあります。
ハッカーって言葉のイメージと言えばウィルスです。
そうだ、ウィルスを作ろう!
これが今回のテーマです。
と言っても悪いことしたら捕まってしまうので、
友達にメールでexeファイルを送りつけて「便利アプリだよ!実行してみて!」と嘘ついて実行させると、「うわっ」と思われる程度のものを作ります。
(自己増殖しないので、今回の場合は正しくはコンピューターウィルスでなく マルウェア と呼ぶのが適切ですが、一般的な言葉の認知のもとウィルスと書きます)
参考にしたのはこちらのサイト : How to Make a Simple Computer Virus with Python
Pythonからexeファイルを作るには?
拡張子が .py じゃ誰もクリックしてくれません。 .exe ってなっててほしいですよね。
そのために使うのがこちら PyInstaller です!
exeファイルの実行開始が遅いとかいう悪評も見ましたが、 py2exe や cx_Freeze はうまく扱えなかった(Visual Studioをインストールするのはめんどうだった)ので最終的に PyInstaller にしました。
実際使ってみましたが、今回はファイルサイズが小さいからか、exeの実行開始が遅いとは感じませんでした。
PyInstaller を使ってみよう
Windows PowerShell で作っていきます。
Chocolatey は導入済みだとします。
1. Python をインストール
choco install python -y
2. PyInstaller をインストール
pip install PyInstaller
インストールできたら
pyinstaller -v
で、バージョンが表示されることを確認しましょう。
3. カンタンな Python コードの作成
てきとうな名前のフォルダを作って、そこに hello.py という名前のファイルを作って以下のように書いて保存します。
# -*- coding: utf-8 -*- import time print("Hello exe") time.sleep(2)
4. PyInstaller で exeファイルを作成
hello.py を作ったフォルダーに cd コマンドで移動していったのち、
まずは
python hello.py
で、作ったPythonコードが実行可能か試します。
「Hello exe」と表示されたら成功です。
次に PyInstaller で exeファイルにしましょう。
( -F
のオプションは、exeファイル単体を出力するためのオプションです)
pyinstaller -F hello.py
つらつらと文字が流れたのち「completed successfully.」の文字が最後に見えたら成功です。
フォルダー内に「dist」という名前のフォルダーが作られて、そこに「hello.exe」が出来上がっているはずです。
ダブルクリックで実行しましょう。
「Hello exe」と表示され、2秒経つと自動で終了します。
ファイルを作成するPythonコードを書こう
「Hello exe」と表示するだけでは物足りません。
ウィルスといえばやっぱりファイル操作。
といっても削除や拡張子の変更は本当に迷惑すぎるので、今回は大量のファイル作成ということにしておきましょう。
thousand_dreams.py という名前のファイルを作成し、以下のように書き込みます。
# -*- coding: utf-8 -*- for num in range(1000): f = open("X%06dX" % num, "w") f.truncate(1024 * 1024) # 1MB f.close
PyInstaller で exeファイルにします。
(今度は -w
オプションを加えています。これはexeファイル実行時にコンソールウィンドウを表示させないためのオプションです)
pyinstaller -F -w thousand_dreams.py
dist フォルダに thousand_dreams.exe が作られたと思います。
これをダブルクリックするだけで、1MBのファイルが1000個作られます!
けっこう迷惑です。
ちなみに、もとは1000個でなく1000000個(100万個)のファイルを作成するプログラムだったのですが、
実行したらストレージは切羽詰まってくるし(なにしろ100GBぶん作られるので)
どんどんCPU使用率は上がってくるしで、あわててタスクマネージャーからストップしました。
このように、 数行のプログラムでカンタンに友達を減らすようなアプリが作成できてしまいます!
なんてプログラミングはおそろしいんだ・・・。
プログラミングとウィルスの関係に興味を持ったら、
以前流行ったランサムウェアの学習用の実装なんかもGitHubで読めますので、ウィルスへの理解を深めると良いでしょう。
コンピューターを守るには、敵を知らなければならないのです。
セキュリティソフトをインストールしない人が世の中にはいますが、ウィルスは簡単に作られ世界にばらまかれます。
しっかりセキュリティソフトをインストールして、最低限の防衛をおこないたいところです。たった1日10円以下です。安いもんです。
私はカスペルスキーとESETを使ってます。
カスペルスキー、セキュリティ性能は高いんだけどファイアーウォールが頑張りすぎててバリバリパソコン使うような人だと引っかかることが多い。
カスペルスキーの方が優秀だけどESETくらいゆるくても充分なんじゃないか、と思ったりもします。
あとは最近海外で評価を得ている BitDefender がちょっと気になってる。
ESET ファミリー セキュリティ (最新版) | 5台3年版 | カード版 | Win/Mac/Android対応
- 出版社/メーカー: キヤノンITソリューションズ
- 発売日: 2017/04/01
- メディア: License
- この商品を含むブログを見る
- 出版社/メーカー: KasperskyLabs Japan
- 発売日: 2016/10/13
- メディア: CD-ROM
- この商品を含むブログ (1件) を見る
letsencrypt renew 後に nginx restart が必要
久しぶりにメモ。
自分で管理してるサイトにアクセスしようとしたら
SSL証明書の有効期限切れエラーを見ることに。
で、なんか設定忘れてるのでは、という気がして他の人の renew のやり方見ていたら、(Let's Encrypt で Nginx にSSLを設定する - Qiita)
「nginx再起動してるじゃん!」と気付いたので
sudo service nginx restart
そうすると、ちゃんとHTTPS接続ができるようになりました。
nginx restart させなきゃなのね。
そんなわけで、Ansibleを修正しつつ、サーバーの方でも
sudo crontab -e
で root の cron 設定を
0 4 * * * letsencrypt renew --non-interactive --no-self-upgrade
から
0 4 * * * letsencrypt renew --non-interactive --no-self-upgrade && sudo service nginx restart
に変更しました。めでたし。
これでもまた3ヶ月後にHTTPS接続できなくなったら悲しいな……(でもありそうだな)
〜追記:2018年4月15日 4:24〜
「SSH証明書」って書いてたので「SSL証明書」に直しました。
それから、 nginx restart でなく nginx reload で大丈夫っぽいです。(そうじゃないとサイトに接続できなくなる時間が出来るので大変なはず)
インフラ周りの話はなかなか自信ないです・・・
エンジニアが辞めない組織について本気出して考えてみた
↓ この記事は 『ハトネコエの人事・採用ブログ』 側へ移動しました! ↓