ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • μ•ˆν‹° 리버싱 :: 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 기법이 졜초둜 κ΅¬ν˜„λœ 패컀)

     

    http://www.aspack.com/

     

    2.3 Themida

     

    - κ°€μž₯ κ°•λ ₯ν•œ 패컀 쀑 ν•˜λ‚˜ (μ–ΈνŒ¨ν‚Ήν•  수 μžˆλŠ” μžκ°€ 많이 μ—†λ‹€κ³ ..)

    - anti-debugging, anti-dumping, anti-VM λ“± λ‹€μ–‘ν•œ κΈ°λŠ₯ 지원 및 직접 μ»€μŠ€ν…€ κ°€λŠ₯

    - ν˜„μž¬ μΉ΄μΉ΄μ˜€ν†‘, 은행 λ“±μ˜ ν”„λ‘œκ·Έλž¨μ—μ„œ 많이 μ‚¬μš© 쀑

    (μ‹€μ œλ‘œ 디버거 μ“°λ©΄μ„œ μΉ΄μΉ΄μ˜€ν†‘ μ‚¬μš© λΆˆκ°€λŠ₯.. μ΄λ•Œ λœ¨λŠ” 경고문에 Themida ~ μ˜ˆμ „ κ²Œμ‹œκΈ€ μ°Έκ³ )

    2020/08/04 - [SECURITY/REVERSING] - μ•ˆν‹° 리버싱 :: 01 - μ•ˆν‹° λ¦¬λ²„μ‹±μ΄λž€?

     

     

    https://www.oreans.com/

     

    μ°Έκ³  λ¬Έν—Œ

    [1] practical malware analysis / Michael Sikorski & Andrew Honig / 2012 / Ch.18

    [2] Anti-Reversing Techniques / κΉ€ν˜•μ°¬ / 20160929

    λŒ“κΈ€

Designed by Tistory.