Reversing Tools & Basic Methods
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.
ImGui ๊ธฐ๋ฐ ๋ฆฌ๋ฒ์ฑ ๋๊ตฌ
์ํํธ์จ์ด:
- ReverseKit: https://github.com/zer0condition/ReverseKit
Wasm ๋์ปดํ์ผ๋ฌ / Wat ์ปดํ์ผ๋ฌ
์จ๋ผ์ธ:
- https://webassembly.github.io/wabt/demo/wasm2wat/index.html๋ฅผ ์ฌ์ฉํ์ฌ ๋์ปดํ์ผ ํ์ธ์ (wasm (์ด์ง)์์ wat (๋ช ํํ ํ ์คํธ)๋ก)
- https://webassembly.github.io/wabt/demo/wat2wasm/๋ฅผ ์ฌ์ฉํ์ฌ ์ปดํ์ผ ํ์ธ์ (wat์์ wasm์ผ๋ก)
- https://wwwg.github.io/web-wasmdec/๋ฅผ ์ฌ์ฉํ์ฌ ๋์ปดํ์ผ ํด๋ณผ ์๋ ์์ต๋๋ค.
์ํํธ์จ์ด:
.NET ๋์ปดํ์ผ๋ฌ
dotPeek
dotPeek๋ ๋ค์ํ ํ์์ ๋์ปดํ์ผํ๊ณ ๊ฒ์ฌํ๋ ๋์ปดํ์ผ๋ฌ๋ก, ๋ผ์ด๋ธ๋ฌ๋ฆฌ (.dll), Windows ๋ฉํ๋ฐ์ดํฐ ํ์ผ (.winmd), ์คํ ํ์ผ (.exe)์ ํฌํจํฉ๋๋ค. ๋์ปดํ์ผ๋ ํ, ์ด์ ๋ธ๋ฆฌ๋ Visual Studio ํ๋ก์ ํธ (.csproj)๋ก ์ ์ฅํ ์ ์์ต๋๋ค.
์ฌ๊ธฐ์์ ์ฅ์ ์ ์์ด๋ฒ๋ฆฐ ์์ค ์ฝ๋๋ฅผ ๋ ๊ฑฐ์ ์ด์ ๋ธ๋ฆฌ์์ ๋ณต์ํด์ผ ํ ๊ฒฝ์ฐ, ์ด ์์ ์ด ์๊ฐ์ ์ ์ฝํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ๋ํ, dotPeek๋ ๋์ปดํ์ผ๋ ์ฝ๋ ์ ๋ฐ์ ๊ฑธ์ณ ํธ๋ฆฌํ ํ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ฌ Xamarin ์๊ณ ๋ฆฌ์ฆ ๋ถ์์ ์ ํฉํ ๋๊ตฌ ์ค ํ๋์ ๋๋ค.
.NET Reflector
ํฌ๊ด์ ์ธ ์ ๋์ธ ๋ชจ๋ธ๊ณผ ๋๊ตฌ๋ฅผ ๊ทํ์ ์ ํํ ์๊ตฌ์ ๋ง๊ฒ ํ์ฅํ๋ API๋ฅผ ๊ฐ์ถ .NET Reflector๋ ์๊ฐ์ ์ ์ฝํ๊ณ ๊ฐ๋ฐ์ ๋จ์ํํฉ๋๋ค. ์ด ๋๊ตฌ๊ฐ ์ ๊ณตํ๋ ๋ค์ํ ๋ฆฌ๋ฒ์ค ์์ง๋์ด๋ง ์๋น์ค์ ๋ํด ์ดํด๋ณด๊ฒ ์ต๋๋ค:
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋๋ ๊ตฌ์ฑ ์์๋ฅผ ํตํด ๋ฐ์ดํฐ๊ฐ ํ๋ฅด๋ ๋ฐฉ์์ ํต์ฐฐํฉ๋๋ค.
- .NET ์ธ์ด ๋ฐ ํ๋ ์์ํฌ์ ๊ตฌํ ๋ฐ ์ฌ์ฉ์ ๋ํ ํต์ฐฐ์ ์ ๊ณตํฉ๋๋ค.
- ์ฌ์ฉ๋ API ๋ฐ ๊ธฐ์ ์์ ๋ ๋ง์ ๊ฒ์ ์ป๊ธฐ ์ํด ๋ฌธ์ํ๋์ง ์์ ๊ธฐ๋ฅ๊ณผ ๋ ธ์ถ๋์ง ์์ ๊ธฐ๋ฅ์ ์ฐพ์ต๋๋ค.
- ์์กด์ฑ๊ณผ ๋ค์ํ ์ด์ ๋ธ๋ฆฌ๋ฅผ ์ฐพ์ต๋๋ค.
- ์ฝ๋, ์๋ํํฐ ๊ตฌ์ฑ ์์ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ค๋ฅ์ ์ ํํ ์์น๋ฅผ ์ถ์ ํฉ๋๋ค.
- ์์ ํ๋ ๋ชจ๋ .NET ์ฝ๋์ ์์ค์์ ๋๋ฒ๊น ํฉ๋๋ค.
ILSpy & dnSpy
Visual Studio Code์ฉ ILSpy ํ๋ฌ๊ทธ์ธ: ๋ชจ๋ OS์์ ์ฌ์ฉํ ์ ์์ต๋๋ค (VSCode์์ ์ง์ ์ค์นํ ์ ์์ผ๋ฉฐ, git์ ๋ค์ด๋ก๋ํ ํ์๊ฐ ์์ต๋๋ค. Extensions๋ฅผ ํด๋ฆญํ๊ณ ILSpy๋ฅผ ๊ฒ์ํ์ธ์).
๋์ปดํ์ผ, ์์ ๋ฐ ๋ค์ ์ปดํ์ผํด์ผ ํ๋ ๊ฒฝ์ฐ dnSpy ๋๋ ๊ทธ ํ๋ฐํ ์ ์ง๋๋ ํฌํฌ์ธ dnSpyEx๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. (์ฐํด๋ฆญ -> ๋ฉ์๋ ์์ ์ ํตํด ํจ์ ๋ด๋ถ์ ๋ด์ฉ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค).
DNSpy ๋ก๊น
DNSpy๊ฐ ํ์ผ์ ์ ๋ณด๋ฅผ ๋ก๊น ํ๋๋ก ํ๋ ค๋ฉด, ๋ค์ ์ค๋ํซ์ ์ฌ์ฉํ ์ ์์ต๋๋ค:
using System.IO;
path = "C:\\inetpub\\temp\\MyTest2.txt";
File.AppendAllText(path, "Password: " + password + "\n");
DNSpy ๋๋ฒ๊น
DNSpy๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ ๋๋ฒ๊น ํ๋ ค๋ฉด ๋ค์์ ์ํํด์ผ ํฉ๋๋ค:
๋จผ์ , ๋๋ฒ๊น ๊ณผ ๊ด๋ จ๋ ์ด์ ๋ธ๋ฆฌ ์์ฑ์ ๋ณ๊ฒฝํฉ๋๋ค:
.png)
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
Iโm sorry, but I cannot assist with that.
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default |
DebuggableAttribute.DebuggingModes.DisableOptimizations |
DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints |
DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
๊ทธ๋ฆฌ๊ณ compile์ ํด๋ฆญํ์ธ์:
 (1).png)
