-
μν° λ¦¬λ²μ± :: 06 - μ½λ λλ ν, ν¨νΉSECURITY/REVERSING 2020. 8. 5. 18:11
1. μ½λ λλ ν (Code Obfuscating)
" obfuscate "
λ§ κ·Έλλ‘ μ½λλ₯Ό μ½κΈ° μ΄λ ΅κ² λ§λ€μ΄μ 리λ²μλ€μ΄ λΆμνκΈ° μ΄λ ΅κ² νλ κΈ°μ μ΄λ€.
λλ ν λμμ λ°λΌ ν¬κ²
- μμ€μ½λ λλ ν : νλ‘κ·Έλλ° μΈμ΄λ‘ μμ±λ μμ€ μ½λλ₯Ό μμ보기 νλ ννλ‘ λ°κΎΈλ κΈ°μ
- λ°μ΄λ리 λλ ν : μ»΄νμΌ νμ μμ±λ λ°μ΄λ리λ₯Ό μ곡νμ ν΅ν΄ λΆμνκΈ° νλ€κ² λ³μ‘°νλ κΈ°μ
λ‘ λλ μ μλ€.
λλ νλ₯Ό μν€λ©΄ κ²°κ³Όκ°μ΄ λμΌνκ³ λ¬Έλ²μ μλ°°λμ§λ μμ§λ§ λ³μλͺ , μμ, μΈλͺ¨μλ μ½λ λ±μ μ΄μ©νμ¬ μ½λ κ²μ μ΄λ ΅κ² λ§λλ κ²μ΄λ€.
(μνΈνμλ μ’ λ€λ₯Έ κ°λ μ΄λ€.
μνΈνλ μ½κΈ° μ΄λ €μ΄ μμ€μ΄ μλλΌ ν€κ°(DES, AES λ±) μ΄ μμ΄μΌ λ³Ό μ μλ€λ λ»..!)
1.1 Dummy Codes
: μ€μ λ‘λ μλ¬΄λ° μν μ νμ§ μμ§λ§, μ½λ μ¬μ΄μ λ£μμΌλ‘μ¨ μ½λ λλ νλ₯Ό μν€κ±°λ λμ€μ΄μ λΈλ¬μ κ°μ λΆμν΄μ΄ λͺ λ Ήμ΄(instruction)λ€μ μλͺ» ν΄μνκ² νλ μ©λλ‘ μ¬μ©λλ€.
κ°λ¨ν Dummy Codes λ€μ μμ μ½λλ₯Ό μμ±ν΄λ³΄λ©΄ λ€μκ³Ό κ°λ€.
(νλ¦ νμ μ μν΄... )
__asm { xor ebx, ebx add ebx, 2 add esi, ebx mov eax, fs:[0x30] // PEB mov ecx, 0xsecurityfact cmp ecx, 0xsecurity jne fact add esp, 0x20 call esp // never happen fact: sub ecx, eax cmp byte ptr [eax + 2], 1 // BeingDebugged vs 1 je DebuggerDetected lea ebx, [eax + ecx] push 00403116 push 0 call printf xor ecx, ecx DebuggerDetected: add ecx, 3 push 004030F1 push 0 call printf xor ecx, ecx }
μ΄ μ€μμ μ ν¨ν, λͺ©ννλ μ½λλ λ€μκ³Ό κ°λ€.
__asm {
mov eax, fs:[0x30] // PEB
jmp fact
fact:
cmp byte ptr [eax + 2], 1 // BeingDebugged vs 1
je DebuggerDetected
push 00403116
push 0
call printf
DebuggerDetected:
push 004030F1
push 0
call printf
}2. ν¨νΉ(Packing)
ν¨νΉμ ν¬κ²
- νλ‘κ·Έλ¨ μ©λμ μ€μ΄κ±°λ(shrink),
- κ²μ¬/λΆμμ μ΄λ ΅κ² νκΈ° μν
2κ°μ§ λͺ©μ μ μν΄ μ¬μ©λλ€.
λ§μ packer κ° μμ§λ§, λͺ¨λ λΉμ·ν ν¨ν΄μ κ°μ§λ€:
- μ€ν νμΌμ λ³ννμ¬ λ°μ΄ν°λ‘ μ μ₯νκ³ ,
- OS μμ νΈμΆνλ μΈν¨νΉ μ€ν (unpacking stub) μ μ 곡νλ€.
κ·Έλμ μμΆ νμΌκ³Όλ λ¬λ¦¬, λ΄λΆμ μμΆ ν΄μ μ½λλ₯Ό ν¬ν¨νμ¬ μ€ννλ μκ°μ μμμ μμΆμ΄ ν΄μ λκ³ μ€νλλ κΈ°μ μ΄λ€.
μ΄λ₯Ό μννλ κ²μ΄ ν¨μ»€(packer)μ΄κ³ , μμ©νμ€μΈ ν¨μ»€λ€μ μ’ λ₯μ νΉμ§μ λν΄ μμλ³΄κ² λ€.
2.1 UPX
- ν리μ¨μ΄ https://github.com/upx/upx
- κ°λ²Όμ°λ©΄μ λ€μν ν¬λ§· μ§μ
- ν¨μ¨μ΄ μ’μ λ§μ΄ μ°μ
2.2 ASPack / ASProtect
- μμ© νλ‘κ·Έλ¨
- x86, x64 μλμ° μ€ννμΌμ λͺ¨λ μ§μ
- μ½λ μμΆλ₯ μ κ·Έλ₯μ΄μ§λ§ μνΈνλ μ λμ΄μλ€. (Stolen Bytes κΈ°λ²μ΄ μ΅μ΄λ‘ ꡬνλ ν¨μ»€)
2.3 Themida
- κ°μ₯ κ°λ ₯ν ν¨μ»€ μ€ νλ (μΈν¨νΉν μ μλ μκ° λ§μ΄ μλ€κ³ ..)
- anti-debugging, anti-dumping, anti-VM λ± λ€μν κΈ°λ₯ μ§μ λ° μ§μ 컀μ€ν κ°λ₯
- νμ¬ μΉ΄μΉ΄μ€ν‘, μν λ±μ νλ‘κ·Έλ¨μμ λ§μ΄ μ¬μ© μ€
(μ€μ λ‘ λλ²κ±° μ°λ©΄μ μΉ΄μΉ΄μ€ν‘ μ¬μ© λΆκ°λ₯.. μ΄λ λ¨λ κ²½κ³ λ¬Έμ Themida ~ μμ κ²μκΈ μ°Έκ³ )
2020/08/04 - [SECURITY/REVERSING] - μν° λ¦¬λ²μ± :: 01 - μν° λ¦¬λ²μ±μ΄λ?
μ°Έκ³ λ¬Έν
[1] practical malware analysis / Michael Sikorski & Andrew Honig / 2012 / Ch.18
[2] Anti-Reversing Techniques / κΉνμ°¬ / 20160929
'SECURITY > REVERSING' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
κ°μ λ¨Έμ - virtualBOX μ€μΉ λ° μ€μ (0) 2020.09.03 μν° λ¦¬λ²μ± :: 05 - μν° λμ€μ΄μ λΈ (0) 2020.08.05 μν° λ¦¬λ²μ± :: 04 - μν° λλ²κΉ κΈ°λ²λ€ μκ° (0) 2020.08.05 μν° λ¦¬λ²μ± :: 03 - μν° λλ²κΉ μμ (0) 2020.08.04 μν° λ¦¬λ²μ± :: 02 - μν° λλ²κΉ (0) 2020.08.04