R136A1
[REVERSING] ์ํฐ ๋๋ฒ๊น Static & Dynamic Anti-Debugging ๋ณธ๋ฌธ
[REVERSING] ์ํฐ ๋๋ฒ๊น Static & Dynamic Anti-Debugging
r136a1x27 2021. 2. 20. 18:38๋๋ฒ๊น ๋ฐฉ์ง ๋๋ ๋ถ์์ ์ด๋ ต๊ฒ ํจ
๋ฐฐ์์ผ ํ๋ ์ด์
์ ์ฑ์ฝ๋ ์ ์์๋ค์ด ๋ณด์ ์ ๋ฌธ๊ฐ๋ฅผ ์ด๋ ค์์ ๋น ํธ๋ฆฌ๊ธฐ ์ํ ์ฉ๋๋ก ์ฌ์ฉํ์ฌ
๋ณด์ ์ ๋ฌธ๊ฐ๋ค์ ์ํฐ ๋๋ฒ๊น ์ ๋์ ์๋ฆฌ๋ฅผ ํ์ ํ ํ ํํผํ๊ธฐ ์ํจ๋ ์์ง๋ง
์ผ๋ฐ ๊ฐ๋ฐ์๋ค๋ ํด์ปค๋ค์ ๋๋ฒ๊น ์ผ๋ก๋ถํฐ ์์ ์ ํ๋ก๊ทธ๋จ์ ๋ณด์์ ์งํค๊ธฐ ์ํด ์ํฐ ๋๋ฒ๊น ์ ์์๋ฌ์ผ ํจ
ํ์์ ๊ณ ๊ธ ๋ฆฌ๋ฒ์ฑ ๊ธฐ๋ฒ์ ๋ฐฐ์ธ ์ ์์
Static ์ํฐ ๋๋ฒ๊น
: ์ ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ๋๋ฒ๊น ์ ๋ง๋ ์์คํ
๋ณดํต ํ ๋ฒ๋ง ์ฐํํ๋ฉด ๋์ด๊ฐ ์ ์์ (Dynamic ํ ๋ฐฉ๋ฒ๋ณด๋ค ๋น๊ต์ ์ฌ์ด ์ด์ )
๋ชฉ์
๋ณดํต ๋๋ฒ๊ฑฐ๋ฅผ ์ฌ์ฉํ๋์ง๋ฅผ ํ์งํ๊ธฐ ์ํจ
์ฆ, Static ๊ธฐ๋ฒ์ด ์ ์ฉ๋ ํ์ผ์ ๋๋ฒ๊ฑฐ์ ์ฌ๋ ธ์ ๋ ์ ๋๋ก ์คํ๋์ง ์๊ฑฐ๋, ๊ฐ๋ฐ์๊ฐ ๋ฃ์ ๋๋ฒ๊ทธ ์ ์ฉ ์ฝ๋๊ฐ ์คํ๋จ
๋ฐฉ๋ฒ
๋๋ฒ๊น ํ๋ก์ธ์ค์์ ์์ ์ด ๋๋ฒ๊น ๋นํ๋์ง ์ฌ๋ถ๋ฅผ ํ์ ํ๋ ๊ธฐ๋ฒ
๋๋ฒ๊น ์ค์ด๋ผ๊ณ ํ๋จ ์ ์ผ๋ฐ ์คํ๊ณผ๋ ๋ค๋ฅธ ์ฝ๋(์ฃผ๋ก ์ข ๋ฃ)๋ฅผ ์คํํจ
1. ๋๋ฒ๊ฑฐ๋ฅผ ํ์งํ๋ค
2. ๋๋ฒ๊น ํ๊ฒฝ์ ํ์งํ๋ค
3. ๋๋ฒ๊ฑฐ๋ฅผ ๊ฐ์ ๋ถ๋ฆฌํ๋ค
์์ ์ ํ๋ก์ธ์ค๊ฐ ๋๋ฒ๊น ๋นํ๋์ง ์ฒดํฌํ๋ ๊ฒ์ "์ง์ ์ ์ธ ๋๋ฒ๊ฑฐ ํ์ง ๋ฐฉ๋ฒ"
๋๋ฒ๊น ํ๊ฒฝ์ ์ฒดํฌํด์ ๋๋ฒ๊ฑฐ์ ๋์๊ฐ ์กฐ๊ธ์ด๋ผ๋ ๋ณด์ด๋ฉด ์ฆ์ ์คํ์ ๋ฉ์ถ๋ ๊ฒ์ "๊ฐ์ ์ ์ธ ๋๋ฒ๊ฑฐ ํ์ง ๋ฐฉ๋ฒ"
์ข ๋ฅ
PEP(Process Environment Block) ํ์ฌ ํ๋ก์ธ์ค์ ๋๋ฒ๊น ์ฌ๋ถ
PEB ๊ตฌ์กฐ์ฒด ์ ๋ณด๋ฅผ ์ด์ฉํ์ฌ ํ์ฌ ํ๋ก์ธ์ค์ ๋๋ฒ๊น ์ฌ๋ถ๋ฅผ ํ๋จํ๋ค
์ค์ PEB ๋ฉค๋ฒ0x002 BeingDebugged: Unchar0x00c Ldr : Ptr32 _PEB_LDR_DATA0x018 ProcessHeap : Ptr32 Void0x068 NtGlobalFlag : Uint4Blapislazull.tistory.com/59
TLS Callback ํจ์
Entry Point๋ณด๋ค ๋จผ์ ์คํ๋๋ ํน์ง์ ์ด์ฉํจ
ํด๋น ํจ์ ๋ด์์ IsDebuggerPresent() ๋ฑ์ ํจ์๋ก ๊ฐ๋จํ ๋๋ฒ๊น ์ฌ๋ถ๋ฅผ ํ๋จํ์ฌ
ํ๋ก๊ทธ๋จ์ ์คํ์ํฌ์ง ๋ง์ง๋ฅผ ๊ฒฐ์ ํ ์ ์์
[API] NtQueryInfromationProcess() ํ์ฌ ํ๋ก์ธ์ค์ ๋๋ฒ๊น ์ฌ๋ถ
ํ์ฌ ํ๋ก์ธ์ค์ ๋๋ฒ๊น ๊ด๋ จ ์ ๋ณด๋ฅผ ๋น๋กฏํ์ฌ ๋งค์ฐ ๋ค์ํ ์ ๋ณด๋ฅผ ์ป์ ์ ์์
[API] NtQuerySystemInformation() ํ์ฌ ํ๊ฒฝ
ํ์ฌ OS๊ฐ Debug Mode๋ก ๋ถํ ๋์๋์ง๋ฅผ ํ๋จํจ
[API] NtQueryObject() ํ์ฌ ํ๊ฒฝ?
์์คํ ์ ์ปค๋ ๊ฐ์ฒด ์ ๋ณด๋ฅผ ๊ตฌํด์ค๋ ํจ์
์์คํ - ์ด๋ค ๋๋ฒ๊ฑฐ๊ฐ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ฅผ ๋๋ฒ๊น ์ค์ผ ๋ DebugObject ํ์ ์ ์ปค๋ ๊ฐ์ฒด๊ฐ ์์ฑ๋จ
์ด ๊ฐ์ฒด์ ์กด์ฌ๋ฅผ ํ์ธํจ
[API] ZwSetInformationThread() ๋๋ฒ๊ฑฐ ๊ฐ์ ๋ถ๋ฆฌ
thread์ ์ ๋ณด๋ฅผ ์ธํ ํ๋ System Native API
ํ์ฌ ํ๋ก์ธ์ค์์ ๊ฐ์ ๋ก ๋๋ฒ๊ฑฐ๋ฅผ ๋ผ์ด๋ผ ์ ์์(Detach)
TEB(Thread Environment Block)
๊ฐ์ข API๋ฅผ ์ด์ฉํ ๋ฐฉ๋ฒ
Targeting ์ด์ฉํ ๋ฐฉ๋ฒ
...
codeEngine basic 4๋ฒ ๋ฌธ์
์ผ๋ฐ ์คํ ์ ์ ์์ด๋ผ๊ณ print๋ฌธ์ ๋ณด๋ด๋ ํ์ผ๋๋ฒ๊น ์๋ ์ ์ ์์คํ๋์ง ์๊ณ
๋๋ฒ๊น ๋ชจ๋์์๋ง ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๋น ์ง๊ฒ ๋จ→ IsDebuggerPresent() ๋ผ๋ PEB๋ฅผ ์ฐธ๊ณ ํ๋ API ๋๋ฌธ
์ฐํ
ํ์ง ์ฝ๋์์ ์ป์ด์ค๋ ์ ๋ณด๋ฅผ ํ์ ํ์ฌ, ๊ทธ ์ ๋ณด ์์ฒด๋ฅผ ๋ณ๊ฒฝํด๋ฒ๋ฆฐ๋ค
API hooking์ด๋ ๋๋ฒ๊ฑฐ ์์ฒด ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉ
Dynamic ์ํฐ ๋๋ฒ๊น
Static๋ณด๋ค ํจ์ฌ ๋ฒ๊ฑฐ๋ก์ฐ๋ฉฐ ์ฐํ๊ฐ ๊น๋ค๋ก์
๋๋ฒ๊ฑฐ ํ์ง๋ฅผ ํตํด ๋ง๋ Static๊ณผ๋ ๋ค๋ฅด๊ฒ ๋ด๋ถ ์ฝ๋์ ๋ฐ์ดํฐ๋ฅผ ์จ๊ธฐ๊ธฐ ์ํด ๋๋ฒ๊น ๋์ค ์์๋ก ๋์ ๋ ๊น๋ค๋ก์
๋๋ฒ๊น ์ ์งํํ๋ฉด์ ์ํฐ ๋๋ฒ๊น ์ ๋ง๋ ๋ ๋ง๋ค ํด๊ฒฐํด์ผ ํ๋ ๊ธฐ๋ฒ
๋๋ฒ๊ฑฐ ํธ๋ ์ด์ฑ์ ๋ฐฉํดํ์ฌ ์๋ณธ ํ๋ก๊ทธ๋จ์ ์ฝ๋์ ๋ฐ์ดํฐ๋ฅผ ํ์ธํ ์ ์๊ฒ ๋ง๋ฆ
ใด๋ถ์ํ์; ํ๋ก๊ทธ๋จ์ ๋ด๋ถ Instruction์ ํ๋์ฉ ์คํํ๋ฉด์ ๋ ์ง์คํฐ, ๋ฉ๋ชจ๋ฆฌ(์คํ) ๋ฑ์ ์ค์๊ฐ์ผ๋ก ํ์ธํ๋ ๊ฒ.
์ข ๋ฅ
SEH(Structured Exception Handling) ๋ฉ์ปค๋์ฆ
์ ์์ ์ผ๋ก ์คํ๋ ํ๋ก์ธ์ค์์ ์์ธ(Exception)๊ฐ ๋ฐ์ํ๋ฉด OS์์ ์์ธ๋ฅผ ๋ฐ์ ํ๋ก์ธ์ค์ ๋ฑ๋ก๋ SEH๋ฅผ ํธ์ถํด์ค
๋๋ฒ๊ธฐ์์ ์์ธ๊ฐ ๋ฐ์ํ๋ฉด ๋๋ฒ๊ฑฐ์์ ์์ธ ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํ๊ฒ ๋๋๋ฐ ์ด๋ฐ ํน์ง์ ์ด์ฉํ์ฌ
์ ์ ์คํ๋๋ ๊ฒฝ์ฐ์ ๋๋ฒ๊น ๋นํ๋ ๊ฒฝ์ฐ๋ฅผ ํ๋ณํด์ ์๋ก ๋ค๋ฅธ ๋์์ ์ํํ ์ ์๋ค.
(์์ง ์ดํด๊ฐ ์...)
Timing Check
๋๋ฒ๊ฑฐ๋ฅผ ์ด์ฉํด ์ฝ๋๋ฅผ ํ ์ค์ฉ ํธ๋ ์ด์ฑํ๋ฉฐ ์งํํ๋ฉด ์ ์์ ์ผ๋ก ์คํ๋ ๋ ๋ณด๋ค ๋น์ ์์ ์ผ๋ก ์ค๋ ์๊ฐ์ด ์์๋จ
์ด๋ฐ ์คํ ์๊ฐ์ ์ฐจ์ด๋ฅผ ์ธก์ ํ์ฌ ๋๋ฒ๊น ์ฌ๋ถ๋ฅผ ํ๋ณํจ
0xCC(Breakpoint) Detection
ํ๋ก๊ทธ๋จ์ ๋๋ฒ๊น ํ ๋ Software BP(BreakPoint)๋ฅผ ๋ง์ด ์ค์นํจ
BP์ x86 Instruction 0xCC๋ฅผ ๋ฐ๊ฒฌํ์ฌ ๋๋ฒ๊น ์ฌ๋ถ๋ฅผ ํ๋ณํ๋ค
๋๋ฒ๊ฑฐ์ ํน์ง์ ์ญ์ด์ฉํด INT 3 ๋ฑ์ ์จ์ Break Points๋ฅผ ์ด์ฉํ ๋ฐฉ๋ฒ
TF๊ฐ์ 1๋ก ์กฐ์ํด์ CPU๋ฅผ Single Step์ผ๋ก ์ ํ์์ผ์ EXCEPTIONS SINGLE STEP ์์ธ๋ฅผ ๋ฐ์ ์ํด
์์ฃผ ๋๋ฒ๊น ์ ์ํด ๋ถ์ํ๋ API์ ์ฒซ ๋ฐ์ดํธ ์ฝ๋๊ฐ CC(Break Point)์ผ ๋ ๋๋ฒ๊น ์ ํ์งํ๋ ๋ฐฉ๋ฒ
์ํฐ ๋๋ฒ๊น ์ ์ข ๋ฅ
www.openrce.org/reference_library/anti_reversing
์ฐํ
API hooking์ด๋ ๋๋ฒ๊ฑฐ ์์ฒด ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉ
์ฐํ ์ค์ต
'REVERSING > ๐ง๐๐ซ๐๐ง๐จ๐๐ฃ๐ ๐จ๐ฉ๐ช๐๐ฎ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
PE ํ์ผ ํฌ๋งท ๊ตฌ์กฐ Portable Executable (0) | 2021.02.23 |
---|---|
C์ธ์ด ์ฃผ์๊ตฌ๋ฌธ ์ด์ ๋ธ๋ฆฌ ์ฝ๋ ํํ (0) | 2021.02.20 |
๋๋ ํ (0) | 2021.02.20 |
OllyDebugger (0) | 2021.02.18 |
[SWING] REVERSING CTF DAY 1 (0) | 2021.02.16 |