-
μν° λ¦¬λ²μ± :: 04 - μν° λλ²κΉ κΈ°λ²λ€ μκ°SECURITY/REVERSING 2020. 8. 5. 12:09
μμ μν° λλ²κΉ μ λν κ°λ¨ν μμ λ₯Ό μ΄ν΄λ³΄μλ€.
2020/08/04 - [SECURITY/REVERSING] - μν° λ¦¬λ²μ± :: 03 - μν° λλ²κΉ μμ
μ΄μ λ μν° λλ²κΉ μ λν μ΄λ‘ μ μΈ κ²λ€μ κ°λ¨νκ² κ°λ μ μΌλ‘ μ 리ν΄λ³Ό κ²μ΄λ€.
λλ€μ μν° λλ²κΉ κΈ°λ²μ FS:[0x30] μ μ κ·Όν΄ μλμ° API λ₯Ό μ΄μ©νκ±°λ,
λλ²κΉ νλ©΄ κ·Έλ₯ μ€ννμ λλ³΄λ€ μ€ν μκ°μ΄ κΈΈμ΄μ§μ μ΄μ©νμ¬ μκ°μ κ²μ¬νλ κΈ°λ²μ μμ£Ό μ¬μ©νλ€.
------------------- λͺ©μ°¨ -------------------
1. Windows API
1.1 IsDebuggerPresent
1.2 CheckRemoteDebuggerPresent1.3 NTQueryInformationProcess
1.4 OutputDebugString
1.5 FindWindow
2. structure (ꡬ쑰체) λ₯Ό μλμΌλ‘ κ²μ¬
2.1 BeingDebugged νλκ·Έ
3. λλ²κ±°λ‘ μ€νν λ νλ‘μΈμ€μ λ―ΈμΉλ λ³νλ₯Ό κ°μ§
3.1 INT
3.2 Checksums
3.3 μκ° μ²΄ν¬
4. TLS Callback
--------------------------------------------
1. Windows API
1.1 IsDebuggerPresent
https://docs.microsoft.com/en-us/windows/win32/api/debugapi/nf-debugapi-isdebuggerpresent
μμ μμ μμ μ΄ν΄λ³Έ, κ°μ₯ κ°λ¨ν λλ²κ±° νμ§ μλμ° API ν¨μμ΄λ€.
μ΄ ν¨μλ PEB ꡬ쑰μμ IsDebugged νλλ₯Ό μ°Ύμ λλ²κ·Έκ° λμ μ€μΈμ§ νλ¨νμ¬ λμ μ€μ΄ μλλΌλ©΄ 0μ, λμ μ€μ΄λΌλ©΄ 0μ΄ μλ κ°μ λ°ννλ€.
** PEB λ FS λ μ§μ€ν°λ₯Ό ν΅ν΄ μ κ·Ό κ°λ₯. TEB μ 0x30 μ΄ PEB λ₯Ό κ°λ¦¬ν΄
--> FS:[0x30] μ΄λΌ λμ΄μμΌλ©΄ PEB λ₯Ό κ°λ¦¬ν€λ κ²
** TEB, PEB λ?
λ보기* TEB (Therad Environment Block)
: win32 μ μλ£ κ΅¬μ‘°λ‘μ, νμ¬ μ€ν μ€μΈ μ€λ λμ λν μ 보λ₯Ό μ μ₯νκ³ μλ€.
λ€μν μλμ° DLL μ λν 컨ν μ€νΈ μ 보λ₯Ό λ΄κ³ μλ€.
μ΄ μμλ€μ΄ μ μ λͺ¨λμμ ꡬλλλ―λ‘ μ μ λͺ¨λμμ μ°κΈ°κ° κ°λ₯ν κ΅¬μ‘°μ²΄κ° νμνλ€.
κ·Έλμ μ΄ κ΅¬μ‘°μ²΄λ 컀λ λͺ¨λμμλ§ μ°κΈ°κ° κ°λ₯ν μμ€ν μ£Όμ 곡κ°μ΄ μλ νλ‘μΈμ€ μ£Όμ 곡κ°μ μμΉνλ€.
* PEB (Process Environment Block)
: μλμ° NT μμμ λ°μ΄ν° ꡬ쑰체.
μ΄μ체μ λ΄λΆμμ μ¬μ©νλ ꡬ쑰체λ‘, μ΄λ―Έμ§ λ‘λ, ν κ΄λ¦¬μ, μλμ° μμ€ν DLL λ± μ μ λͺ¨λ μμμ μ κ·Όν νμκ° μλ μ 보λ₯Ό κ°μ§κ³ μλ€.
(NT ZW ?? -> https://blog.naver.com/stgavriel/80044878343)
+ FS λ μ§μ€ν°
: 컀λ λͺ¨λμμλ KPCR(Kernel's Processor Control Region) ꡬ쑰체λ₯Ό,
μ μ λͺ¨λμμλ TEB ꡬ쑰체λ₯Ό κ°λ¦¬ν€κ³ μλ€.
λ°λΌμ
FS:[0] μ TEB μ μμ μμΉ,
FS:[0x30] μ PEB μ μμ μμΉλ₯Ό μλ―Έ
μ€μ λ‘ ν¨μ μ€νμ λ€μ΄κ°λ³΄λ©΄ FS:[30] μΌλ‘ PEB ꡬ쑰체μμ +2 λ₯Ό νμ¬ BeingDebugged λ₯Ό νμΈνλ κ²μ λ³Ό μ μλ€.
1.2 CheckRemoteDebuggerPresent
https://docs.microsoft.com/en-us/windows/win32/api/debugapi/nf-debugapi-checkremotedebuggerpresent
PEB ꡬ쑰μ IsDebugged νλλ₯Ό νμΈνλ©° IsDebuggerPresent μ κ±°μ λμΌν κΈ°λ₯μ νλ€.
λ€λ§ μμ μ΄λ λ‘컬 μ»΄ν¨ν°μ νλ‘μΈμ€μ λν΄μλ§ κ²μ¬ν μ μλ€.
νλΌλ―Έν°λ‘ νλ‘μΈμ€ ν¨λ€μ λ°μ νλ‘μΈμ€κ° λλ²κ±° νκ²½μμ μ€ν μ€μΈμ§λ₯Ό νλ¨νλ€.
Use the IsDebuggerPresent function to detect whether the calling process is running under the debugger.
1.3 NTQueryInformationProcess
https://docs.microsoft.com/en-us/windows/win32/api/winternl/nf-winternl-ntqueryinformationprocess
첫 λ²μ¨° νλΌλ―Έν°λ‘ νλ‘μΈμ€ ν¨λ€μ, λ λ²μ§Έ νλΌλ―Έν°λ‘ μ»κ³ μ νλ νλ‘μΈμ€ μ 보μ νμ μ μꡬνλ€.
λ λ²μ§Έ νλΌλ―Έν°μΈ ProcessInformationClass μ ProcessDebugPort(0x7) μ μ€λ€λ©΄ ν΄λΉ νλ‘μΈμ€κ° λλ²κΉ μ€μΈμ§μ λν μ¬λΆλ₯Ό λ°ννλ€.
λλ²κΉ μ€μ΄λΌλ©΄ 0, μλλ©΄ λλ²κ±° ν¬νΈ λ²νΈλ₯Ό λ°ννλ€.
(NT ZW ?? -> https://blog.naver.com/stgavriel/80044878343)
1.4 OutputDebugString
https://docs.microsoft.com/en-us/windows/win32/api/debugapi/nf-debugapi-outputdebugstringw
λλ²κ±°μ μΆλ ₯ν λ¬Έμμ΄μ μ λ¬νλ λ° μ¬μ©λλ ν¨μμ΄λ―λ‘ λλ²κ±°μ μ‘΄μ¬λ₯Ό νμ§νλ λ° μ¬μ©ν μ μλ€.
μ΄ ν¨μλ₯Ό μ€ννλλ° μ€λ₯κ° λ°μνμ§ μλλ€λ©΄ λλ²κ±°λ‘ μ€νμ€μ΄λΌλ μλ―Έμ΄λ€.
1.5 FindWindow
https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-findwindowa
νΉμ νλ‘κ·Έλ¨(λλ²κ·Έ)κ° μ€νλκ³ μλμ§ κ²μν μ μλ€.
첫λ²μ§Έ νλΌλ―Έν°λ‘ κ²μν νλ‘κ·Έλ¨(λλ²κ·Έ) μ΄λ¦μ μ£Όκ³ , λ§μΌ ν΄λΉ νλ‘κ·Έλ¨μ΄ μ€ν μ€μ΄λΌλ©΄ κ·Έ ν¨λ€μ, μ€ννκ³ μμ§ μλ€λ©΄ NULL κ°μ λ°ννλ€.
ex. FindWindow("OllyDbg", NULL)
2. Structure (ꡬ쑰체) λ₯Ό μλμΌλ‘ κ²μ¬
PEB ꡬ쑰체μμ λλ²κ±°κ° μ‘΄μ¬νλμ§μ λν μ 보λ₯Ό μ 곡νλ€.
μ΄μ 체μ λ μ€ν μ€μΈ κ° νλ‘μΈμ€μ λν΄ μλμ° PEB ꡬ쑰체λ₯Ό κ΄λ¦¬νλ€.
νκ²½ λ³μ κ°, λ‘λλ λͺ¨λ λͺ©λ‘, λ©λͺ¨λ¦¬ μ£Όμ, λλ²κ±° μν λ±μ νλ‘μΈμ€ νκ²½ λ°μ΄ν°λ₯Ό ν¬ν¨νλ€.
νλ‘μΈμ€ μ€ν μ€μ FS:[0x30] μΌλ‘ PEB λ₯Ό μ κ·Όν μ μλ€.
https://docs.microsoft.com/en-us/windows/win32/api/winternl/ns-winternl-peb
2.1 BeingDebugged νλκ·Έ
μ΄ νλκ·Έλ PEB ꡬ쑰체μ μ€νμ 2μ μλ€. (0x2) (ν₯ν μλμ° λ²μ μ λ°λΌ λ³κ²½ κ°λ₯)
μ΄ νλκ·Έ κ°μ΄ 0 μ΄λ©΄ λλ²κ±°κ° λμνκ³ μμ§ μλ€λ κ²μ΄κ³ , 1 μ΄λ©΄ λλ²κ±°κ° λμνκ³ μλ€λ λ»μ΄λ€.
κ·Έλ¦¬κ³ λ€λ₯Έ νλκ·Έλ€μ΄ μ‘΄μ¬νμ§λ§, ν₯ν μλμ° λ²μ μ μν΄ κ΅¬μ‘°κ° λ¬λΌμ§ μ μμΌλ―λ‘ ν΄λΉ λ¬Έμλ₯Ό μ°Έμ‘°νκΈΈ λ°λλ€.
3. λλ²κ±°λ‘ μ€νν λ νλ‘μΈμ€μ λ―ΈμΉλ λ³νλ₯Ό κ°μ§
3.1 INT 3
INT 3 λ μννΈμ¨μ΄ BP λ₯Ό μ€μ νλ κΈ°λ³Έ λ©μ»€λμ¦μ΄λ€.
INT 3 μ OPCODE λ 0xCC λ‘, μ΄ OPCODE λ₯Ό κ²μνμ¬ λ³Έλμ μ½λκ° INT 3 λ‘ λ³κ²½λμλμ§ νλ‘μΈμ€λ₯Ό μ€μΊνλ€.
0xCC κ° λ°κ²¬λλ©΄ λλ²κ±°κ° μ‘΄μ¬νλ€λ λ»μ΄λ€.
νΉμ μ½λμ INT 3 κ΅¬λ¬Έμ΄ μμ λ, λλ²κ±°λ‘ μ€ννλ©΄ μ€λ₯κ° λμ§ μμ§λ§ κ·Έλ₯ μ€ννλ©΄ ν΄λΉ ꡬ문μ μ€λ₯λ₯Ό λ±λλ€. μ€λ₯λ₯Ό λ±λμ§μ λν μ¬λΆλ‘λ λλ²κ·Έμ μ‘΄μ¬ μ¬λΆλ₯Ό νμ ν μ μλ€.
μ΄λ₯Ό μ°ννκΈ° μν΄μλ μννΈμ¨μ΄ BP λμ νλμ¨μ΄ BP λ₯Ό μ€μ νλ©΄ λλ€.
3.2 Checksums
νΉμ μ½λ μμμ CheckSum κ°μ ꡬνκ³ , μλ³Έ CheckSum κ³Ό λΉκ΅νμ¬ BP μ€μ νΉμ κ°μ’ μ½λ ν¨μΉ μ¬λΆλ₯Ό κ²μ¬ν μ μλ€.
κ·Έ μ€ Hash Checking κΈ°λ²μ ν¨μ μ½λλ€μ Hash κ°μ 미리 κ΅¬ν΄ λ λ€μ, κ·Έ κ°κ³Ό μ€ν μ€κ°μ νΈκ°μΈν Hash κ°μ΄ κ°μμ§ νμΈνμ¬ ν¨μΉ μ¬λΆλ₯Ό νμ§νλ κ²μ΄λ€.
3.3 μκ° μ²΄ν¬
λλ²κ±°λ‘ νλ‘μΈμ€λ₯Ό μ€ννλ©΄ κ·Έλ₯ νλ‘μΈμ€λ₯Ό μ€ννμ λλ³΄λ€ μλκ° νμ ν λλ €μ§λ€.
μ΄λ° μκ° μ°¨μ΄λ₯Ό νμ§νλ λͺ κ°μ§ κΈ°μ μ΄ μ‘΄μ¬νλ€.
3.3.1 νμ μ€ν¬ν
νΉμ λμ μν μ νμ νμ μ€ν¬νλ₯Ό κΈ°λ‘νκ³ λΉκ΅νλ€.
νΉμ μμΈ λ°μ μ νμ νμ μ€ν¬νλ₯Ό κ°μ Έμμ λΉκ΅νλ€. λλ²κ±°κ° μμΈλ₯Ό μ²λ¦¬νλ κ²½μ° μλΉν μ§μ°μ΄ λ°μνκΈ° λλ¬Έμ ꡬλΆν μ μλ€. (μμΈλ₯Ό 무μνκ±°λ μ§λμΉκ² νλ κΈ°λ₯μ μ 곡νλ λλ²κ±°λ€λ μμ§λ§, κ·ΈλΌμλ μ°¨μ΄κ° λ°μνλ€.)
3.3.2 rdtsc (OPCODE 0x0F31)
κ°μ₯ μΌλ°μ μΈ μκ° κ²μ¬ λ°©λ²μ΄λ€.
κ°μ₯ μ΅κ·Όμ μμ€ν μ΄ λ¦¬λΆν ν μ΄ν νλ₯Έ μκ° κ°μ μ μ₯ν 64λΉνΈλ₯Ό λ°ννλ€.
μ΄ λͺ λ Ήμ΄λ₯Ό μ€νν ν λ κ°μ μ°¨κ° νΉμ ν μ λλ₯Ό λμΌλ©΄ λλ²κ±°κ° μ€ν μ€μμΌλ‘ νλ¨ν μ μλ€.
3.3.3 QueryPerformanceCounter & GetTickCount
https://docs.microsoft.com/en-us/windows/win32/api/profileapi/nf-profileapi-queryperformancecounter
https://docs.microsoft.com/en-us/windows/win32/api/sysinfoapi/nf-sysinfoapi-gettickcount
rdtsc μ κ°μ΄ μκ°μ°¨λ₯Ό λΆμν μ μλ μλμ° API ν¨μμ΄λ€.
4. TLS Callback
μΌλ°μ μΌλ‘ λλ€μ λλ²κ±°λ PE ν€λμμ μ μν νλ‘κ·Έλ¨ μ§μ μ μμ μμνλ€.
κ·Έλ°λ° TLS(Thread Local Storage) Callback μ μ§μ μ μ μ μ€νλλ μ½λλ‘, λλ²κ±° λͺ°λ μ€νν μ μλ€.
μ¦, TLS Callback μ μ μ± μ½λ κΈ°λ₯μ μ½μ νλ€λ©΄ λλ²κ±°λ‘λ κ°μ§νμ§ λͺ»νλ€.
μΌλ°μ μΈ νλ‘κ·Έλ¨μ .tls μΉμ μ μ¬μ©νμ§ μκΈ° λλ¬Έμ .tls μΉμ μ΄ μλ κ²½μ° κ°μ₯ λ¨Όμ μν° λλ²κΉ μ μμ¬ν΄μΌ νλ€.
κ΄λ ¨ λ΄μ©μ λ μκ³ μΆλ€λ©΄ - https://flack3r.tistory.com/entry/TLS-%EC%BD%9C%EB%B0%B1-%EC%95%88%ED%8B%B0%EB%94%94%EB%B2%84%EA%B9%85
μ°Έκ³ μ¬μ΄νΈλ€
https://blog.naver.com/sol9501/70128619541
https://kali-km.tistory.com/entry/Anti-Debugging?category=490391
'SECURITY > REVERSING' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
μν° λ¦¬λ²μ± :: 06 - μ½λ λλ ν, ν¨νΉ (0) 2020.08.05 μν° λ¦¬λ²μ± :: 05 - μν° λμ€μ΄μ λΈ (0) 2020.08.05 μν° λ¦¬λ²μ± :: 03 - μν° λλ²κΉ μμ (0) 2020.08.04 μν° λ¦¬λ²μ± :: 02 - μν° λλ²κΉ (0) 2020.08.04 μν° λ¦¬λ²μ± :: 01 - μν° λ¦¬λ²μ±μ΄λ? (2) 2020.08.04