SlideShare a Scribd company logo
1 of 33
アンパック手法
~HamaCTF 2019 Write Up編~
@Sh1n0g1
HamaSec 201904
アンパック処理はx64dbgをメインで利用
• メモリブレークポイントの利用など
• ハードウェアブレークポイントを利用するため
HamaSec 201904
パッカーの話の前に元の検体を調査
HamaSec 201904
パックされていない検体の調査
• フラグを表示する分岐
HamaSec 201904
分岐の前ではGetUserNameA関数が実行さ
れている
https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getusernamea
HamaSec 201904
文字列を比較している
arg_0
arg_4
u n p 4 c k e d 0
u s e r n a m e 0
esiedi
HamaSec 201904
フラグ生成
• Sub_401039は文字列の結
合をしており、
「402050」にメッセージ
の文字列を構築している
HamaSec 201904
アプローチ
• デバッガー上でユーザ名を取得した直後に処理を止める(ブ
レークポイント)
• メモリ上のユーザ名を「unp4cked」に書き換える
• 処理を再開させる
HamaSec 201904
Breakpoint
HamaSec 201904
メモリの書き換え
• 左下のMemory Dump欄上で[Ctrl + G]で書き換えた衣装の402004
番地に飛ぶ
• 書き換え対象のバイトを複数選択する(最低9バイト)
• 選択した箇所を右クリックし、[Binary]の[Edit]を選択する
• 「unp4cked」に書き換えて、OKボタンを押す
書き換え後
HamaSec 201904
実行する
HamaSec 201904
アンパックのメリット
• IoC(通信先、レジストリ名、ファイル名など)がstrings抽出で
きるようになる
• Anti-Sandbox、Anti-XXが特的できる
• そもそもパックされているマルウェアって多いの?
• 著名なパッカーによってパックされているマルウェアは少ない
が、実行されるコードが暗号化されていて、復号されながら実
行されることはざらにある
HamaSec 201904
パッカーの特徴
• 書き込み権限および実行権限のあるメモリセクションを利用す
る
• アンパックでオリジナルコードを復号・解凍した後にそのまま実行す
るため。
• パックされていない実行ファイルでは稀。
• そのようなメモリセクションはPEヘッダーで定義されているか、
後から動的に割り当てられる( VirtualAlloc、VirtualProtection)
• アンパック処理が終わるとオリジナルの実行コードが始まる
(=Original Entry Point: OEP)
HamaSec 201904
UNPACK01を解いてみる
HamaSec 201904
Memory Mapを参照する
実行権限「E」
および書き込み
権限「W」を
持っている
HamaSec 201904
実行前は空っぽ
• ….ということは間違いなく後で何かが書きこまれる
HamaSec 201904
Memory Breakpointをしかける
HamaSec 201904
BreakPointに引っかかるまで待つ
• ヒットすると平文の内容が見えて、フラグの文字列がわかる
HamaSec 201904
UNPACK02を解いてみる
HamaSec 201904
Memory Mapを確認
• セクションはひとつしかなく、エントリーポイントになってい
るため、ブレークポイントを置いてもすぐに発動してしまう
HamaSec 201904
利用されるAPIでブレークポイントを置く
• 前提条件として、アンパックされたマルウェア自体が利用する
APIを知っていること
• これはサンドボックスやAPI Monitor を利用すると調査可能。こ
こでは割愛
• GetProcAddressを利用することがわかっているため、ここにブ
レークポイントを置くことにする
http://www.rohitab.com/apimonitor
HamaSec 201904
GetProcAddressの番地を調べる
• [Symbol]タブをクリックし、[kerner32.dll]をクリックし、右側の
ペインから「GetProcAddress」を探す
• ダブルクリックをする
HamaSec 201904
Retにブレークポイントを置く
HamaSec 201904
GetUserNameAが出てくるまで実行する
• 実行すると画面右側の中央にスタックの上部(つまり、
GetUserNameA)のパラメータが表示される
• “GetUserNameA”が出てくるまで実行する
• パッカー自体がGetProcAddressを利用するため
HamaSec 201904
フラグが見える
• GetProcAddress関数のRETを実行し、ライブラリから抜けると…
HamaSec 201904
kkrunchyならではの別解
• x64dbgにはScript機能があり、kkrunchyを解析するためのスクリ
プトが提供されている
https://github.com/x64dbg/Scripts/ HamaSec 201904
Scriptタブでスクリプト実行
• Scriptタブでスクリプトを[Load]する
• スペースバーでスクリプトが実行できる
• kkruncy解析スクリプトは、EntryPointで停止していることが前提
HamaSec 201904
実行すると
HamaSec 201904
CPUタブに行くと
• マルウェアのオリジナルの処理の手前で止まっている
HamaSec 201904
UNPACK03はUNPACK01と同じ手法で解ける
HamaSec 201904
UNPACK04はUNPACK02と同じ手法で解ける
HamaSec 201904
全問共通の手っ取り場合解き方
• MessageBoxはスレッドが処理待ちになり、処理は停止する(ブ
レークポイントとほぼ同じ)
• MessageBoxが表示されたら、実行を停止する
• [Ctrl + F9]を実行するとRetまで実行することができる
• ステップ実行して、一個上の関数に戻る
• ライブラリから戻ったところがアンパックされたマルウェアの
関数
HamaSec 201904

