Hack The Planet

๋ฐ˜๊ฐ‘์Šต๋‹ˆ๋‹ค, cyalume์˜ ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.

reverse engineering

[Anti-Reversing] IsDebuggerPresent() ๊ตฌํ˜„

cyalume 2022. 8. 9. 00:22

Visual studio์˜ inline assembly๋ฅผ ์‚ฌ์šฉํ•ด ๊ตฌํ˜„.

bool isDebuggerPresent(){
    bool returnValue = false;
    
    __asm{
    	push eax
        mov eax, fs:[0x30] //eax = &PEB
        mov eax, [eax+0x02] //eax = *(&(eax+0x02))
        mov dword ptr [returnValue], eax
        pop eax
    }
    
    return returnValue;
}

IsDebuggerPresent() ํ•จ์ˆ˜์˜ ์ž‘๋™ ์›๋ฆฌ๋Š” ๊ฐ„๋‹จํ•˜๋‹ค.
ํ•ด๋‹น ํ•จ์ˆ˜๋Š” PEB ๊ตฌ์กฐ์ฒด์˜ ๋‘ ๋ฒˆ์งธ ๋ฉค๋ฒ„์ธ BeingDebugged ๊ฐ’์„ ์ฝ์–ด์˜ค๊ณ , ์ด ๊ฐ’์œผ๋กœ ๋””๋ฒ„๊น… ์—ฌ๋ถ€๋ฅผ ์•Œ ์ˆ˜๊ฐ€ ์žˆ๋‹ค.
BeingDebugged != 0 ์ด๋ผ๋ฉด ๋””๋ฒ„๊น… ์ค‘, BeingDebugged == 0 ์ด๋ผ๋ฉด ๋””๋ฒ„๊น… ์ค‘์ด ์•„๋‹Œ ๊ฒƒ์ด๋‹ค.

๋ฌดํŠผ, ์œ ์ €๋ชจ๋“œ์—์„œ fs ์„ธ๊ทธ๋จผํŠธ ๋ ˆ์ง€์Šคํ„ฐ๋Š” TEB(Thread Environment Block)์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค. (Thread Information Block์ธ TIB์™€ ์œ ์‚ฌํ•œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ์ง€๋งŒ, TIB๋Š” Windows 9x์„ธ๋Œ€ ์ดํ•˜์—์„œ ์“ฐ์˜€๋‹ค๊ณ  ํ•จ, TIB for non-Windows NT version.) ๊ทธ๋ฆฌ๊ณ  TEB์˜ 0x30 ์˜คํ”„์…‹์—๋Š” PEB(Process Environment Block)์˜ ์„ ํ˜• ์ฃผ์†Œ๊ฐ€ ๋“ค์–ด์žˆ๋‹ค. fs:[0x30]์œผ๋กœ PEB์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ทธ๋กœ๋ถ€ํ„ฐ 0x02๋งŒํผ ๋–จ์–ด์ง„ ๊ณณ์— BeingDebugged ๋ฉค๋ฒ„๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์ด ์˜คํ”„์…‹์— ์ ‘๊ทผํ•ด ๊ฐ’๋งŒ ์ž˜ ๋ฐ›์•„์˜จ๋‹ค๋ฉด ์–ด๋ ต์ง€ ์•Š๊ฒŒ ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.