๋ชฉ๋ก์ ์ฒด ๊ธ (1099)
KoreanFoodie's Study
'๋ฆฌ๋ฒ์ฑ ํต์ฌ ์๋ฆฌ'์ ๋ด์ฉ ๋ฐ ์ด์๋ค๊ณผ ํด๊ฒฐ์ฑ ์ ๋ค๋ฃน๋๋ค. 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 ..
'๋ฆฌ๋ฒ์ฑ ํต์ฌ ์๋ฆฌ'์ ๋ด์ฉ ๋ฐ ์ด์๋ค๊ณผ ํด๊ฒฐ์ฑ ์ ๋ค๋ฃน๋๋ค. ์คํ ํ๋ก์ธ์ค์์ ์คํ ๋ฉ๋ชจ๋ฆฌ์ ์ญํ ์ ์๋์ ๊ฐ๋ค. A. ํจ์ ๋ด์ ๋ก์ปฌ ๋ณ์ ์์ ์ ์ฅ B. ํจ์ ํธ์ถ ์ ํ๋ผ๋ฏธํฐ ์ ๋ฌ C. ๋ณต๊ท ์ฃผ์(return address)์ ์ฅ ํ๋ก์ธ์ค์์ ์คํ ํฌ์ธํฐ(ESP)์ ์ด๊ธฐ ๊ฐ์ Stack Bottom์ชฝ(๊ทธ๋ฆผ ์๋์ชฝ)์ ๊ฐ๊น๋ค. PUSH ๋ช ๋ น์ผ๋ก ์คํ์ ๊ฐ์ ์ ๋ ฅํ๋ฉด ์คํ ํฌ์ธํฐ(ESP)๋ ๊ฐ์ํ๊ณ , POP ๋ช ๋ น์ผ๋ก ์คํ์์ ๊ฐ์ ๊บผ๋ด๋ฉด ์คํํฌ์ธํฐ๋ ์ฆ๊ฐํ๋ค. ์ฆ, ์คํ์ ๊ฑฐ๊พธ๋ก ์๋๋ค! POP EBP ๋ฅผ ํ๋ฉด EBP ๊ฐ์ด ๋ณํ๋๋ฐ, PUSH ์ ๊ฒฝ์ฐ์๋ PUSH EBP ๋ช ๋ น์ด๋ฅผ ์คํํด๋, ํ์ฌ์ EBP ๊ฐ(์: 0019FF38) ๊ฐ๋ง ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋์ง EBP ์์ฒด์ ๊ฐ์ ๋ฐ๋์ง ์๋๋ค. POP EBP ..
'๋ฆฌ๋ฒ์ฑ ํต์ฌ ์๋ฆฌ'์ ๋ด์ฉ ๋ฐ ์ด์๋ค๊ณผ ํด๊ฒฐ์ฑ ์ ๋ค๋ฃน๋๋ค. 1. CPU ๋ ์ง์คํฐ๋? ๋ ์ง์คํฐ(Register)๋ CPU ๋ด๋ถ์ ์กด์ฌํ๋ ๋ค๋ชฉ์ ์ ์ฅ ๊ณต๊ฐ์ด๋ค. ์ฐ๋ฆฌ๊ฐ ์ผ๋ฐ์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ผ๊ณ ์๊ธฐํ๋ RAM(Random Access Memory)๊ณผ๋ ์กฐ๊ธ ์ฑ๊ฒฉ์ด ๋ค๋ฅด๋ค. CPU๊ฐ RAM์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์์ธ์ค(Access)ํ๊ธฐ ์ํด์๋ ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋จผ ๊ธธ์ ๋์๊ฐ์ผ ํ๊ธฐ ๋๋ฌธ์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฐ๋ค. ํ์ง๋ง ๋ ์ง์คํฐ๋ CPU์ ํ ๋ชธ์ด๊ธฐ ๋๋ฌธ์ ๊ณ ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค. ๋ ์ง์คํฐ์ ์ข ๋ฅ Basic program execution registers x87 FPU registers MMX registers XMM registers Control registers Memory management regis..
'๋ฆฌ๋ฒ์ฑ ํต์ฌ ์๋ฆฌ'์ ๋ด์ฉ ๋ฐ ์ด์๋ค๊ณผ ํด๊ฒฐ์ฑ ์ ๋ค๋ฃน๋๋ค. ๋ฐ์ดํธ ์ค๋๋ง : ๋ฐ์ดํธ ์ค๋๋ง์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐฉ์์ด๋ผ๊ณ ๊ธฐ์ตํ๋ฉด ๋๋ค. ํฌ๊ฒ ๋ ๊ฐ์ง๋ก, ๋น ์๋์ธ(Big Endian)๊ณผ ๋ฆฌํ ์๋์ธ(Little Endian)๋ฐฉ์์ด ์๋ค! TYPE | Name | SIZE | ๋ฐ์ดํฐ | ๋น ์๋์ธ Style | ๋ฆฌํ ์๋์ธ Style |:----|:----|:----|:----|:----|:-----| BYTE | b | 1 | 0x12; | [12] | [12] WORD | w | 2 | 0x1234; | [12][34] | [34][12] DWORD | dw | 4 | 0x12345678 | [12][34][56][78] | [78][56][34][12] char [] | str | 6 | "ab..
'๋ฆฌ๋ฒ์ฑ ํต์ฌ ์๋ฆฌ'์ ๋ด์ฉ ๋ฐ ์ด์๋ค๊ณผ ํด๊ฒฐ์ฑ ์ ๋ค๋ฃน๋๋ค. 1. EP(Entry Point) EP(Entry Point)๋ Windows ์คํ ํ์ผ (EXE, DLL, SYS๋ฑ)์ ์ฝ๋ ์์์ ์ ์๋ฏธํ๋ค. ํ๋ก๊ทธ๋จ์ด ์คํ๋ ๋ CPU์ ์ํด ๊ฐ์ฅ ๋จผ์ ์คํ๋๋ ์ฝ๋ ์์ ์์ฐจ๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค. 2. ๋๋ฒ๊ฑฐ ๋ช ๋ น์ด ๋ช ๋ น์ด |๋จ์ถํค |์ค๋ช |:------|:-------|:------| Go to | [Ctrl+G] | ์ํ๋ ์ฃผ์๋ก ์ด๋(์ฝ๋/๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ธํ ๋ ์ฌ์ฉ. ์คํ๋๋ ๊ฒ์ ์๋) Execute till Cursor | [F4] | cursor ์์น๊น์ง ์คํ (๋๋ฒ๊น ํ๊ณ ์ถ์ ์ฃผ์๊น์ง ๋ฐ๋ก ๊ฐ ์ ์์) Set/Reset Breakpoint | [F2] | BP ์ค์ / ํด์ Run | [F9..