More Related Content

What's hot

「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践Yoshifumi Kawai
 
CTF超入門 (for 第12回セキュリティさくら)
CTF超入門 (for 第12回セキュリティさくら)CTF超入門 (for 第12回セキュリティさくら)
CTF超入門 (for 第12回セキュリティさくら)kikuchan98
 
クラウド環境下におけるAPIリトライ設計
クラウド環境下におけるAPIリトライ設計クラウド環境下におけるAPIリトライ設計
クラウド環境下におけるAPIリトライ設計Kouji YAMADA
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門Norishige Fukushima
 
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについてカスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについてalwei
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するYoshifumi Kawai
 
CpawCTF 勉強会 Network
CpawCTF 勉強会 NetworkCpawCTF 勉強会 Network
CpawCTF 勉強会 NetworkTakaaki Hoyo
 
.NET Core 3.0時代のメモリ管理
.NET Core 3.0時代のメモリ管理.NET Core 3.0時代のメモリ管理
.NET Core 3.0時代のメモリ管理KageShiron
 
Kernel Recipes 2019 - Suricata and XDP
Kernel Recipes 2019 - Suricata and XDPKernel Recipes 2019 - Suricata and XDP
Kernel Recipes 2019 - Suricata and XDPAnne Nicolas
 
Spring Initializrをハックする-カスタマイズを通してその内部実装を覗く
Spring Initializrをハックする-カスタマイズを通してその内部実装を覗くSpring Initializrをハックする-カスタマイズを通してその内部実装を覗く
Spring Initializrをハックする-カスタマイズを通してその内部実装を覗くapkiban
 
【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All ThingsUnityTechnologiesJapan002
 
ctfで学ぼうリバースエンジニアリング
ctfで学ぼうリバースエンジニアリングctfで学ぼうリバースエンジニアリング
ctfで学ぼうリバースエンジニアリングjunk_coken
 
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発日本マイクロソフト株式会社
 
Unity In App Purchase (IAP)の使い方
Unity In App Purchase (IAP)の使い方Unity In App Purchase (IAP)の使い方
Unity In App Purchase (IAP)の使い方Makoto Ito
 
できる!並列・並行プログラミング
できる!並列・並行プログラミングできる!並列・並行プログラミング
できる!並列・並行プログラミングPreferred Networks
 
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣Masahiro Nishimi
 
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)Preferred Networks
 
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編infinite_loop
 

What's hot (20)

「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
 
CTF超入門 (for 第12回セキュリティさくら)
CTF超入門 (for 第12回セキュリティさくら)CTF超入門 (for 第12回セキュリティさくら)
CTF超入門 (for 第12回セキュリティさくら)
 
