Submit Search
Upload
難読化PowerShell芸入門
•
4 likes
•
4,152 views
X
xztaityozx
Follow
2019/08/10開催の第43回シェル芸勉強会大阪サテライト LT大会で使った資料です
Read less
Read more
Engineering
Report
Share
Report
Share
1 of 46
Download Now
Download to read offline
Recommended
SharePoint Framework の最新情報をキャッチアップしよう!
SharePoint Framework の最新情報をキャッチアップしよう!
Ai Hirano
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
Tetsutaro Watanabe
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
Apache Airflow 概要(Airflowの基礎を学ぶハンズオンワークショップ 発表資料)
NTT DATA Technology & Innovation
OpenvswitchでVPS
OpenvswitchでVPS
Daisuke Nakajima
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
RDB技術者のためのNoSQLガイド NoSQLの必要性と位置づけ
Recruit Technologies
SSRF対策としてAmazonから発表されたIMDSv2の効果と破り方
SSRF対策としてAmazonから発表されたIMDSv2の効果と破り方
Hiroshi Tokumaru
PowerShellでWebブラウザ(Selenium Webdriver)を動かした話
PowerShellでWebブラウザ(Selenium Webdriver)を動かした話
洋史 東平
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
infinite_loop
More Related Content
What's hot
Azure Monitor Logで実現するモダンな管理手法
Azure Monitor Logで実現するモダンな管理手法
Takeshi Fukuhara
【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介
【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介
日本マイクロソフト株式会社
徳丸本ができるまで
徳丸本ができるまで
Hiroshi Tokumaru
今さらだけどMySQLとライセンス
今さらだけどMySQLとライセンス
Hidenori Ishii
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ
日本マイクロソフト株式会社
Azure でサーバーレス、 Infrastructure as Code どうしてますか?
Azure でサーバーレス、 Infrastructure as Code どうしてますか?
Kazumi IWANAGA
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
Tetsutaro Watanabe
20200809_2020年から始める Azure Cosmos DB 入門 with Azure Synapse Link recap
20200809_2020年から始める Azure Cosmos DB 入門 with Azure Synapse Link recap
Oshitari_kochi
.NET 7におけるBlazorの新機能
.NET 7におけるBlazorの新機能
TomomitsuKusaba
ソーシャルゲームにおけるMongoDB適用事例 - Animal Land
ソーシャルゲームにおけるMongoDB適用事例 - Animal Land
Masakazu Matsushita
Power shell の基本操作と処理の自動化 v2_20120514
Power shell の基本操作と処理の自動化 v2_20120514
junichi anno
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
Teppei Sato
ストリーム処理におけるApache Avroの活用について(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)
ストリーム処理におけるApache Avroの活用について(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)
NTT DATA Technology & Innovation
【de:code 2020】 Azure Synapse Analytics 技術編 ~ 最新の統合分析プラットフォームによる新しい価値の創出(後編)
【de:code 2020】 Azure Synapse Analytics 技術編 ~ 最新の統合分析プラットフォームによる新しい価値の創出(後編)
日本マイクロソフト株式会社
Elasticsearchプラグインの作り方
Elasticsearchプラグインの作り方
Shinsuke Sugaya
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
infinite_loop
さいきんの InnoDB Adaptive Flushing (仮)
さいきんの InnoDB Adaptive Flushing (仮)
Takanori Sejima
SparkとCassandraの美味しい関係
SparkとCassandraの美味しい関係
datastaxjp
[JAWS DAYS 2019] Amazon DocumentDB(with MongoDB Compatibility)入門
[JAWS DAYS 2019] Amazon DocumentDB(with MongoDB Compatibility)入門
Shuji Kikuchi
Railsで作るBFFの功罪
Railsで作るBFFの功罪
Recruit Lifestyle Co., Ltd.
What's hot
(20)
Azure Monitor Logで実現するモダンな管理手法
Azure Monitor Logで実現するモダンな管理手法
【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介
【BS3】Visual Studio 2022 と .NET 6 での Windows アプリ開発技術の紹介
徳丸本ができるまで
徳丸本ができるまで
今さらだけどMySQLとライセンス
今さらだけどMySQLとライセンス
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ
【BS14】Blazor WebAssemblyとJavaScriptのインターオペラビリティ
Azure でサーバーレス、 Infrastructure as Code どうしてますか?
Azure でサーバーレス、 Infrastructure as Code どうしてますか?
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
20200809_2020年から始める Azure Cosmos DB 入門 with Azure Synapse Link recap
20200809_2020年から始める Azure Cosmos DB 入門 with Azure Synapse Link recap
.NET 7におけるBlazorの新機能
.NET 7におけるBlazorの新機能
ソーシャルゲームにおけるMongoDB適用事例 - Animal Land
ソーシャルゲームにおけるMongoDB適用事例 - Animal Land
Power shell の基本操作と処理の自動化 v2_20120514
Power shell の基本操作と処理の自動化 v2_20120514
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
ストリーム処理におけるApache Avroの活用について(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)
ストリーム処理におけるApache Avroの活用について(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)
【de:code 2020】 Azure Synapse Analytics 技術編 ~ 最新の統合分析プラットフォームによる新しい価値の創出(後編)
【de:code 2020】 Azure Synapse Analytics 技術編 ~ 最新の統合分析プラットフォームによる新しい価値の創出(後編)
Elasticsearchプラグインの作り方
Elasticsearchプラグインの作り方
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
さいきんの InnoDB Adaptive Flushing (仮)
さいきんの InnoDB Adaptive Flushing (仮)
SparkとCassandraの美味しい関係
SparkとCassandraの美味しい関係
[JAWS DAYS 2019] Amazon DocumentDB(with MongoDB Compatibility)入門
[JAWS DAYS 2019] Amazon DocumentDB(with MongoDB Compatibility)入門
Railsで作るBFFの功罪
Railsで作るBFFの功罪
More from xztaityozx
呪符式高速詠唱シェル芸2
呪符式高速詠唱シェル芸2
xztaityozx
呪符式高速詠唱シェル芸
呪符式高速詠唱シェル芸
xztaityozx
surgeコマンド作りました
surgeコマンド作りました
xztaityozx
ナーベンシュタイン距離 ~グラフを添えて~
ナーベンシュタイン距離 ~グラフを添えて~
xztaityozx
あの、selのリベンジをさせてください
あの、selのリベンジをさせてください
xztaityozx
Owari version 2.0 をつくりました
Owari version 2.0 をつくりました
xztaityozx
実績を達成しました!
実績を達成しました!
xztaityozx
ワタナBase59
ワタナBase59
xztaityozx
ocsとselってコマンド作ったわよ
ocsとselってコマンド作ったわよ
xztaityozx
ワタナベシェル
ワタナベシェル
xztaityozx
柿と杮
柿と杮
xztaityozx
シェル芸をドット絵にして思いを伝えよう!
シェル芸をドット絵にして思いを伝えよう!
xztaityozx
終わりを出力するコマンドつくった
終わりを出力するコマンドつくった
xztaityozx
ワタナベ難読化シェル芸
ワタナベ難読化シェル芸
xztaityozx
~/.bashrcを難読化しよう!
~/.bashrcを難読化しよう!
xztaityozx
CLIツール作るの楽しい
CLIツール作るの楽しい
xztaityozx
レッツゴー難読化シェル芸
レッツゴー難読化シェル芸
xztaityozx
超・記号オンリー難読化シェル芸
超・記号オンリー難読化シェル芸
xztaityozx
部活でシェル芸がはやらない
部活でシェル芸がはやらない
xztaityozx
潜入工作任務用シェル芸
潜入工作任務用シェル芸
xztaityozx
More from xztaityozx
(20)
呪符式高速詠唱シェル芸2
呪符式高速詠唱シェル芸2
呪符式高速詠唱シェル芸
呪符式高速詠唱シェル芸
surgeコマンド作りました
surgeコマンド作りました
ナーベンシュタイン距離 ~グラフを添えて~
ナーベンシュタイン距離 ~グラフを添えて~
あの、selのリベンジをさせてください
あの、selのリベンジをさせてください
Owari version 2.0 をつくりました
Owari version 2.0 をつくりました
実績を達成しました!
実績を達成しました!
ワタナBase59
ワタナBase59
ocsとselってコマンド作ったわよ
ocsとselってコマンド作ったわよ
ワタナベシェル
ワタナベシェル
柿と杮
柿と杮
シェル芸をドット絵にして思いを伝えよう!
シェル芸をドット絵にして思いを伝えよう!
終わりを出力するコマンドつくった
終わりを出力するコマンドつくった
ワタナベ難読化シェル芸
ワタナベ難読化シェル芸
~/.bashrcを難読化しよう!
~/.bashrcを難読化しよう!
CLIツール作るの楽しい
CLIツール作るの楽しい
レッツゴー難読化シェル芸
レッツゴー難読化シェル芸
超・記号オンリー難読化シェル芸
超・記号オンリー難読化シェル芸
部活でシェル芸がはやらない
部活でシェル芸がはやらない
潜入工作任務用シェル芸
潜入工作任務用シェル芸
難読化PowerShell芸入門
1.
難読化PowerShell芸入門 たいちょー
2.
みなさん#!/bin/bash(こんにちはの意) たいちょー @xztaityozx_001 母語はC# ゆるふわお嬢様系難読化シェル芸人
3.
最近 研究で思ってたより大量のデータが集まる DBにいれたい(DBわからん) 難読化シェル芸 難読化シェル芸わからん こわい
4.
難読化シェル芸 #難daコレ ありがとうございます(見てます)
5.
難読化シェル芸 ぞくぞくふえ~る
6.
難読化シェル芸 解読するだけで体力を失う 困る それぞれの個性を感じたりできて楽しい 楽しい
7.
PowerShell芸 PowerShell芸、始めました 勉強会の問題を解くなど
8.
PowerShellとは PowerShell(パワーシェル)は、マイクロソフ トが開発した拡張可能なコマンドラインイン ターフェース (CLI) シェルおよびスクリプト言 語である。オブジェクト指向に基づいて設計さ れており、.NET
Frameworkと.NET Coreを基盤と している。 -- Wikipediaより
9.
PowerShell 型があり、メソッドが生えてる "abc".ToUpper() => ABC .NETにある静的メソッドも呼べる [System.Text.Encoding]::Unicode.GetString( [Convert]::FromBase64String("RjCTMFMw")) => うんこ
10.
PowerShell芸 とりあえずFizzBuzz 1..30 | %{
((($_, "Fizz")[$_%3 -eq 0], "Buzz")[ $_%5 -eq 0], "FizzBuzz")[$_%15 -eq 0] }
11.
解説 1..30 seq 30と同じ $True =
1 $False = 0
12.
解説 () System.Objectの配列 ()[index] でアクセスできる
13.
解説 % ForEach-Object へのエイリアス ループ変数 $_
を操作して各Objectを加工できる 1..3|% {$_+1} 2 3 4
14.
解説 ($_, "Fizz")[$_%3 -eq
0] $_%3 == 0 ? "Fizz" : $_ と同じ意味 TrueとFalseがそれぞれ1,0になることを利用してる
15.
解説 1..30 | %{
((($_, "Fizz")[$_%3 -eq 0], "Buzz")[$_%5 -eq 0], "FizzBuzz")[$_%15 -eq 0] } これは15,5,3の条件演算をネストしているとい うことになる 簡単ですね!
16.
難読化PowerShell芸 本題です 難読化ターゲット Get-Date
17.
PowerShellで難daコレ 文字列を評価してもコマンドを実行しない # bash > d="date" >
$d 2019年 8月 2日 金曜日 15:40:35 JST # powershell > $d="Get-Date" > $d Get-Date #文字列が出力されるのみ
18.
Invoke-Expression Invoke-Expression bashとかでいうところのeval # powershell > $d="Get-Date" >
Invoke-Expression $d 2019年8月2日 16:14:36
19.
Invoke-Expression $d="Get-Date" $i="Invoke-Expression" $i $d #
$iが評価できないね!
20.
& Invoke-Expressionと似た動きをする これなら何とかできそう $d="Get-Date" & $d 2019年8月2日 16:14:36
21.
やること 記号のみから得られる文字列から"Get-Date"を 作り、変数に代入 & $date を実行して日付を得る
22.
記号変数 PowerShellでは${}で囲むとほとんどの記号を変 数にできる ${"}, ${@}, ${'}
23.
数値を作る この先数値が必要になるので記号変数に入れて おく ${;}=+$() # 0 ${%}=++${;}
# 1 ${;}++ # 2 ${+}=${;}*${;}*${;} # 8
24.
PowerShellの.&>/???/??/${##} なんかしらの文字列を得られるやつ "$?" ""+@{}
25.
"$?" 前のコマンドが 正常終了 => True 異常終了
=> False
26.
""+@{} これを実行すると System.Collections.Hashtable という文字列が得られる stringへのキャストでToString()が呼ばれるため
27.
文字の切り出し 欲しい文字だけを取り出す stringなので[]でアクセスできる ${@}=""+@{} ${@} # System.Collections.Hashtable "${@}"[0]
# S "${@}"[-1] # e
28.
組み立てる ではGet-Dateを作っていきましょう!
29.
Get-Date
30.
a,e,tを取り出す Collections.Hashtable ここからa,e True ここからT
31.
取り出せました ${;}=+$() # 0 ${%}=++${;}
# 1 ${;}++ # 2 ${@}=""+@{} # System.Collections.Hashtable "${@}"[-${;}-${;}] # => "${@}"[-4] => a "${@}"[-${%}] # => "${@}"[-1] => e "$?"[+$()] # => "True"[0] => T
32.
Get-Date
33.
残念ながらG,Dがありません System.Collections.Hashtable False True どこ探してもG,Dがありません…
34.
シグネチャからG,Dを得る string.Insert() のシグネチャは string Insert(int
startIndex, string value) なんとG,Dがありました!
35.
PowerShellでシグネチャを得る オブジェクト.メソッド名 とするとPSMethodオ ブジェクトを得られる stringへキャストするとシグネチャが得られる $s="".Insert #
PSMethodオブジェクトを$sに代入 "$s" # stringへキャスト # => string Insert(int startIndex, string value)
36.
"".Insertを作ってシグネチャを得る このシグネチャアクセスするにはInsertを作る必要 があります 文字自体はすでに揃っていますね $Insert="Insert" "".$Insert # "".Insertが呼べる
37.
できました ${;}=+$(); ${%}=++${;}; ${;}++
# ${%}=1, ${;}=2 ${@}=""+@{} ${&}="${@}"[-${%}$(${;}+${;})"]+"${@}"[${%}${;}"]+"${@}"[+ $()]+"${@}"[-${%}]+"$?"[${%}]+"$?"[+$()] ${&} # inSerT 大文字小文字は関係ない ${&}="".${&} # PSMethod Object "${&}" # string Insert(int startIndex, string value)
38.
G,Dを取り出します シグネチャを無事得られたのでG,Dを取りだします
39.
できました ${;}=+$(); ${%}=++${;}; ${;}++;
# ${%}=1, ${;}=2 ${+}=${;}*${;}*${;} # 8 "${&}" # string Insert(int startIndex, string value) "${&}"[-${+}] # => "${&}"[-8] => g "${&}"[-"${%}${+}"] # => "${&}"[-18] => d
40.
合体!!!発進!!! ${#}="${&}"[-${+}]+"${@}"[-${%}]+"$?"[+$()]+"-"+"${&}"[-"$ {%}${+}"]+"${@}"[-${;}-${;}]+"$?"[+$()]+"${@}"[-${%}] ${#} # geT-daTe &
${#} # Get-Date が実行される
41.
まとめ ${;}=+$();${%}=++${;};${;}++;${+}=${;}*${;}*${;};${@}=""+@ {};${&}="${@}"[-"${%}$(${;}+${;})"]+"${@}"[-"${%}${;}"]+"$ {@}"[+$()]+"${@}"[-${%}]+"$?"[${%}]+"$?"[+$()];${&}=""+$(" ".${&});${#}="${&}"[-${+}]+"${@}"[-${%}]+"$?"[+$()]+"-"+"$ {&}"[-"${%}${+}"]+"${@}"[-${;}-${;}]+"$?"[+$()]+"${@}"[-${ %}];& ${#} な、なにこれ…(ドン引き)
42.
OMAKE pwsh -c "Get-Date"
でbashからGet-Dateできま す ちょっと記号難読化してみます
43.
できました : "$(.&>/???/??/${##}) /*/$$";
__=(${_##*.}); : ${__[${##} +${##}]/¥/$$}; : -${_/${_%?}}; /???/?????/???/${__[${##}+${##}]:${##}:${##}}?${__[${##}]: -${##}-${##}:${##}}? $_ # /usr/local/bin/pwsh -c
44.
超!合体!!!! : "$(.&>/???/??/${##}) /*/$$";
__=(${_##*.}); : ${__[${##} +${##}]/¥/$$}; : -${_/${_%?}};/???/?????/???/${__[${##}+${ ##}]:${##}:${##}}?${__[${##}]: -${##}-${##}:${##}}? $_ '${ ;}=+$();${%}=++${;};${;}++;${+}=${;}*${;}*${;};${@}=""+@{} ;${&}="${@}"[-"${%}$(${;}+${;})"]+"${@}"[-"${%}${;}"]+"${@ }"[+$()]+"${@}"[-${%}]+"$?"[${%}]+"$?"[+$()];${&}=""+$("". ${&});${#}="${&}"[-${+}]+"${@}"[-${%}]+"$?"[+$()]+"-"+"${& }"[-"${%}${+}"]+"${@}"[-${;}-${;}]+"$?"[+$()]+"${@}"[-${%} ];& ${#}'
45.
おわり たのしいですね
46.
参考文献 PowerShell難読化の基礎 (1) -
Binary Pulsar https://binary- pulsar.hatenablog.jp/entry/2018/09/01/000000 PowerShellの演算子一覧 - しばたテックブログ https://blog.shibata.tech/entry/2015/12/03/000000 記号のみで任意のPowerShellコードを実行 - JPerl Advent Calendar 2010 Sym Track リンク切れ
Download Now