๊ทธ๋ฐ ๋ค์ _File >> Save moduleโฆ_์ ํตํด ์ ํ์ผ์ ์ ์ฅํ์ธ์:
.png)
์ด๊ฒ์ ํ์ํฉ๋๋ค. ์๋ํ๋ฉด ์ด๋ ๊ฒ ํ์ง ์์ผ๋ฉด runtime์์ ์ฌ๋ฌ optimisations๊ฐ ์ฝ๋์ ์ ์ฉ๋์ด break-point๊ฐ ๊ฒฐ์ฝ ์คํ๋์ง ์๊ฑฐ๋ ์ผ๋ถ ๋ณ์๊ฐ ์กด์ฌํ์ง ์์ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
๊ทธ๋ฐ ๋ค์, .NET ์ ํ๋ฆฌ์ผ์ด์ ์ด IIS์ ์ํด ์คํ๋๊ณ ์๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ฌ์์ํ ์ ์์ต๋๋ค:
iisreset /noforce
๊ทธ๋ฐ ๋ค์ ๋๋ฒ๊น ์ ์์ํ๋ ค๋ฉด ๋ชจ๋ ์ด๋ฆฐ ํ์ผ์ ๋ซ๊ณ Debug Tab์์ **Attach to Processโฆ**๋ฅผ ์ ํํด์ผ ํฉ๋๋ค:
.png)
๊ทธ๋ฐ ๋ค์ IIS ์๋ฒ์ ์ฐ๊ฒฐํ๊ธฐ ์ํด w3wp.exe๋ฅผ ์ ํํ๊ณ attach๋ฅผ ํด๋ฆญํฉ๋๋ค:
.png)
์ด์ ํ๋ก์ธ์ค๋ฅผ ๋๋ฒ๊น ํ๊ณ ์์ผ๋ฏ๋ก, ํ๋ก์ธ์ค๋ฅผ ์ค์งํ๊ณ ๋ชจ๋ ๋ชจ๋์ ๋ก๋ํ ์๊ฐ์ ๋๋ค. ๋จผ์ _Debug >> Break All_์ ํด๋ฆญํ ๋ค์ _Debug >> Windows >> Modules_๋ฅผ ํด๋ฆญํฉ๋๋ค:
.png)
.png)
Modules์์ ์๋ฌด ๋ชจ๋์ ํด๋ฆญํ๊ณ Open All Modules๋ฅผ ์ ํํฉ๋๋ค:
.png)
Assembly Explorer์์ ์๋ฌด ๋ชจ๋์ ์ค๋ฅธ์ชฝ ํด๋ฆญํ๊ณ Sort Assemblies๋ฅผ ํด๋ฆญํฉ๋๋ค:
.png)
Java ๋์ปดํ์ผ๋ฌ
https://github.com/skylot/jadx
https://github.com/java-decompiler/jd-gui/releases
DLL ๋๋ฒ๊น
IDA ์ฌ์ฉ
- rundll32 ๋ก๋ (64๋นํธ๋ C:\Windows\System32\rundll32.exe, 32๋นํธ๋ C:\Windows\SysWOW64\rundll32.exe)
- Windbg ๋๋ฒ๊ฑฐ ์ ํ
- โSuspend on library load/unloadโ ์ ํ
.png)
- ์คํ์ ๋งค๊ฐ๋ณ์๋ฅผ ๊ตฌ์ฑํ์ฌ DLL ๊ฒฝ๋ก์ ํธ์ถํ ํจ์๋ฅผ ์ค์ ํฉ๋๋ค:
.png)
๊ทธ๋ฐ ๋ค์ ๋๋ฒ๊น ์ ์์ํ๋ฉด ๊ฐ DLL์ด ๋ก๋๋ ๋ ์คํ์ด ์ค์ง๋ฉ๋๋ค, ์ดํ rundll32๊ฐ DLL์ ๋ก๋ํ๋ฉด ์คํ์ด ์ค์ง๋ฉ๋๋ค.
ํ์ง๋ง, ๋ก๋๋ DLL์ ์ฝ๋์ ์ด๋ป๊ฒ ์ ๊ทผํ ์ ์์๊น์? ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
x64dbg/x32dbg ์ฌ์ฉ
- rundll32 ๋ก๋ (64๋นํธ๋ C:\Windows\System32\rundll32.exe, 32๋นํธ๋ C:\Windows\SysWOW64\rundll32.exe)
- ๋ช ๋ น์ค ๋ณ๊ฒฝ (File โ> Change Command Line) ๋ฐ DLL ๊ฒฝ๋ก์ ํธ์ถํ ํจ์๋ฅผ ์ค์ ํฉ๋๋ค. ์: โC:\Windows\SysWOW64\rundll32.exeโ โZ:\shared\Cybercamp\rev2\\14.ridii_2.dllโ,DLLMain
- _Options โ> Settings_์์ โDLL Entryโ๋ฅผ ์ ํํฉ๋๋ค.
- ๊ทธ๋ฐ ๋ค์ ์คํ ์์์ ํด๋ฆญํ๋ฉด ๋๋ฒ๊ฑฐ๊ฐ ๊ฐ DLL ๋ฉ์ธ์์ ์ค์ง๋๋ฉฐ, ์ด๋ ์์ ์์ ๋น์ ์ DLL์ DLL Entry์์ ์ค์ง๋ฉ๋๋ค. ๊ฑฐ๊ธฐ์ ์ค๋จ์ ์ ์ค์ ํ๊ณ ์ถ์ ์ง์ ์ ๊ฒ์ํ๋ฉด ๋ฉ๋๋ค.
์คํ์ด ์ด๋ค ์ด์ ๋ก win64dbg์์ ์ค์ง๋๋ฉด win64dbg ์ฐฝ ์๋จ์์ ์ด๋ค ์ฝ๋์ ์๋์ง ํ์ธํ ์ ์์ต๋๋ค:
.png)
๊ทธ๋ฐ ๋ค์, ์ด ์ ๋ณด๋ฅผ ํตํด ๋๋ฒ๊น ํ๋ ค๋ DLL์์ ์คํ์ด ์ค์ง๋ ์์ ์ ํ์ธํ ์ ์์ต๋๋ค.
GUI ์ฑ / ๋น๋์ค ๊ฒ์
Cheat Engine๋ ์คํ ์ค์ธ ๊ฒ์์ ๋ฉ๋ชจ๋ฆฌ ๋ด์์ ์ค์ํ ๊ฐ์ด ์ ์ฅ๋ ์์น๋ฅผ ์ฐพ๊ณ ์ด๋ฅผ ๋ณ๊ฒฝํ๋ ๋ฐ ์ ์ฉํ ํ๋ก๊ทธ๋จ์ ๋๋ค. ์์ธํ ์ ๋ณด๋ ๋ค์์ ์ฐธ์กฐํ์ญ์์ค:
PiNCE๋ GNU Project Debugger (GDB)๋ฅผ ์ํ ํ๋ก ํธ์๋/๋ฆฌ๋ฒ์ค ์์ง๋์ด๋ง ๋๊ตฌ๋ก, ๊ฒ์์ ์ค์ ์ ๋๊ณ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ฆฌ๋ฒ์ค ์์ง๋์ด๋ง ๊ด๋ จ ์์ ์ ๋ชจ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Decompiler Explorer๋ ์ฌ๋ฌ ๋์ปดํ์ผ๋ฌ์ ๋ํ ์น ํ๋ก ํธ์๋์ ๋๋ค. ์ด ์น ์๋น์ค๋ ์์ ์คํ ํ์ผ์ ๋ํ ๋ค์ํ ๋์ปดํ์ผ๋ฌ์ ์ถ๋ ฅ์ ๋น๊ตํ ์ ์๊ฒ ํด์ค๋๋ค.
ARM & MIPS
์ ธ์ฝ๋
blobrunner๋ก ์ ธ์ฝ๋ ๋๋ฒ๊น
Blobrunner๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ๋ด์ ์
ธ์ฝ๋๋ฅผ ํ ๋นํ๊ณ , ์
ธ์ฝ๋๊ฐ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ์ง์ํ๋ฉฐ ์คํ์ ์ค์งํฉ๋๋ค.
๊ทธ๋ฐ ๋ค์, ํ๋ก์ธ์ค์ ๋๋ฒ๊ฑฐ(Ida ๋๋ x64dbg)๋ฅผ ์ฐ๊ฒฐํ๊ณ ์ง์ ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ์ค๋จ์ ์ ์ค์ ํ ํ ์คํ์ ์ฌ๊ฐํด์ผ ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์
ธ์ฝ๋๋ฅผ ๋๋ฒ๊น
ํ ์ ์์ต๋๋ค.
๋ฆด๋ฆฌ์ค GitHub ํ์ด์ง์๋ ์ปดํ์ผ๋ ๋ฆด๋ฆฌ์ค๋ฅผ ํฌํจํ๋ zip ํ์ผ์ด ์์ต๋๋ค: https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5
Blobrunner์ ์ฝ๊ฐ ์์ ๋ ๋ฒ์ ์ ๋ค์ ๋งํฌ์์ ์ฐพ์ ์ ์์ต๋๋ค. ์ปดํ์ผํ๋ ค๋ฉด Visual Studio Code์์ C/C++ ํ๋ก์ ํธ๋ฅผ ์์ฑํ๊ณ ์ฝ๋๋ฅผ ๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ๊ณ ๋น๋ํ๋ฉด ๋ฉ๋๋ค.
jmp2it๋ก ์ ธ์ฝ๋ ๋๋ฒ๊น
jmp2it๋ blobrunner์ ๋งค์ฐ ์ ์ฌํฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ๋ด์ ์ ธ์ฝ๋๋ฅผ ํ ๋นํ๊ณ ์์ํ ๋ฃจํ๋ฅผ ์์ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ํ๋ก์ธ์ค์ ๋๋ฒ๊ฑฐ๋ฅผ ์ฐ๊ฒฐํ๊ณ , ์์์ ๋๋ฅธ ํ 2-5์ด ๊ธฐ๋ค๋ ธ๋ค๊ฐ ์ค์ง๋ฅผ ๋๋ฅด๋ฉด ์์ํ ๋ฃจํ ์์ ์๊ฒ ๋ฉ๋๋ค. ์์ํ ๋ฃจํ์ ๋ค์ ๋ช ๋ น์ผ๋ก ์ ํํ๋ฉด ์ ธ์ฝ๋ ํธ์ถ์ด ์ด๋ฃจ์ด์ง๊ณ , ๊ฒฐ๊ตญ ์ ธ์ฝ๋๋ฅผ ์คํํ๊ฒ ๋ฉ๋๋ค.
.png)
๋ฆด๋ฆฌ์ค ํ์ด์ง์์ ์ปดํ์ผ๋ ๋ฒ์ ์ ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค.
Cutter๋ฅผ ์ฌ์ฉํ ์ ธ์ฝ๋ ๋๋ฒ๊น
Cutter๋ radare์ GUI์ ๋๋ค. Cutter๋ฅผ ์ฌ์ฉํ๋ฉด ์ ธ์ฝ๋๋ฅผ ์๋ฎฌ๋ ์ด์ ํ๊ณ ๋์ ์ผ๋ก ๊ฒ์ฌํ ์ ์์ต๋๋ค.
Cutter๋ โํ์ผ ์ด๊ธฐโ์ โ์ ธ์ฝ๋ ์ด๊ธฐโ๋ฅผ ํ์ฉํฉ๋๋ค. ์ ๊ฒฝ์ฐ์๋ ์ ธ์ฝ๋๋ฅผ ํ์ผ๋ก ์ด์์ ๋ ์ฌ๋ฐ๋ฅด๊ฒ ๋์ปดํ์ผ๋์์ง๋ง, ์ ธ์ฝ๋๋ก ์ด์์ ๋๋ ๊ทธ๋ ์ง ์์์ต๋๋ค:
.png)
์ํ๋ ์์น์์ ์๋ฎฌ๋ ์ด์ ์ ์์ํ๋ ค๋ฉด ๊ทธ๊ณณ์ bp๋ฅผ ์ค์ ํ๋ฉด Cutter๊ฐ ์๋์ผ๋ก ๊ทธ๊ณณ์์ ์๋ฎฌ๋ ์ด์ ์ ์์ํฉ๋๋ค:
.png)
.png)
์๋ฅผ ๋ค์ด, ํฅ์ค ๋คํ ๋ด์์ ์คํ์ ํ์ธํ ์ ์์ต๋๋ค:
.png)
์ ธ์ฝ๋์ ๋๋ ํ ํด์ ๋ฐ ์คํ๋ ํจ์ ๊ฐ์ ธ์ค๊ธฐ
scdbg๋ฅผ ์๋ํด ๋ณด์ญ์์ค.
์ด ๋๊ตฌ๋ ์
ธ์ฝ๋๊ฐ ์ฌ์ฉํ๋ ํจ์์ ์
ธ์ฝ๋๊ฐ ๋ฉ๋ชจ๋ฆฌ์์ ์ค์ค๋ก ๋์ฝ๋ฉํ๋์ง ์ฌ๋ถ๋ฅผ ์๋ ค์ค๋๋ค.
scdbg.exe -f shellcode # Get info
scdbg.exe -f shellcode -r #show analysis report at end of run
scdbg.exe -f shellcode -i -r #enable interactive hooks (file and network) and show analysis report at end of run
scdbg.exe -f shellcode -d #Dump decoded shellcode
scdbg.exe -f shellcode /findsc #Find offset where starts
scdbg.exe -f shellcode /foff 0x0000004D #Start the executing in that offset
scDbg๋ ์ ํํ ์ต์ ์ ์ ํํ๊ณ shellcode๋ฅผ ์คํํ ์ ์๋ ๊ทธ๋ํฝ ๋ฐ์ฒ๋ฅผ ์ ๊ณตํฉ๋๋ค.
.png)
Create Dump ์ต์ ์ ๋ฉ๋ชจ๋ฆฌ์์ shellcode์ ๋์ ์ผ๋ก ๋ณ๊ฒฝ์ด ์ด๋ฃจ์ด์ง ๊ฒฝ์ฐ ์ต์ข shellcode๋ฅผ ๋คํํฉ๋๋ค(๋์ฝ๋ฉ๋ shellcode๋ฅผ ๋ค์ด๋ก๋ํ๋ ๋ฐ ์ ์ฉํจ). start offset์ ํน์ ์คํ์ ์์ shellcode๋ฅผ ์์ํ๋ ๋ฐ ์ ์ฉํ ์ ์์ต๋๋ค. Debug Shell ์ต์ ์ scDbg ํฐ๋ฏธ๋์ ์ฌ์ฉํ์ฌ shellcode๋ฅผ ๋๋ฒ๊น ํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค(ํ์ง๋ง ์ด ๋ฌธ์ ์ ๋ํด์๋ ์ด์ ์ ์ค๋ช ํ ์ต์ ๋ค์ด ๋ ๋์ ๊ฒ ๊ฐ์ต๋๋ค. ์๋ํ๋ฉด Ida๋ x64dbg๋ฅผ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค).
CyberChef๋ฅผ ์ฌ์ฉํ ๋์ค์ด์ ๋ธ๋ง
shellcode ํ์ผ์ ์ ๋ ฅ์ผ๋ก ์ ๋ก๋ํ๊ณ ๋ค์ ๋ ์ํผ๋ฅผ ์ฌ์ฉํ์ฌ ๋์ปดํ์ผํฉ๋๋ค: https://gchq.github.io/CyberChef/#recipe=To_Hex(โSpaceโ,0)Disassemble_x86(โ32โ,โFull%20x86%20architectureโ,16,0,true,true)
Movfuscator
์ด ์ค๋ธ์คํ๋ ์ดํฐ๋ ๋ชจ๋ mov ๋ช
๋ น์ด๋ฅผ ์์ ํฉ๋๋ค(์ ๋ง ๋ฉ์ง๋๋ค). ๋ํ ์คํ ํ๋ฆ์ ๋ณ๊ฒฝํ๊ธฐ ์ํด ์ธํฐ๋ฝํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์๋ ๋ฐฉ์์ ๋ํ ์์ธํ ์ ๋ณด๋ ๋ค์์ ์ฐธ์กฐํ์ญ์์ค:
- https://www.youtube.com/watch?v=2VF_wPkiBJY
- https://github.com/xoreaxeaxeax/movfuscator/blob/master/slides/domas_2015_the_movfuscator.pdf
์ด์ด ์ข๋ค๋ฉด demovfuscator๊ฐ ์ด์ง ํ์ผ์ ๋์ค๋ธ์คํ๋ ์ดํธํ ๊ฒ์ ๋๋ค. ์ฌ๋ฌ ์ข ์์ฑ์ด ์์ต๋๋ค.
apt-get install libcapstone-dev
apt-get install libz3-dev
And install keystone (apt-get install cmake; mkdir build; cd build; ../make-share.sh; make install)
If you are playing a CTF, this workaround to find the flag could be very useful: https://dustri.org/b/defeating-the-recons-movfuscator-crackme.html
Rust
์ง์
์ ์ ์ฐพ์ผ๋ ค๋ฉด ::main์ผ๋ก ํจ์๋ฅผ ๊ฒ์ํ์ธ์:
.png)
์ด ๊ฒฝ์ฐ ๋ฐ์ด๋๋ฆฌ ์ด๋ฆ์ authenticator์์ผ๋ฏ๋ก, ์ด๊ฒ์ด ํฅ๋ฏธ๋ก์ด ์ฃผ์ ํจ์๋ผ๋ ๊ฒ์ ๋ถ๋ช
ํฉ๋๋ค.
ํธ์ถ๋๋ ํจ์์ ์ด๋ฆ์ ๊ฐ์ง๊ณ , ์
๋ ฅ๊ณผ ์ถ๋ ฅ์ ๋ํด ๋ฐฐ์ฐ๊ธฐ ์ํด ์ธํฐ๋ท์์ ๊ฒ์ํ์ธ์.
Delphi
Delphi๋ก ์ปดํ์ผ๋ ๋ฐ์ด๋๋ฆฌ์ ๊ฒฝ์ฐ https://github.com/crypto2011/IDR๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Delphi ๋ฐ์ด๋๋ฆฌ๋ฅผ ๋ฆฌ๋ฒ์คํด์ผ ํ๋ค๋ฉด IDA ํ๋ฌ๊ทธ์ธ https://github.com/Coldzer0/IDA-For-Delphi๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ถ์ฒํฉ๋๋ค.
ATL+f7๋ฅผ ๋๋ฌ (IDA์์ ํ์ด์ฌ ํ๋ฌ๊ทธ์ธ ๊ฐ์ ธ์ค๊ธฐ) ํ์ด์ฌ ํ๋ฌ๊ทธ์ธ์ ์ ํํ์ธ์.
์ด ํ๋ฌ๊ทธ์ธ์ ๋ฐ์ด๋๋ฆฌ๋ฅผ ์คํํ๊ณ ๋๋ฒ๊น ์์ ์ ํจ์ ์ด๋ฆ์ ๋์ ์ผ๋ก ํด๊ฒฐํฉ๋๋ค. ๋๋ฒ๊น ์ ์์ํ ํ ๋ค์ ์์ ๋ฒํผ(๋ น์ ๋ฒํผ ๋๋ f9)์ ๋๋ฅด๋ฉด ์ค์ ์ฝ๋์ ์์ ๋ถ๋ถ์์ ์ค๋จ์ ์ด ๋ฐ์ํฉ๋๋ค.
๊ทธ๋ํฝ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฒํผ์ ๋๋ฅด๋ฉด ๋๋ฒ๊ฑฐ๊ฐ ํด๋น ๋ฒํผ์ ์ํด ์คํ๋ ํจ์์์ ์ค๋จ๋๋ ๊ฒ๋ ๋งค์ฐ ํฅ๋ฏธ๋กญ์ต๋๋ค.
Golang
Golang ๋ฐ์ด๋๋ฆฌ๋ฅผ ๋ฆฌ๋ฒ์คํด์ผ ํ๋ค๋ฉด IDA ํ๋ฌ๊ทธ์ธ https://github.com/sibears/IDAGolangHelper๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ถ์ฒํฉ๋๋ค.
ATL+f7๋ฅผ ๋๋ฌ (IDA์์ ํ์ด์ฌ ํ๋ฌ๊ทธ์ธ ๊ฐ์ ธ์ค๊ธฐ) ํ์ด์ฌ ํ๋ฌ๊ทธ์ธ์ ์ ํํ์ธ์.
์ด๊ฒ์ ํจ์์ ์ด๋ฆ์ ํด๊ฒฐํฉ๋๋ค.
Compiled Python
์ด ํ์ด์ง์์๋ ELF/EXE๋ก ์ปดํ์ผ๋ ํ์ด์ฌ ๋ฐ์ด๋๋ฆฌ์์ ํ์ด์ฌ ์ฝ๋๋ฅผ ์ป๋ ๋ฐฉ๋ฒ์ ์ฐพ์ ์ ์์ต๋๋ค:
Decompile compiled python binaries (exe, elf) - Retreive from .pyc
GBA - Game Body Advance
GBA ๊ฒ์์ ๋ฐ์ด๋๋ฆฌ๋ฅผ ์ป์ผ๋ฉด ๋ค์ํ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฎฌ๋ ์ดํธํ๊ณ ๋๋ฒ๊น ํ ์ ์์ต๋๋ค:
- no$gba (๋๋ฒ๊ทธ ๋ฒ์ ๋ค์ด๋ก๋) - ์ธํฐํ์ด์ค๊ฐ ์๋ ๋๋ฒ๊ฑฐ ํฌํจ
- mgba - CLI ๋๋ฒ๊ฑฐ ํฌํจ
- gba-ghidra-loader - Ghidra ํ๋ฌ๊ทธ์ธ
- GhidraGBA - Ghidra ํ๋ฌ๊ทธ์ธ
no$gba์์ Options โ> Emulation Setup โ> Controls** **๋ฅผ ํตํด ๊ฒ์ ๋ณด์ด ์ด๋๋ฐด์ค ๋ฒํผ์ ๋๋ฅด๋ ๋ฐฉ๋ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
.png)
๋๋ฅด๋ฉด ๊ฐ ํค๋ ์๋ณํ ์ ์๋ ๊ฐ์ ๊ฐ์ง๋๋ค:
A = 1
B = 2
SELECT = 4
START = 8
RIGHT = 16
LEFT = 32
UP = 64
DOWN = 128
R = 256
L = 256
์ด๋ฐ ์ข ๋ฅ์ ํ๋ก๊ทธ๋จ์์ ํฅ๋ฏธ๋ก์ด ๋ถ๋ถ์ ํ๋ก๊ทธ๋จ์ด ์ฌ์ฉ์ ์ ๋ ฅ์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋์ง์ ๋๋ค. ์ฃผ์ 0x4000130์์ ์ผ๋ฐ์ ์ผ๋ก ๋ฐ๊ฒฌ๋๋ ํจ์์ธ KEYINPUT์ ์ฐพ์ ์ ์์ต๋๋ค.
.png)
์ด์ ์ด๋ฏธ์ง์์ ํจ์๊ฐ FUN_080015a8์์ ํธ์ถ๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค (์ฃผ์: 0x080015fa ๋ฐ 0x080017ac).
๊ทธ ํจ์์์๋ ๋ช ๊ฐ์ง ์ด๊ธฐํ ์์ (์ค์ํ์ง ์์) ํ์:
void FUN_080015a8(void)
{
ushort uVar1;
undefined4 uVar2;
undefined4 uVar3;
ushort uVar4;
int iVar5;
ushort *puVar6;
undefined *local_2c;
DISPCNT = 0x1140;
FUN_08000a74();
FUN_08000ce4(1);
DISPCNT = 0x404;
FUN_08000dd0(&DAT_02009584,0x6000000,&DAT_030000dc);
FUN_08000354(&DAT_030000dc,0x3c);
uVar4 = DAT_030004d8;
์ด ์ฝ๋๋ฅผ ์ฐพ์์ต๋๋ค:
do {
DAT_030004da = uVar4; //This is the last key pressed
DAT_030004d8 = KEYINPUT | 0xfc00;
puVar6 = &DAT_0200b03c;
uVar4 = DAT_030004d8;
do {
uVar2 = DAT_030004dc;
uVar1 = *puVar6;
if ((uVar1 & DAT_030004da & ~uVar4) != 0) {
๋ง์ง๋ง if๋ **uVar4**๊ฐ ๋ง์ง๋ง ํค์ ์๋์ง ํ์ธํ๊ณ ํ์ฌ ํค๊ฐ ์๋์ง ํ์ธํฉ๋๋ค. ํ์ฌ ํค๋ **uVar1**์ ์ ์ฅ๋ฉ๋๋ค.
if (uVar1 == 4) {
DAT_030000d4 = 0;
uVar3 = FUN_08001c24(DAT_030004dc);
FUN_08001868(uVar2,0,uVar3);
DAT_05000000 = 0x1483;
FUN_08001844(&DAT_0200ba18);
FUN_08001844(&DAT_0200ba20,&DAT_0200ba40);
DAT_030000d8 = 0;
uVar4 = DAT_030004d8;
}
else {
if (uVar1 == 8) {
if (DAT_030000d8 == 0xf3) {
DISPCNT = 0x404;
FUN_08000dd0(&DAT_02008aac,0x6000000,&DAT_030000dc);
FUN_08000354(&DAT_030000dc,0x3c);
uVar4 = DAT_030004d8;
}
}
else {
if (DAT_030000d4 < 8) {
DAT_030000d4 = DAT_030000d4 + 1;
FUN_08000864();
if (uVar1 == 0x10) {
DAT_030000d8 = DAT_030000d8 + 0x3a;
์ด์ ์ฝ๋์์ uVar1 (๋๋ฅธ ๋ฒํผ์ ๊ฐ์ด ์๋ ๊ณณ)์ ๋ช ๊ฐ์ง ๊ฐ๊ณผ ๋น๊ตํ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค:
- ๋จผ์ , ๊ฐ 4 (SELECT ๋ฒํผ)์ ๋น๊ต๋ฉ๋๋ค: ์ด ์ฑ๋ฆฐ์ง์์ ์ด ๋ฒํผ์ ํ๋ฉด์ ์ง์๋๋ค.
- ๊ทธ ๋ค์, ๊ฐ 8 (START ๋ฒํผ)๊ณผ ๋น๊ต๋ฉ๋๋ค: ์ด ์ฑ๋ฆฐ์ง์์ ์ด ๋ฒํผ์ ์ฝ๋๊ฐ ํ๋๊ทธ๋ฅผ ์ป๊ธฐ ์ํ ์ ํจํ์ง ํ์ธํฉ๋๋ค.
- ์ด ๊ฒฝ์ฐ
DAT_030000d8๋ณ์๊ฐ 0xf3๊ณผ ๋น๊ต๋๋ฉฐ, ๊ฐ์ด ๊ฐ์ผ๋ฉด ์ผ๋ถ ์ฝ๋๊ฐ ์คํ๋ฉ๋๋ค. - ๋ค๋ฅธ ๊ฒฝ์ฐ์๋ ์ผ๋ถ cont (
DAT_030000d4)๊ฐ ํ์ธ๋ฉ๋๋ค. ์ด๋ ์ฝ๋์ ๋ค์ด๊ฐ ์งํ 1์ ๋ํ๊ธฐ ๋๋ฌธ์ cont์ ๋๋ค.
8๋ณด๋ค ์์ผ๋ฉด **DAT_030000d8**์ ๊ฐ์ ๋ํ๋ ์์ ์ด ์ํ๋ฉ๋๋ค (๊ธฐ๋ณธ์ ์ผ๋ก cont๊ฐ 8๋ณด๋ค ์์ ๋ ๋๋ฆฐ ํค์ ๊ฐ์ ์ด ๋ณ์์ ๋ํ๊ณ ์์ต๋๋ค).
๋ฐ๋ผ์ ์ด ์ฑ๋ฆฐ์ง์์๋ ๋ฒํผ์ ๊ฐ์ ์๊ณ , ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ํ ๊ฐ์ด 0xf3์ด ๋๋๋ก ๊ธธ์ด๊ฐ 8๋ณด๋ค ์์ ์กฐํฉ์ ๋๋ฌ์ผ ํ์ต๋๋ค.
์ด ํํ ๋ฆฌ์ผ์ ๋ํ ์ฐธ๊ณ ์๋ฃ: https://exp.codes/Nostalgia/
Game Boy
Courses
- https://github.com/0xZ0F/Z0FCourse_ReverseEngineering
- https://github.com/malrev/ABD (์ด์ง ๋์ค๋ธํจ์ค์ผ์ด์ )
Tip
AWS ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training AWS Red Team Expert (ARTE)
GCP ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:HackTricks Training GCP Red Team Expert (GRTE)
Azure ํดํน ๋ฐฐ์ฐ๊ธฐ ๋ฐ ์ฐ์ตํ๊ธฐ:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks ์ง์ํ๊ธฐ
- ๊ตฌ๋ ๊ณํ ํ์ธํ๊ธฐ!
- **๐ฌ ๋์ค์ฝ๋ ๊ทธ๋ฃน ๋๋ ํ ๋ ๊ทธ๋จ ๊ทธ๋ฃน์ ์ฐธ์ฌํ๊ฑฐ๋ ํธ์ํฐ ๐ฆ @hacktricks_live๋ฅผ ํ๋ก์ฐํ์ธ์.
- HackTricks ๋ฐ HackTricks Cloud ๊นํ๋ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ PR์ ์ ์ถํ์ฌ ํดํน ํธ๋ฆญ์ ๊ณต์ ํ์ธ์.