クラウド環境下におけるAPIリトライ設計
クラウド環境下におけるAPIリトライ設計クラウド環境下におけるAPIリトライ設計
クラウド環境下におけるAPIリトライ設計
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
 
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについてカスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについて
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
 
CpawCTF 勉強会 Network
CpawCTF 勉強会 NetworkCpawCTF 勉強会 Network
CpawCTF 勉強会 Network
 
.NET Core 3.0時代のメモリ管理
.NET Core 3.0時代のメモリ管理.NET Core 3.0時代のメモリ管理
.NET Core 3.0時代のメモリ管理
 
Kernel Recipes 2019 - Suricata and XDP
Kernel Recipes 2019 - Suricata and XDPKernel Recipes 2019 - Suricata and XDP
Kernel Recipes 2019 - Suricata and XDP
 
Spring Initializrをハックする-カスタマイズを通してその内部実装を覗く
Spring Initializrをハックする-カスタマイズを通してその内部実装を覗くSpring Initializrをハックする-カスタマイズを通してその内部実装を覗く
Spring Initializrをハックする-カスタマイズを通してその内部実装を覗く
 
Glibc malloc internal
Glibc malloc internalGlibc malloc internal
Glibc malloc internal
 
Nmapの真実
Nmapの真実Nmapの真実
Nmapの真実
 
【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things
 
ctfで学ぼうリバースエンジニアリング
ctfで学ぼうリバースエンジニアリングctfで学ぼうリバースエンジニアリング
ctfで学ぼうリバースエンジニアリング
 
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
 
Unity In App Purchase (IAP)の使い方
Unity In App Purchase (IAP)の使い方Unity In App Purchase (IAP)の使い方
Unity In App Purchase (IAP)の使い方
 
できる!並列・並行プログラミング
できる!並列・並行プログラミングできる!並列・並行プログラミング
できる!並列・並行プログラミング
 
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
 
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
Deep Learningのための専用プロセッサ「MN-Core」の開発と活用(2022/10/19東大大学院「 融合情報学特別講義Ⅲ」)
 
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
 

Similar to HamaCTF WriteUp (Unpack category)

Vagrant で作る PHP 開発環境 [実践編]
Vagrant で作る PHP 開発環境 [実践編]Vagrant で作る PHP 開発環境 [実践編]
Vagrant で作る PHP 開発環境 [実践編]Masashi Shinbara
 
emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略
emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略
emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略祐司 伊藤
 
Serverless Framework "Disptach" の紹介
Serverless Framework "Disptach" の紹介Serverless Framework "Disptach" の紹介
Serverless Framework "Disptach" の紹介Motonori Shindo
 
Development tools for WordPress
Development tools for WordPressDevelopment tools for WordPress
Development tools for WordPressBREN
 
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境Masashi Shinbara
 
Wpf 4とSilverlight 4、これから業務アプリを開発するならどっち?
Wpf 4とSilverlight 4、これから業務アプリを開発するならどっち?Wpf 4とSilverlight 4、これから業務アプリを開発するならどっち?
Wpf 4とSilverlight 4、これから業務アプリを開発するならどっち?Yuya Yamaki
 
Raspberry Pi用のコンテナをクラウドでビルドする方法
Raspberry Pi用のコンテナをクラウドでビルドする方法Raspberry Pi用のコンテナをクラウドでビルドする方法
Raspberry Pi用のコンテナをクラウドでビルドする方法Shunsuke Kikuchi
 
Sparkにプルリク投げてみた
Sparkにプルリク投げてみたSparkにプルリク投げてみた
Sparkにプルリク投げてみたNoritaka Sekiyama
 
Vagrant を Web開発環境に使う
Vagrant を Web開発環境に使うVagrant を Web開発環境に使う
Vagrant を Web開発環境に使うMasashi Shinbara
 
Appearances are deceiving: Novel offensive techniques in Windows 10/11 on ARM
Appearances are deceiving: Novel offensive techniques in Windows 10/11 on ARMAppearances are deceiving: Novel offensive techniques in Windows 10/11 on ARM
Appearances are deceiving: Novel offensive techniques in Windows 10/11 on ARMFFRI, Inc.
 
