๋ชฉ๋ก์ ์ฒด ๊ธ (1103)
KoreanFoodie's Study

'๋ฆฌ๋ฒ์ฑ ํต์ฌ ์๋ฆฌ'์ ๋ด์ฉ ๋ฐ ์ด์๋ค๊ณผ ํด๊ฒฐ์ฑ ์ ๋ค๋ฃน๋๋ค. ์คํ ์์ถ๋๊ฑฐ๋ ์ํธํ๋ ํ์ผ์ ํจ์นํ ๋ ์์ฃผ ์ฌ์ฉ๋๋ ์ธ๋ผ์ธ ํจ์น(Inline Patch) ๊ธฐ๋ฒ์ ์ค์ตํด ๋ณด์. ์ธ๋ผ์ธ ํจ์น ์ธ๋ผ์ธ ์ฝ๋ ํจ์น(Inline Code Patch) ํน์ ์ค์ฌ์ ์ธ๋ผ์ธ ํจ์น(Inline Patch)๋ผ๊ณ ํ๋ ๊ธฐ๋ฒ์ ์ํ๋ ์ฝ๋๋ฅผ ์ง์ ์์ ํ๊ธฐ ์ด๋ ค์ธ ๋ ๊ฐ๋จํ ์ฝ๋ ์ผ์ด๋ธ(Code Cave)๋ผ๊ณ ํ๋ ํจ์น ์ฝ๋๋ฅผ ์ฝ์ ํ ํ ์คํํด ํ๋ก๊ทธ๋จ์ ํจ์น์ํค๋ ๊ธฐ๋ฒ์ด๋ค. ์ฃผ๋ก ๋์ ํ๋ก๊ทธ๋จ์ด ์คํ ์์ถ(ํน์ ์ํธํ)๋์ด ์์ด์ ํ์ผ์ ์ง์ ์์ ํ๊ธฐ ์ด๋ ค์ด ๊ฒฝ์ฐ ๋ง์ด ์ฌ์ฉํ๋ ๊ธฐ๋ฒ์ด๋ค. ์ ๊ทธ๋ฆผ์ฒ๋ผ ์ ํ์ ์ธ ์คํ ์์ถ(๋๋ ์ํธํ) ์ฝ๋๊ฐ ์๋ค๊ณ ํด ๋ณด์. EP(Entry Point)์ฝ๋๋ ์ํธํ๋ OEP(Original ..

'๋ฆฌ๋ฒ์ฑ ํต์ฌ ์๋ฆฌ'์ ๋ด์ฉ ๋ฐ ์ด์๋ค๊ณผ ํด๊ฒฐ์ฑ ์ ๋ค๋ฃน๋๋ค. UPack ํจ์ปค๋ฅผ ์ด์ฉํ์ฌ ์์ถํ notepad.exe ํ์ผ์ EP(Entry Point)๋ฅผ ์ฐพ์ ๋๋ฒ๊น ํด๋ณด์. OllyDbg ๋๋ฒ๊น ์๋ฌ Stud_PE๋ฅผ ์ด์ฉํ์ฌ EP์ VA๋ฅผ ์์๋ผ ์ ์๋ค. RVA ๊ฐ์ด 1018์ด๊ณ ImageBase๊ฐ 01000000์ด๋ฏ๋ก, 01001018์ด ์ค์ EP์ ์ฃผ์๊ฐ์ด๋ผ๋ ๊ฒ์ ์ ์ ์๋ค. ์ด์ OllyDbg๋ฅผ ์คํํ์ฌ 01001018 ์ฃผ์๋ฅผ EP๋ก ์ค์ ํ๋ฉด ๋๋ค! ๋์ฝ๋ฉ ๋ฃจํ EP๋ถํฐ ์ฐจ๊ทผ์ฐจ๊ทผ ๋์ฝ๋ฉ์ ํด ๋ณด์. ์ฒ์ ๋ ๋ช ๋ น์ 010011B0 ์ฃผ์์์ 4 ๋ฐ์ดํธ๋ฅผ ์ฝ์ด EAX์ ์ ์ฅํ๋ ๋ช ๋ น์ด๋ค. EAX๋ 0100739D ๊ฐ์ ๊ฐ์ง๋๋ฐ, ์ด๋ ์๋ณธ notepad์ OEP(Original Entry Poi..

'๋ฆฌ๋ฒ์ฑ ํต์ฌ ์๋ฆฌ'์ ๋ด์ฉ ๋ฐ ์ด์๋ค๊ณผ ํด๊ฒฐ์ฑ ์ ๋ค๋ฃน๋๋ค. UPack ํจ์ปค๋ฅผ ์ด์ฉํ notepad.exe์ PE ํค๋ ๊ตฌ์กฐ๋ฅผ ํํค์ณ ๋ณด์. ์ค๋น๋ฌผ UPack Stud_PE notepad.exe (32bit ver.) UPack์ PE ํค๋ ๋ถ์ ํค๋ ๊ฒน์ณ์ฐ๊ธฐ ์ด๋ ๋ค๋ฅธ ํจ์ปค์์๋ ๋ง์ด ์ฐ์ด๋ ๊ธฐ๋ฒ์ด๋ค. ์ด๋ MZ ํค๋(IMAGE_DOS_HEADER)์ PE ํค๋(IMAGE_NT_HEADERS)๋ฅผ ๊ต๋ฌํ๊ฒ ๊ฒน์ณ์ฐ๋ ๊ฒ์ด๋ค. ํค๋๋ฅผ ๊ฒน์ณ์์ผ๋ก ํด์ ํค๋ ๊ณต๊ฐ์ ์ ์ฝํ ์ ์๋ค. ๋ถ๊ฐ์ ์ผ๋ก ๋ณต์ก์ฑ์ ์ฆ๊ฐ์์ผ ๋ถ์์ ์ด๋ ต๊ฒ ๋ง๋๋ ํจ๊ณผ๋ ์๋ค. Stud_PE๋ฅผ ์ด์ฉํด์ MZ ํค๋๋ฅผ ์ดํด๋ณด์. ('Headers' ํญ์ [Basic HEADERS tree view in hexeditor] ๋ฒํผ) MZ ํค๋(IMA..

'๋ฆฌ๋ฒ์ฑ ํต์ฌ ์๋ฆฌ'์ ๋ด์ฉ ๋ฐ ์ด์๋ค๊ณผ ํด๊ฒฐ์ฑ ์ ๋ค๋ฃน๋๋ค. PE ํ์ผ์์ .reloc ์น์ ์ ์๋์ผ๋ก ์ ๊ฑฐํ๋ ์ค์ต์ ํด ๋ณด์. .reloc ์น์ EXE ํ์์ PE ํ์ผ์์ Base Reloaction Table ํญ๋ชฉ์ ์คํ์ ํฐ ์ํฅ์ ๋ผ์น์ง ์๋๋ค(DLL, SYS ํ์์ ํ์ผ์ ๊ฑฐ์ ํ์!). VC++ ์์ ์์ฑ๋ PE ํ์ผ์ Relocation ์น์ ์ด๋ฆ์ '.reloc'์ด๋ค. .reloc ์น์ ์ด ์ ๊ฑฐ๋๋ฉด PE ํ์ผ์ ํฌ๊ธฐ๊ฐ ์ฝ๊ฐ ์ค์ด๋๋ ํจ๊ณผ๊ฐ ์๋ค. ์ด๋, .reloc ์น์ ์ ๋ณดํต ๋ง์ง๋ง์ ์์นํ๋ค. reloc.exe '.reloc' ์น์ ์ ๊ฑฐ๋ ์๋์ 4 ๋จ๊ณ์ ์์ ์ ํตํด ์ด๋ฃจ์ด์ง๋ค. .reloc ์น์ ํค๋ ์ ๋ฆฌ .reloc ์น์ ์ ๊ฑฐ IMAGE_FILE_HEADER ์์ IMAGE_OP..

'๋ฆฌ๋ฒ์ฑ ํต์ฌ ์๋ฆฌ'์ ๋ด์ฉ ๋ฐ ์ด์๋ค๊ณผ ํด๊ฒฐ์ฑ ์ ๋ค๋ฃน๋๋ค. PE ํ์ผ์ ์ฌ๋ฐฐ์น(Relocation)๊ณผ์ ์ ์ฌ์ฉ๋๋ Base Relocation Table์ ๊ตฌ์กฐ์ ๋์ ์๋ฆฌ์ ๋ํด์ ์์๋ณด์. PE ์ฌ๋ฐฐ์น PE ํ์ผ(EXE/DLL/SYS)์ด ํ๋ก์ธ์ค ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ฉ๋ ๋ PEํค๋์ ImageBase ์ฃผ์์ ๋ก๋ฉ๋๋ค. DLL(SYS)ํ์ผ์ ๊ฒฝ์ฐ ImageBase ์์น์ ์ด๋ฏธ ๋ค๋ฅธ DLL(SYS) ํ์ผ์ด ๋ก๋ฉ๋์ด ์๋ค๋ฉด ๋ค๋ฅธ ๋น์ด ์๋ ์ฃผ์ ๊ณต๊ฐ์ ๋ก๋ฉ๋๋ค. ์ด๊ฒ์ PE ํ์ผ ์ฌ๋ฐฐ์น๋ผ๊ณ ํ๋ค. ์ฆ PE ์ฌ๋ฐฐ์น๋ PE ํ์ผ์ด ImageBase์ ๋ก๋ฉ๋์ง ๋ชปํ๊ณ ๋ค๋ฅธ ์ฃผ์์ ๋ก๋ฉ๋ ๋ ์ํ๋๋ ์ผ๋ จ์ ์์ ๋ค์ ์๋ฏธํ๋ค. SDK(Software Development Kit) ๋๋ Visual C++๋ก PE ํ..

'๋ฆฌ๋ฒ์ฑ ํต์ฌ ์๋ฆฌ'์ ๋ด์ฉ ๋ฐ ์ด์๋ค๊ณผ ํด๊ฒฐ์ฑ ์ ๋ค๋ฃน๋๋ค. ํด๋น ์ฑํฐ๋ UPX๋ฅผ ์ด์ฉํด notepad.exe๋ฅผ ์์ถํ ํ, ์๋ณธ EP (OEP; Original Entry Point)๋ฅผ ์ฐพ๋ ๊ฒ์ด ํต์ฌ์ด๋ค. ๊ผญ ๋ค์ ์ค์ต ํด๋ณผ ๊ฒ! UPX ํจ์ปค์ ํน์ง ๋ช ๊ฐ์ง๋ฅผ ์์๋ณด์. UPX ํจ์ปค๋ PUSHAD ๋ช ๋ น์ผ๋ก EAX ~ EDI ๋ ์ง์คํฐ ๊ฐ์ ์คํ์ ์ ์ฅํ๊ณ , ESI์ EDI ๋ ์ง์คํฐ๋ฅผ ๊ฐ๊ฐ ๋ ๋ฒ์งธ ์น์ ์์ ์ฃผ์(010110000)์ ์ฒซ ๋ฒ์งธ ์น์ ์์ ์ฃผ์(01001000)๋ก ์ธํ ํ๋ค. ๋๋ฒ๊น ํ ๋ ์ด์ฒ๋ผ ESI์ EDI๊ฐ ๋์์ ์ธํ ๋๋ฉด ESI๊ฐ ๊ฐ๋ฆฌํค๋ ๋ฒํผ์์ EDI๊ฐ ๊ฐ๋ฆฌํค๋ ๋ฒํผ๋ก ๋ฉ๋ชจ๋ฆฌ ๋ณต์ฌ๊ฐ ์ผ์ด๋ ๊ฑฐ๋ผ๊ณ ์์ธกํ ์ ์๋ค. ํธ๋ ์ด์ค(Trace)๋ ์ฝ๋๋ฅผ ํ๋ํ๋ ์คํํ๋ฉด์ ์ซ์๊ฐ๋ ๊ฒ์ ..

'๋ฆฌ๋ฒ์ฑ ํต์ฌ ์๋ฆฌ'์ ๋ด์ฉ ๋ฐ ์ด์๋ค๊ณผ ํด๊ฒฐ์ฑ ์ ๋ค๋ฃน๋๋ค. ์คํ ์์ถ์ด๋ ๋ง ๊ทธ๋๋ก ์คํ(PE: Portable Executable)ํ์ผ์ ๋์์ผ๋ก ํ์ผ ๋ด๋ถ์ ์์ถํด์ ์ฝ๋๋ฅผ ํฌํจํ๊ณ ์์ด์ ์คํ๋๋ ์๊ฐ์ ๋ฉ๋ชจ๋ฆฌ์์ ์์ถ์ ํด์ ์ํจ ์ ์คํ์ํค๋ ๊ธฐ์ ์ด๋ค. ์คํ ์์ถ๋ ํ์ผ ์ญ์ PE ํ์ผ์ด๋ฉฐ, ๋ด๋ถ์ ์๋ณธ PE ํ์ผ๊ณผ decoding ๋ฃจํด์ด ์กด์ฌํ๋ค. EP(Entry Point) ์ฝ๋์ decoding ๋ฃจํด์ด ์คํ๋๋ฉด์ ๋ฉ๋ชจ๋ฆฌ์์ ์์ถ์ ํด์ ์ํจ ํ ์คํ๋๋ค. ์ผ๋ฐ์ ์ธ ZIP ์์ถ๊ณผ ์คํ ์์ถ์ ์ฐจ์ด ํญ๋ชฉ | ์ผ๋ฐ ์์ถ | ์คํ ์์ถ |:-----|:--------|:------| ๋์ ํ์ผ | ๋ชจ๋ ํ์ผ | PE ํ์ผ(exe, dll, sys) ์์ถ ๊ฒฐ๊ณผ๋ฌผ | ์์ถ(zip, rar) ํ์ผ | P..

'๋ฆฌ๋ฒ์ฑ ํต์ฌ ์๋ฆฌ'์ ๋ด์ฉ ๋ฐ ์ด์๋ค๊ณผ ํด๊ฒฐ์ฑ ์ ๋ค๋ฃน๋๋ค. PE(Portable Executable) ํ์ผ์ Windows ์ด์์ฒด์ ์์ ์ฌ์ฉ๋๋ ์คํ ํ์ผ ํ์์ด๋ค. ๊ธฐ์กด UNIX์์ ์ฌ์ฉ๋๋ COFF(Common Object File Format)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก Microsoft์์ ๋ง๋ค์๋ค. ์ ์ด์๋ ๋ค๋ฅธ ์ด์์ฒด์ ์ ์ด์์ฑ์ ์ข๊ฒ ํ๋ ค๊ณ ๋ง๋ค์์ผ๋ ํ์ฌ๋ Windows ๊ณ์ด์ OS์์๋ง ์ฌ์ฉ๋๊ณ ์๋ค. PE File Format ๋ณธ๊ฒฉ์ ์ผ๋ก PE ํ์ผ์ ์ข ๋ฅ๋ฅผ ์์๋ณด์. ์ข ๋ฅ | ์ฃผ์ ํ์ฅ์ |:-----|:------| ์คํ ๊ณ์ด | EXE, SCR ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ณ์ด | DLL, OCX, CPL, DRV ๋๋ผ์ด๋ฒ ๊ณ์ด | SYS, VXD ์ค๋ธ์ ํธ ํ์ผ ๊ณ์ด | OBJ ์๋ฐํ ์๊ธฐํ๋ฉด OBJ(์ค๋ธ์ ํธ) ํ..

'๋ฆฌ๋ฒ์ฑ ํต์ฌ ์๋ฆฌ'์ ๋ด์ฉ ๋ฐ ์ด์๋ค๊ณผ ํด๊ฒฐ์ฑ ์ ๋ค๋ฃน๋๋ค. ํจ์ ํธ์ถ ๊ท์ฝ ์ฑํฐ 10์ ํจ์ ํธ์ถ ๊ท์ฝ(Calling Convention)์ ๋ํด ๋ค๋ฃฌ๋ค. ์ด๋ 'ํจ์๋ฅผ ํธ์ถํ ๋ ํ๋ผ๋ฏธํฐ๋ฅผ ์ด๋ค ์์ผ๋ก ์ ๋ฌํ๋์ง'์ ๋ํ ์ผ์ข ์ ์ฝ์์ด๋ค. ํจ์ ํธ์ถ ๊ท์ฝ์ cdecl, stdcall, fastcall์ผ๋ก ํฌ๊ฒ 3 ๊ฐ์ง๋ก ๋๋๋ค. ๊ฐ๋จํ ์ฉ์ด ์ค๋ช Caller(ํธ์ถ์) - ํจ์๋ฅผ ํธ์ถํ ์ชฝ Callee(ํผํธ์ถ์) - ํธ์ถ์ ๋นํ ํจ์ cdecl ๋ฐฉ์ cdecl๋ฐฉ์์ ์ฃผ๋ก C ์ธ์ด์์ ์ฌ์ฉ๋๋ ๋ฐฉ์์ด๋ฉฐ, Caller์์ ์คํ์ ์ ๋ฆฌํ๋ ํน์ง์ ๊ฐ์ง๊ณ ์๋ค. #include "studio.h" int add(int a, int b) { return (a + b); } int main (int argc, c..

'๋ฆฌ๋ฒ์ฑ ํต์ฌ ์๋ฆฌ'์ ๋ด์ฉ ๋ฐ ์ด์๋ค๊ณผ ํด๊ฒฐ์ฑ ์ ๋ค๋ฃน๋๋ค. ์ฑํฐ 8์ ๋ ๋ฒ์งธ crackme๋ฅผ ๋ค๋ฃฌ๋ค. (abex' 2nd crackme) VB ํ์ผ์ MSVBVM60.dll(Microsoft Visual Basic Virtual Machine 6.0) ์ด๋ผ๋ VB ์ ์ฉ ์์ง์ ์ฌ์ฉํ๋ค. (The Thunder Runtime Engine ์ด๋ผ๋ ์ด๋ฆ์ผ๋ก๋ ๋ถ๋ฆฌ๊ณ ์์) VB ์์ง์ ์ฌ์ฉ ์๋ฅผ ๋ณด์. ๋ฉ์์ง ๋ฐ์ค๋ฅผ ์ถ๋ ฅํ๊ณ ์ถ์ ๋, VB ์์ค์ฝ๋์์ MsgBox() ํจ์๋ฅผ ์ฌ์ฉํ๋ค. VB ์ปดํ์ผ๋ฌ๋ ์ค์ ๋ก MSVBVM60.dll!rtc MsgBox() ํจ์๊ฐ ํธ์ถ๋๋๋ก ๋ง๋ค๊ณ , ์ด ํจ์ ๋ด๋ถ์์ Win32 API์ธ user32.dll!MessageBox() ํจ์๋ฅผ ํธ์ถํด์ฃผ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค. (VB ..