Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

難読化PowerShell芸入門

478 views

Published on

2019/08/10開催の第43回シェル芸勉強会大阪サテライト LT大会で使った資料です

Published in: Engineering
  • DOWNLOAD FULL MOVIE, INTO AVAILABLE FORMAT ......................................................................................................................... ......................................................................................................................... ,DOWNLOAD FULL. MOVIE 4K,FHD,HD,480P here { https://tinyurl.com/yybdfxwh }
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

難読化PowerShell芸入門

  1. 1. 難読化PowerShell芸入門 たいちょー
  2. 2. みなさん#!/bin/bash(こんにちはの意) たいちょー @xztaityozx_001 母語はC# ゆるふわお嬢様系難読化シェル芸人
  3. 3. 最近 研究で思ってたより大量のデータが集まる DBにいれたい(DBわからん) 難読化シェル芸 難読化シェル芸わからん こわい
  4. 4. 難読化シェル芸 #難daコレ ありがとうございます(見てます)
  5. 5. 難読化シェル芸 ぞくぞくふえ~る
  6. 6. 難読化シェル芸 解読するだけで体力を失う 困る それぞれの個性を感じたりできて楽しい 楽しい
  7. 7. PowerShell芸 PowerShell芸、始めました 勉強会の問題を解くなど
  8. 8. PowerShellとは PowerShell(パワーシェル)は、マイクロソフ トが開発した拡張可能なコマンドラインイン ターフェース (CLI) シェルおよびスクリプト言 語である。オブジェクト指向に基づいて設計さ れており、.NET Frameworkと.NET Coreを基盤と している。 -- Wikipediaより
  9. 9. PowerShell 型があり、メソッドが生えてる "abc".ToUpper() => ABC .NETにある静的メソッドも呼べる [System.Text.Encoding]::Unicode.GetString( [Convert]::FromBase64String("RjCTMFMw")) => うんこ
  10. 10. PowerShell芸 とりあえずFizzBuzz 1..30 | %{ ((($_, "Fizz")[$_%3 -eq 0], "Buzz")[ $_%5 -eq 0], "FizzBuzz")[$_%15 -eq 0] }
  11. 11. 解説 1..30 seq 30と同じ $True = 1 $False = 0
  12. 12. 解説 () System.Objectの配列 ()[index] でアクセスできる
  13. 13. 解説 % ForEach-Object へのエイリアス ループ変数 $_ を操作して各Objectを加工できる 1..3|% {$_+1} 2 3 4
  14. 14. 解説 ($_, "Fizz")[$_%3 -eq 0] $_%3 == 0 ? "Fizz" : $_ と同じ意味 TrueとFalseがそれぞれ1,0になることを利用してる
  15. 15. 解説 1..30 | %{ ((($_, "Fizz")[$_%3 -eq 0], "Buzz")[$_%5 -eq 0], "FizzBuzz")[$_%15 -eq 0] } これは15,5,3の条件演算をネストしているとい うことになる 簡単ですね!
  16. 16. 難読化PowerShell芸 本題です 難読化ターゲット Get-Date
  17. 17. PowerShellで難daコレ 文字列を評価してもコマンドを実行しない # bash > d="date" > $d 2019年 8月 2日 金曜日 15:40:35 JST # powershell > $d="Get-Date" > $d Get-Date #文字列が出力されるのみ
  18. 18. Invoke-Expression Invoke-Expression bashとかでいうところのeval # powershell > $d="Get-Date" > Invoke-Expression $d 2019年8月2日 16:14:36
  19. 19. Invoke-Expression $d="Get-Date" $i="Invoke-Expression" $i $d # $iが評価できないね!
  20. 20. & Invoke-Expressionと似た動きをする これなら何とかできそう $d="Get-Date" & $d 2019年8月2日 16:14:36
  21. 21. やること 記号のみから得られる文字列から"Get-Date"を 作り、変数に代入 & $date を実行して日付を得る
  22. 22. 記号変数 PowerShellでは${}で囲むとほとんどの記号を変 数にできる ${"}, ${@}, ${'}
  23. 23. 数値を作る この先数値が必要になるので記号変数に入れて おく ${;}=+$() # 0 ${%}=++${;} # 1 ${;}++ # 2 ${+}=${;}*${;}*${;} # 8
  24. 24. PowerShellの.&>/???/??/${##} なんかしらの文字列を得られるやつ "$?" ""+@{}
  25. 25. "$?" 前のコマンドが 正常終了 => True 異常終了 => False
  26. 26. ""+@{} これを実行すると System.Collections.Hashtable という文字列が得られる stringへのキャストでToString()が呼ばれるため
  27. 27. 文字の切り出し 欲しい文字だけを取り出す stringなので[]でアクセスできる ${@}=""+@{} ${@} # System.Collections.Hashtable "${@}"[0] # S "${@}"[-1] # e
  28. 28. 組み立てる ではGet-Dateを作っていきましょう!
  29. 29. Get-Date
  30. 30. a,e,tを取り出す Collections.Hashtable ここからa,e True ここからT
  31. 31. 取り出せました ${;}=+$() # 0 ${%}=++${;} # 1 ${;}++ # 2 ${@}=""+@{} # System.Collections.Hashtable "${@}"[-${;}-${;}] # => "${@}"[-4] => a "${@}"[-${%}] # => "${@}"[-1] => e "$?"[+$()] # => "True"[0] => T
  32. 32. Get-Date
  33. 33. 残念ながらG,Dがありません System.Collections.Hashtable False True どこ探してもG,Dがありません…
  34. 34. シグネチャからG,Dを得る string.Insert() のシグネチャは string Insert(int startIndex, string value) なんとG,Dがありました!
  35. 35. PowerShellでシグネチャを得る オブジェクト.メソッド名 とするとPSMethodオ ブジェクトを得られる stringへキャストするとシグネチャが得られる $s="".Insert # PSMethodオブジェクトを$sに代入 "$s" # stringへキャスト # => string Insert(int startIndex, string value)
  36. 36. "".Insertを作ってシグネチャを得る このシグネチャアクセスするにはInsertを作る必要 があります 文字自体はすでに揃っていますね $Insert="Insert" "".$Insert # "".Insertが呼べる
  37. 37. できました ${;}=+$(); ${%}=++${;}; ${;}++ # ${%}=1, ${;}=2 ${@}=""+@{} ${&}="${@}"[-${%}$(${;}+${;})"]+"${@}"[${%}${;}"]+"${@}"[+ $()]+"${@}"[-${%}]+"$?"[${%}]+"$?"[+$()] ${&} # inSerT 大文字小文字は関係ない ${&}="".${&} # PSMethod Object "${&}" # string Insert(int startIndex, string value)
  38. 38. G,Dを取り出します シグネチャを無事得られたのでG,Dを取りだします
  39. 39. できました ${;}=+$(); ${%}=++${;}; ${;}++; # ${%}=1, ${;}=2 ${+}=${;}*${;}*${;} # 8 "${&}" # string Insert(int startIndex, string value) "${&}"[-${+}] # => "${&}"[-8] => g "${&}"[-"${%}${+}"] # => "${&}"[-18] => d
  40. 40. 合体!!!発進!!! ${#}="${&}"[-${+}]+"${@}"[-${%}]+"$?"[+$()]+"-"+"${&}"[-"$ {%}${+}"]+"${@}"[-${;}-${;}]+"$?"[+$()]+"${@}"[-${%}] ${#} # geT-daTe & ${#} # Get-Date が実行される
  41. 41. まとめ ${;}=+$();${%}=++${;};${;}++;${+}=${;}*${;}*${;};${@}=""+@ {};${&}="${@}"[-"${%}$(${;}+${;})"]+"${@}"[-"${%}${;}"]+"$ {@}"[+$()]+"${@}"[-${%}]+"$?"[${%}]+"$?"[+$()];${&}=""+$(" ".${&});${#}="${&}"[-${+}]+"${@}"[-${%}]+"$?"[+$()]+"-"+"$ {&}"[-"${%}${+}"]+"${@}"[-${;}-${;}]+"$?"[+$()]+"${@}"[-${ %}];& ${#} な、なにこれ…(ドン引き)
  42. 42. OMAKE pwsh -c "Get-Date" でbashからGet-Dateできま す ちょっと記号難読化してみます
  43. 43. できました : "$(.&>/???/??/${##}) /*/$$"; __=(${_##*.}); : ${__[${##} +${##}]/¥/$$}; : -${_/${_%?}}; /???/?????/???/${__[${##}+${##}]:${##}:${##}}?${__[${##}]: -${##}-${##}:${##}}? $_ # /usr/local/bin/pwsh -c
  44. 44. 超!合体!!!! : "$(.&>/???/??/${##}) /*/$$"; __=(${_##*.}); : ${__[${##} +${##}]/¥/$$}; : -${_/${_%?}};/???/?????/???/${__[${##}+${ ##}]:${##}:${##}}?${__[${##}]: -${##}-${##}:${##}}? $_ '${ ;}=+$();${%}=++${;};${;}++;${+}=${;}*${;}*${;};${@}=""+@{} ;${&}="${@}"[-"${%}$(${;}+${;})"]+"${@}"[-"${%}${;}"]+"${@ }"[+$()]+"${@}"[-${%}]+"$?"[${%}]+"$?"[+$()];${&}=""+$("". ${&});${#}="${&}"[-${+}]+"${@}"[-${%}]+"$?"[+$()]+"-"+"${& }"[-"${%}${+}"]+"${@}"[-${;}-${;}]+"$?"[+$()]+"${@}"[-${%} ];& ${#}'
  45. 45. おわり たのしいですね
  46. 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 リンク切れ

×