Vagrant で PHP 開発環境を作る ハンズオン
Vagrant で PHP 開発環境を作る ハンズオンVagrant で PHP 開発環境を作る ハンズオン
Vagrant で PHP 開発環境を作る ハンズオンMasashi Shinbara
 
Buffer overflow
Buffer overflowBuffer overflow
Buffer overflowionis111
 
サーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話しサーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話しAkira Nagata
 
【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門sandai
 

Similar to HamaCTF WriteUp (Unpack category) (20)

Vagrant で作る PHP 開発環境 [実践編]
Vagrant で作る PHP 開発環境 [実践編]Vagrant で作る PHP 開発環境 [実践編]
Vagrant で作る PHP 開発環境 [実践編]
 
Running Apache Spark on AWS
Running Apache Spark on AWSRunning Apache Spark on AWS
Running Apache Spark on AWS
 
emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略
emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略
emscriptenでC/C++プログラムをwebブラウザから使うまでの難所攻略
 
Serverless Framework "Disptach" の紹介
Serverless Framework "Disptach" の紹介Serverless Framework "Disptach" の紹介
Serverless Framework "Disptach" の紹介
 
Development tools for WordPress
Development tools for WordPressDevelopment tools for WordPress
Development tools for WordPress
 
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
 
Wpf 4とSilverlight 4、これから業務アプリを開発するならどっち?
Wpf 4とSilverlight 4、これから業務アプリを開発するならどっち?Wpf 4とSilverlight 4、これから業務アプリを開発するならどっち?
Wpf 4とSilverlight 4、これから業務アプリを開発するならどっち?
 
Raspberry Pi用のコンテナをクラウドでビルドする方法
Raspberry Pi用のコンテナをクラウドでビルドする方法Raspberry Pi用のコンテナをクラウドでビルドする方法
Raspberry Pi用のコンテナをクラウドでビルドする方法
 
Sparkにプルリク投げてみた
Sparkにプルリク投げてみたSparkにプルリク投げてみた
Sparkにプルリク投げてみた
 
Vagrant を Web開発環境に使う
Vagrant を Web開発環境に使うVagrant を Web開発環境に使う
Vagrant を Web開発環境に使う
 
G * magazine 0
G * magazine 0G * magazine 0
G * magazine 0
 
Appearances are deceiving: Novel offensive techniques in Windows 10/11 on ARM
Appearances are deceiving: Novel offensive techniques in Windows 10/11 on ARMAppearances are deceiving: Novel offensive techniques in Windows 10/11 on ARM
Appearances are deceiving: Novel offensive techniques in Windows 10/11 on ARM
 
Vagrant で PHP 開発環境を作る ハンズオン
Vagrant で PHP 開発環境を作る ハンズオンVagrant で PHP 開発環境を作る ハンズオン
Vagrant で PHP 開発環境を作る ハンズオン
 
Grailsのススメ(仮)
Grailsのススメ(仮)Grailsのススメ(仮)
Grailsのススメ(仮)
 
NanoA
NanoANanoA
NanoA
 
Buffer overflow
Buffer overflowBuffer overflow
Buffer overflow
 
サーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話しサーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話し
 
【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門
 
How to run P4 BMv2
How to run P4 BMv2How to run P4 BMv2
How to run P4 BMv2
 
Haikara
HaikaraHaikara
Haikara
 

More from Shota Shinogi

LLM App Hacking (AVTOKYO2023)
LLM App Hacking (AVTOKYO2023)LLM App Hacking (AVTOKYO2023)
LLM App Hacking (AVTOKYO2023)Shota Shinogi
 
ドラえもんの秘密道具「夜ランプ」を作ろうとした話(ネタ)
ドラえもんの秘密道具「夜ランプ」を作ろうとした話(ネタ)ドラえもんの秘密道具「夜ランプ」を作ろうとした話(ネタ)
ドラえもんの秘密道具「夜ランプ」を作ろうとした話(ネタ)Shota Shinogi
 
