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 ๋ฉค๋ฒ๊ฐ ์์ผ๋ฏ๋ก ์ด ์คํ์
์ ์ ๊ทผํด ๊ฐ๋ง ์ ๋ฐ์์จ๋ค๋ฉด ์ด๋ ต์ง ์๊ฒ ํจ์๋ฅผ ๊ตฌํํ ์ ์๋ค.
'reverse engineering' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[PE ํ๋กํ ํฐ ์ ์] PE ํ์ฑํ๊ธฐ (0) | 2023.12.17 |
---|---|
[Anti-Reversing] Anti Disassembly ๊ตฌํ (0) | 2022.08.15 |
[๋ฆฌ๋ฒ์ฑ ํต์ฌ์๋ฆฌ] DLL injection ์์ ์ฝ๋ ํด์ค (0) | 2021.07.11 |
[RCE] PE file format (1) (0) | 2021.05.02 |
Bank Robbery ๋ฌธ์ ํ์ด ๋ณด๊ณ ์ (2) | 2021.01.23 |