AndroidとPCのみでスマート電球BLEハッキング
AndroidとPCのみでスマート電球BLEハッキングAndroidとPCのみでスマート電球BLEハッキング
AndroidとPCのみでスマート電球BLEハッキングShota Shinogi
 
Sigcheck option memo
Sigcheck option memoSigcheck option memo
Sigcheck option memoShota Shinogi
 
RISEconf 2015 UNOFFICIAL Schedule
RISEconf 2015 UNOFFICIAL ScheduleRISEconf 2015 UNOFFICIAL Schedule
RISEconf 2015 UNOFFICIAL ScheduleShota Shinogi
 
Introduction of ShinoBOT (Black Hat USA 2013 Arsenal)
Introduction of ShinoBOT (Black Hat USA 2013 Arsenal)Introduction of ShinoBOT (Black Hat USA 2013 Arsenal)
Introduction of ShinoBOT (Black Hat USA 2013 Arsenal)Shota Shinogi
 

More from Shota Shinogi (9)

LLM App Hacking (AVTOKYO2023)
LLM App Hacking (AVTOKYO2023)LLM App Hacking (AVTOKYO2023)
LLM App Hacking (AVTOKYO2023)
 
ドラえもんの秘密道具「夜ランプ」を作ろうとした話(ネタ)
ドラえもんの秘密道具「夜ランプ」を作ろうとした話(ネタ)ドラえもんの秘密道具「夜ランプ」を作ろうとした話(ネタ)
ドラえもんの秘密道具「夜ランプ」を作ろうとした話(ネタ)
 
AndroidとPCのみでスマート電球BLEハッキング
AndroidとPCのみでスマート電球BLEハッキングAndroidとPCのみでスマート電球BLEハッキング
AndroidとPCのみでスマート電球BLEハッキング
 
Honeypot Spotted
Honeypot SpottedHoneypot Spotted
Honeypot Spotted
 
Sigcheck option memo
Sigcheck option memoSigcheck option memo
Sigcheck option memo
 
RISEconf 2015 UNOFFICIAL Schedule
RISEconf 2015 UNOFFICIAL ScheduleRISEconf 2015 UNOFFICIAL Schedule
RISEconf 2015 UNOFFICIAL Schedule
 
Hexdump memo
Hexdump memoHexdump memo
Hexdump memo
 
ShinoBOT Suite
ShinoBOT SuiteShinoBOT Suite
ShinoBOT Suite
 
Introduction of ShinoBOT (Black Hat USA 2013 Arsenal)
Introduction of ShinoBOT (Black Hat USA 2013 Arsenal)Introduction of ShinoBOT (Black Hat USA 2013 Arsenal)
Introduction of ShinoBOT (Black Hat USA 2013 Arsenal)
 

HamaCTF WriteUp (Unpack category)

Editor's Notes

  1. フラグを表示するか、エラーメッセージを表示するか分岐しており、直前にcallされている関数の結果(eax)が条件となっている 左側に分岐するためにはeax=00で抜けてこなければならない 直前の関数は402004に格納されている値と、文字列”unp4cked”がパラメータとして渡されている まずは402004に何が入るか見てみる
  2. 402004はcall eaxの直前でプッシュされている。 call eaxのeaxは直前のGetProcAddress関数の戻り値である。 GetProcAddressは「GetUserNameA」というWinAPIの番地を調べる関数であるため、 call eaxはGetUserNameAを呼び出しているということがわかり、402004には現在ログインしているユーザ名が入ることがわかる sub_401017では何をしているかを見てみる
  3. 受け取ったパラメータ(arg_0、arg_4)をesi、ediに格納し、mov dl,[edi]で1バイトを取得し、esiの1バイトと比較している 同じでない場合は、ecxをひっくり返す(→0xffffffffにある) 終了時にeaxにecxの値を代入している つまり、文字列が同じであれば、eaxは0、異なれば、0xffffffffで関数から抜ける