1. abex' crackme #1
ํ์ผ ์คํ -> 2๊ฐ์ ๋ฉ์์ง ์ฐฝ์ ํ์ธ
3๊ฐ์ ๋ฉ์์ง ์ฐฝ์ด ๋จ๋ ํ๋ก๊ทธ๋จ์ธ ๊ฒ์ ์ ์ ์๋ค.
์ฆ, ํ์ผ์ ์คํํ์ ๋ ์๋ฌ๊ฐ ๋ฐ์ํด์ ์๋ฌ ๋ฉ์์ง ์ฐฝ์ด ๋ด๋ ๊ฒ์ด๊ณ , ์๋ฌ๊ฐ ๋ฐ์ํ์ง ์์ผ๋ฉด ๋ค๋ฅธ ๋ฉ์์ง์ฐฝ์ ๋ฐ ๊ฒ์ด๋ค.
- ์์ ์ฃผ์์ EP๊ฐ ๋์ผ : ๋งค์ฐ ๊ฐ๋จํ๊ณ ๋ช ํํ๊ฒ ์์ฑ
- high language๋ก ์์ฑ๋์์ ๋ ์๋ค์ ๋ถ๋ stub code๊ฐ ์์
- ์ด์ ๋ธ๋ฆฌ๋ก ์์ฑ๋ ์ฝ๋
- ๋ฉ์์ง์ฐฝ์ ์ ํ์๋ ๋๋ก GetDriveType() ํจ์์์ CD-ROM ํ์
์ ์ป์ด์ผ ํ ๊ฒ์ด๋ค.
- ํ์ฌ๋ root path๋ฅผ c๋ก ํ์ผ๋ฏ๋ก ํ๋๋๋ผ์ด๋ธ๊ฐ ๋์ด์๋ค.
- ExitProcess: ํ์ฌ ํ๋ก๊ทธ๋จ์ ์ข
๋ฃํ๋ผ๋ ์๋ฏธ
**ํ๋ก์ธ์ค์ ํ๋ก๊ทธ๋จ์ ์ฐจ์ด
: ์ํํธ์จ์ด๋ก ํจํค์ง๋ ๋ชจ๋ ๊ฑธ ํ๋ก๊ทธ๋จ์ด๋ผ๊ณ ํ๊ณ , ์คํ๋๊ณ ์์ ๋ (=๋ฉ๋ชจ๋ฆฌ์ ์์ฃผํ๊ณ ์์ ๋)๋ฅผ ํ๋ก์ธ์ค๋ผ๊ณ ํ๋ค.
(1) ์ค์ ์ฝ๋ ์ค๋ช
MessageBoxA ํจ์์๋ 4๊ฐ์ ํ๋ผ๋ฏธํฐ๊ฐ ํ์์ ์ผ๋ก ํ์ (Style, Title, Text, hOwner)
- hOwner์๋ ๋ฃ์ ๊ฐ์ด ๋ฑํ ์์ผ๋๊น null๊ฐ์ ๋ฃ์ด๋
- https://learn.microsoft.com/ko-kr/windows/win32/api/winuser/nf-winuser-messageboxa
GetDriveTypeA ํจ์
- ๋์คํฌ ๋๋ผ์ด๋ธ๊ฐ ์ด๋์, ๊ณ ์ ์, CD-ROM, RAM ๋์คํฌ ๋๋ ๋คํธ์ํฌ ๋๋ผ์ด๋ธ์ธ์ง ์ฌ๋ถ๋ฅผ ํ์ธ
- ํ์ฌ RootPathName("c:\")๋ฅผ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌํด์ฃผ์์ผ๋ฉฐ, ๋ฆฌํด๊ฐ์ผ๋ก 3์ด ๋์ด
EAX: ํจ์ ๊ฒฐ๊ณผ๊ฐ์ ์ ์ฅํ๊ณ ๋ฆฌํด๊ฐ์ ์ ๋ฌ. ์ฆ, GetDriveTypeA () ํจ์์ ๋ฆฌํด๊ฐ์ธ 3์ ์ ์ฅํ๋ค.
ESI์ EAX ๊ฐ์ ์กฐ์ ํ ๋ค, ๋ ๊ฐ์ ๋น๊ต ํจ
ESI = + 1 + 1 + 1 = 3
- ESI: + 1 + 1 + 1 = 3
- EAX: 3 -1 -1 = 1
- ์ฆ, ๋ง์ฝ ํ๋ ๋์คํฌ๊ฐ cd rom์ด์์ ๊ฒฝ์ฐ ๋ฆฌํด๊ฐ์ธ 5๊ฐ EAX์ ์ ์ฅ๋๋ค. ์ฆ, 5-2 = 3์ ๊ฐ์ ๊ฐ๋๋ค.
์ง๋ฌธ: ESI๋ ์์์ฃผ์๋ฅผ ์ ์ฅํ๋ค. ๋ฐ๋ผ์ INC์ด 3๋ฒ ๋๋ฉด ์์์ฃผ์(401000)์์ 3์ด ๋ํด์ง ๊ฒ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด, ์ 401003์ด ์๋๋ผ 03๊ณผ EAX๊ฐ์ ๋น๊ตํ๋ ๊ฒ์ผ๊น?
=> ๋งจ ๋ค์ ๋์๋ฆฌ๋ง ํ์ธํ๋ ๊ฒ์ผ๋ก ์ถ์ ๋จ
JE (Jump if Equal): ์กฐ๊ฑด ๋ถ๊ธฐ ๋ช
๋ น์ด
- JE SHORT 01.0040103D
- = ๋ ๊ฐ์ด ๊ฐ์ผ๋ฉด 40103D๋ก ์ ํํ๊ณ , ๋ค๋ฅด๋ฉด ๊ทธ๋ฅ ๋ฐ(401028)์ผ๋ก ์งํ
- ํ์ฌ๋ ๋ ๊ฐ์ด ๊ฐ์ผ๋ฏ๋ก ์ ํ
(2) ํฌ๋
+) ํ๋ก๊ทธ๋จ์ ํ์ผ ํน์ ์คํ ์ค์ธ ํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ์ ๋ด์ฉ์ ๋ณ๊ฒฝํ๋ ์์
์ ํจ์น๋ผ๊ณ ํ๋ค
- ํฌ๋์ ํจํฐ์ ๊ฐ์ ๊ฐ๋
์ด์ง๋ง, ํน๋ณํ ๊ทธ ์๋๊ฐ ๋นํฉ๋ฒ์ ์ด๊ณ ๋น๋๋์ ์ธ ๊ฒฝ์ฐ๋ฅผ ๋ฐ๋ก ๊ตฌ๋ถํ์ฌ ๋งํ๋ค.
- Assemble ๊ธฐ๋ฅ์ ํตํด JMP 004013D ๋ช
๋ น์ด๋ก ๋ณ๊ฒฝ (ํด๋น ๋ช
๋ น์ด ๋๋ธํด๋ฆญ ํ ํ
์คํธ ์์ )
- ์กฐ๊ฑด๋ฌธ์ ๊ฑฐ์น๋ ๊ฒ์ด ์๋๋ผ ๋ฌด์กฐ๊ฑด ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๋ถ๋ถ์ผ๋ก ์ ํํ ์ ์๋๋ก ์กฐ์
F9 ๊ฒฐ๊ณผ) ์ฑ๊ณต
+)
์คํ์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ๋ฒ
MessageBoxA() ํจ์์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ญ์์ผ๋ก ์ ๋ ฅํ๊ณ ์๋ค.
๋ง์ฝ, ํด๋น ์ฝ๋๋ฅผ C์ธ์ด๋ก ์์ฑํ๋ค๋ฉด ์๋์ ๊ฐ๋ค.
MessageBoxA(NULL, "Make me think your HD is a CD-Rom.", "abex' 1st crackme", MB_OK|MB_APPLMODAL);
์คํ์ FILO (First In Last Out) ๊ตฌ์กฐ์ด๋ฏ๋ก ํ๋ผ๋ฏธํฐ๋ฅผ ์ญ์์ผ๋ก ๋ฃ์ด์ค์ผ ๋ฐ๋ ์ชฝ(ํจ์)์์ ์ฌ๋ฐ๋ฅธ ์์๋ก ๊บผ๋ด ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
2. abex' crackme #3
์คํํ๋ฉด, keyfile์ ํ์ธํ๊ณ ์ฐพ์ ์ ์๋ค๋ ๋ฉ์์ง์ฐฝ์ด ๋ฌ๋ค.
(1) ์ค์ ์ฝ๋ ๋ถ์
CreateFileA ํจ์
https://learn.microsoft.com/ko-kr/windows/win32/api/fileapi/nf-fileapi-createfilea
- ํ์ผ ๋๋ I/O ๋๋ฐ์ด์ค๋ฅผ ๋ง๋ค๊ฑฐ๋ ์ฝ์
- ๋งค๊ฐ๋ณ์: Mode, Access, FileName(๋ง๋ค๊ฑฐ๋ ์ด ํ์ผ ๋๋ ๋๋ฐ์ด์ค์ ์ด๋ฆ)
- FileName: "abex.l2c"
- Mode: OPEN_EXISTING - ํ์ผ ๋๋ ๋๋ฐ์ด์ค๊ฐ ์๋ ๊ฒฝ์ฐ์๋ง open
HANDLE CreateFileA(
[in] LPCSTR lpFileName,
[in] DWORD dwDesiredAccess,
[in] DWORD dwShareMode,
[in, optional] LPSECURITY_ATTRIBUTES lpSecurityAttributes,
[in] DWORD dwCreationDisposition,
[in] DWORD dwFlagsAndAttributes,
[in, optional] HANDLE hTemplateFile
);
๋ฆฌํด ๊ฐ : FFFFFFFF (file not found)
๋ฆฌํด๊ฐ์ด FFFFFFFF (-1) ์ด๋ฏ๋ก, CMP EAX, -1์ ๊ฒฐ๊ณผ๋ก ZF=1์ด ๋๋ฉด์ JE๋ฌธ์ ์ํด 00401075๋ก ์ ํํ๊ฒ ๋๋ค.
๋ฐ๋ผ์, ๊ฐ์ ๊ฒฝ๋ก ๋ด์ "abex.l2c" ํ์ผ์ ์์ฑํ์ฌ์ ํจ์์ ๋ฆฌํด๊ฐ์ ๋ฐ๊ฟ์ผ ํ๋ค.
๋ค์ ์คํํด๋ณด๋ฉด, ํ์ผ์ ์ฐพ์์ง๋ง ์ ์ ํ ํ์ผ์ด ์๋๋ผ๋ ๋ฉ์์ง์ฐฝ์ด ์๋กญ๊ฒ ๋ฌ๋ค.
ํจ์์ ๋ฆฌํด๊ฐ(EAX์ ์ ์ฅ)๋ 20C์ผ๋ก ๋ฌ๋ผ์ก๋ค.
๋ฆฌํด๊ฐ์ด ๋ฌ๋ผ์ก๊ธฐ ๋๋ฌธ์ ์ ํํ์ง ์๊ณ , ๋ค์ ๋ช
๋ น์ด๋ก ๋์ด๊ฐ๋ค.
GetFileSize ํจ์
- ์ง์ ๋ ํ์ผ์ ํฌ๊ธฐ(๋ฐ์ดํธ) ๊ฒ์
- https://learn.microsoft.com/ko-kr/windows/win32/api/fileapi/nf-fileapi-getfilesize
์คํ ๊ฒฐ๊ณผ EAX์ 0์ด ์ ์ฅ๋์๋ค. (ํ์ผ์ ์๋ฌด๊ฒ๋ ์ ์ง ์์๊ธฐ ๋๋ฌธ)
CMP EAX, 12 : EAX์ 12 ๋น๊ต
- CMP: ๋ ํผ์ฐ์ฐ์ ๋น๊ต -> ๋ค๋ฆ -> ZF = 1
- ๋ ํผ์ฐ์ฐ์ ๊ฐ์ด ๊ฐ๋ค๋ฉด ๊ฒฐ๊ณผ๋ 0์ด ๋๊ณ ZF๋ 1์ด ๋๋ค. ๋ง์ฝ ๋ ๊ฐ์ด ๋ค๋ฅด๋ฉด ZF๊ฐ 0์ด ๋๋ค. (๋ ๊ฐ์ด ๋ค๋ฆ -> ๊ฒฐ๊ณผ๊ฐ 0์ด ์๋)
JNZ SHORT 00401060
- JNZ: Jump if Not Zero => 0์ด ์๋๋ฏ๋ก, ์ ํ
- ์ ๋ก ํ๋๊ทธ(ZF)๋ฅผ ์ฒดํฌํ์ฌ, ZF๊ฐ 0์ด๋ผ๋ฉด (์ฆ, ์ง์ ์ ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ 0์ด ์๋๋ผ๋ฉด) ์ฃผ์ด์ง ์ฃผ์(00401060)๋ก ์ ํ. ๋ง์ฝ ZF๊ฐ 1์ด๋ผ๋ฉด (์ง์ ์ ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ 0์ด๋ผ๋ฉด), ์ ํ๋ฅผ ์ํํ์ง ์๊ณ ๋ค์ ๋ช ๋ น์ด๋ฅผ ๊ณ์ ์คํํ๋ค
๋ฐ๋ผ์, ํ์ผ ์ฌ์ด์ฆ๋ฅผ EAX์ ์ ์ฅ๋ ๊ฐ์ผ๋ก ๋ง์ถฐ์ค๋ค.
์ด๋, 12๋ 16์ง์์ด๋ฏ๋ก 10์ง์๋ก 18 ๋ฐ์ดํธ์ ํฌ๊ธฐ์ ๋ฌธ์์ด์ ์
๋ ฅํด์ฃผ๋ฉด ๋๋ค.
๋ค์ ์คํํด๋ณด๋ฉด ์ ํํ์ง ์๊ณ ๋ค์ ๋ช
๋ น์ด๋ฅผ ์ํํ์ฌ ํฌ๋์ ์ฑ๊ณตํ ๊ฒ์ ํ์ธํ ์ ์๋ค.
3. abex' crackme #2
*ํ์ต๋ชฉํ: ๊ฐ๋จํ crack me ํ์ผ์ ๋ถ์ํ์ฌ ๋๋ฒ๊ฑฐ์ ๋์ค์ด์
์ฝ๋์ ์ต์ํด์ง๊ณ , Visual Basic์ ํ์ผ ๊ตฌ์กฐ๋ฅผ ์ดํด๋ณธ ๋ค ๋ถ์ ๋ฐฉ๋ฒ์ ๋ฐฐ์ด๋ค.
**ํด๋น exe ํ์ผ์ Visual Basic์ผ๋ก ์ ์๋์๋ค.
(1) abexโ crackme #2 ์คํ
- exe ํ์ผ์ ๋ค์ด๋ก๋ ๋ฐ์๋ณด๋ ํด๋น ํ๋ฉด์ด ๋ด๋ค.
- ์ ํ์ ์ธ crackme์ ํํ์ธ ์๋ฆฌ์ผ ํค๋ฅผ ์์๋ด๋ ํ๋ก๊ทธ๋จ์ด๋ผ๊ณ ํ๋ค.
- Name์ ๋ฐ๋ก ์
๋ ฅ๋ฐ๋ ๊ฑธ๋ก ๋ด์๋ ์๋ฆฌ์ผ ๊ฐ์ ์์ฑํ ๋ Name ๋ฌธ์์ด์ด ์ฌ์ฉ๋ ๊ฐ๋ฅ์ฑ์ด ์๋ค
- ์ด ๋ถ๋ถ์ ๊ฒฝํ์ ํตํด ์ ์๊ฐ ์ถ์ธกํ ๋ถ๋ถ
- ์ผ๋จ ๋จผ์ , ํด๋น ์นธ์ ์๋ฌด๊ฐ์ด๋ ์ ๋ ฅํด๋ณธ ํ [Check] ๋ฒํผ์ ๋๋ฌ์ค๋ค
- ๊ฐ abc, def๋ฅผ ์ ๋ ฅํ๋๋ฐ ์ต์ 4๊ธ์๋ฅผ ์น๋ผ๊ณ ์๋ฌ์ฐฝ์ด ๋ด๋ค
- ๋ฐ๋ผ์, ๋ ๊ธด ๋ฌธ์์ด์ ์ ๋ ฅํด์ฃผ์๋๋, ์๋ฆฌ์ผ ๊ฐ์ด ํ๋ ธ๋ค๋ ์๋ฌ ์ฐฝ์ด ๋ฌ๋ค. "Wrong serial!"
(2) Visual Basic ํ์ผ ํน์ง
**ํด๋น exe ํ์ผ์ Visual Basic์ผ๋ก ์ ์๋์๋ค.
- ๋ฐ๋ผ์ ํด๋น ํ์ผ์ ๋๋ฒ๊น
ํ๊ธฐ ์ ์ Visual Basic ํ์ผ์ ๋ํด์ ์์๋ณด์
- VB ์ ์ฉ ์์ง
- VBํ์ผ์ MSVBVM60.dll (Microsoft Visual Basic Virtual Machine 6.0)์ด๋ผ๋ ์ ์ฉ ์์ง์ ์ฌ์ฉํ๋ค.
- The Thunder Runtime Engine ์ด๋ผ๊ณ ๋ ๋ถ๋ฆผ
- VB์์ง์ ์์
- ๋ฉ์์ง ๋ฐ์ค๋ฅผ ์ถ๋ ฅํ๊ณ ์ถ์ ๋ VB ์์ค์ฝ๋์์ MsgBox() ํจ์๊ฐ ํธ์ถ๋๋๋ก ๋ง๋ค๊ณ , ์ด ํจ์ ๋ด๋ถ์์ Win31 API ์ธ user32.dll!MessageBoxW() ํจ์๋ฅผ ํธ์ถํด์ฃผ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค.
- VB์์ง์ ์์
- N(Native) code, P(Pseudo) code
- VB ํ์ผ์ ์ปดํ์ผ ์ต์ ์ ๋ฐ๋ผ์ N code์ P code๋ก ์ปดํ์ผ์ด ๊ฐ๋ฅํ๋ค.
- N code: ์ผ๋ฐ์ ์ธ ๋๋ฒ๊ฑฐ์์ ํด์ ๊ฐ๋ฅํ IA-32 instruction ์ ์ฌ์ฉํจ
- P code: ์ธํฐํ๋ฆฌํฐ ์ธ์ด ๊ฐ๋
์ผ๋ก VB ์์ง์ผ๋ก ๊ฐ์๋จธ์ ์ ๊ตฌํํ์ฌ ์์ฒด์ ์ผ๋ก ํด์ ๊ฐ๋ฅํ ๋ช
๋ ์ด(๋ฐ์ดํธ ์ฝ๋)๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
- ๋ฐ๋ผ์, VB์ P code๋ฅผ ์ ํํ ํด์ํ๋ ค๋ฉด VB์์ง์ ๋ถ์ํ์ฌ ์๋ฎฌ๋ ์ดํฐ๋ฅผ ๊ตฌํํด์ผ ํ๋ค.
- The Thunder Runtime Engine ์ด๋ผ๊ณ ๋ ๋ถ๋ฆผ
- Event Handler
- VB๋ ์ฃผ๋ก GUI ํ๋ก๊ทธ๋๋ฐ์ ํ ๋ ์ฌ์ฉ๋๋ฉฐ, IDE ์ธํฐํ์ด์ค ์์ฒด๋ GUI ํ๋ก๊ทธ๋๋ฐ์ ์ต์ ํ๋์ด ์๋ค.
- ์ฆ VB ํ๋ก๊ทธ๋จ์ ์๋์ฐ ์ด์์ฒด์ ์ Event Driven ๋ฐฉ์์ผ๋ก ๋์ํ๊ธฐ ๋๋ฌด์ main() ํน์ WinMain()์ ์ฌ์ฉ์ ์ฝ๋(=์ฐ๋ฆฌ๊ฐ ๋๋ฒ๊น ์ ์ํ๋ ์ฝ๋)๊ฐ ์กด์ฌํ๋ ๊ฒ์ด ์๋๋ผ, ๊ฐ event handler์ ์ฌ์ฉ์ ์ฝ๋๊ฐ ์กด์ฌํ๋ค.
- undocumented ๊ตฌ์กฐ์ฒด
- VB์์ ์ฌ์ฉ๋๋ ๊ฐ์ข ์ ๋ณด(Dialog, Control, Form, Module, Function ๋ฑ)๋ค์ ๋ด๋ถ์ ์ผ๋ก ๊ตฌ์กฐ์ฒด ํ์์ผ๋ก ํ์ผ์ ์ ์ฅ๋๋ค
- ๋ง์ดํฌ๋ก์ํํธ์์๋ ์ด๋ฌํ ๊ตฌ์กฐ์ฒด ์ ๋ณด๋ฅผ ์ ์์ผ๋ก ๊ณต๊ฐํ์ง ์์๊ธฐ ๋๋ฌธ์ VB ํ์ผ์ ๋๋ฒ๊น ์ ์ด๋ ค์์ด ์๋ค.
- VBํ์ผ์ MSVBVM60.dll (Microsoft Visual Basic Virtual Machine 6.0)์ด๋ผ๋ ์ ์ฉ ์์ง์ ์ฌ์ฉํ๋ค.
(3) Start debugging
- ํ๋ก๊ทธ๋จ์ด ์์๋๋ฉด EP(401238) ์ฝ๋์์๋ VB ์์ง์ ๋ฉ์ธํจ์(ThunRTMain)๋ฅผ ํธ์ถ(CALL)ํ๋ค.
- CALL <JMP.~~~~#1100> ์ F8 ์คํํ๋ฉด crackme์ฐฝ์ด ๋จ๋ฏ๋ก, ํด๋น ๋ถ๋ถ์ breakpoint ํด๋๊ณ , F7๋ก ๋ค์ด๊ฐ๋ณด์๋ค. //์ํด๋๋จ
- ์ฃผ์ ๋ฑ์ ํตํด Mainํจ์๊ฐ ํธ์ถ๋๋ ๊ฒ์ ์ ์ ์๋ค.
- PUSH 00401E14
- 401E14๋ฅผ ์คํ์ ์
๋ ฅ(PUSH)ํ๋ค
- 401E14๋ RT_MainStruct ๊ตฌ์กฐ์ฒด ์ฃผ์์ด๋ค
- 401E14๋ฅผ ์คํ์ ์
๋ ฅ(PUSH)ํ๋ค
- CALL <jmp.~~~~#1100> //CALL 4012E4
- ํด๋น ๋ช
๋ น์ด์ ์ํด 401232 ์ฃผ์์ JMP DWORD PTR DS:[4010A0] ๋ช
๋ น์ด ์คํ
- ์คํ๋ JMP ๋ช ๋ น์ด์ ์ํด VB ์์ง์ ๋ฉ์ธํจ์์ธ ThunRTMain() ํจ์๋ก ๊ฐ๋ค
- ์์์ ์คํ์ ์ ๋ ฅํ 4012E4 ๊ฐ์ ThunRTMain()์ ํ๋ผ๋ฏธํฐ ๊ฐ์ด๋ค.
- ํด๋น ๋ช
๋ น์ด์ ์ํด 401232 ์ฃผ์์ JMP DWORD PTR DS:[4010A0] ๋ช
๋ น์ด ์คํ
- ๊ฐ์ ํธ์ถ
- 40123D ์ฃผ์์ CALL 401232 ๋ช
๋ น์ ThunRTMain() ํจ์ ํธ์ถ์ด๋ค
- MSVBVM60.dll! 1unRTMain()์ผ๋ก ์ง์ ๊ฐ๋ ๊ฒ์ด ์๋๋ผ ์ค๊ฐ์ 401232 ์ฃผ์์ JMP ๋ช ๋ น์ ํตํด ๊ฐ๋ ํน์ดํ ๋ฐฉ์์ด๋ค
- ์ด ๊ธฐ๋ฒ์ VC++, VB ์ปดํ์ผ๋ฌ์์ ๋ง์ด ์ฌ์ฉ๋๋ ๊ฐ์ ํธ์ถ(Indirect Call)๊ธฐ๋ฒ์ด๋ค.
- RT_MainStruct ๊ตฌ์กฐ์ฒด
- RT_MainStruct ๊ตฌ์กฐ์ฒด์ ๋ฉค๋ฒ๋ ๋ ๋ค๋ฅธ ๊ตฌ์กฐ์ฒด์ ์ฃผ์๋ค์ด๋ค. ์ฆ, VB์์ง์ ํ๋ผ๋ฏธํฐ๋ก ๋์ด์จ RT_MainStruct ๊ตฌ์กฐ์ฒด๋ฅผ ๊ฐ์ง๊ณ ํ๋ก๊ทธ๋จ์ ์คํ์ ํ์ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ์ป๋๋ค๋ ๊ฒ์ ์ ์ ์๋ค
- ์ฑ ์์๋ ์ ํํ ์ค๋ช ์๋ต
- ThunRTMain() ํจ์ //401232์์ F7
- ํด๋น ํ๋ฉด์ ThunRTMain() ์ฝ๋์ ์์ ๋ถ๋ถ์ด๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ ์์ ํ ๋ฌ๋ผ์ง ๊ฒ์ ๋ณผ ์ ์๋ค.
- ์ด ์ฃผ์๋ MSVBVM60.dll ๋ชจ๋์ ์ฃผ์ ์์ญ์ด๋ค.
- ์ฆ, ์ฐ๋ฆฌ๊ฐ ๋ถ์ํ๋ ํ๋ก๊ทธ๋จ์ ์ฝ๋๊ฐ ์๋๋ผ VB์์ง์ ์ฝ๋๋ผ๋ ๊ฒ์ด๋ค.
- ์ด ๋ถ๋ถ์ ์ง๊ธ ๋ถ์ํ ํ์X
- ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ ์์ ํ ๋ฌ๋ผ์ง ๊ฒ์ ๋ณผ ์ ์๋ค.
- crackme ๋ถ์
์ฐ๋ฆฌ๊ฐ ๋ณด๊ณ ์ถ์ ํจ์นํจ์ผ ํ๋ ์ฝ๋๊ฐ ์ด๋์ ์๋์ง ๋จ์๋ฅผ ์ฐพ์์ผ ํ๋ค.
์ฐ๋ฆฌ๊ฐ ์ ์ ์๋ ๋จ์๊ฐ ๋ง์ง ์์ผ๋ฏ๋ก, ๊ฐ์ฅ ๊ฐ๋จํ๊ฒ ์๋ฌ ๋ฉ์์ง ๋ฐ์ค์ ๊ฒฝ๊ณ ๋ฌธ์์ด์ ์ฌ์ฉํ๊ธฐ๋ก ํ๋ค.
- ๋ฌธ์์ด ๊ฒ์
//๋ง์ฐ์ค ์ฐํด๋ฆญ ํ search for -> all referenced text string
- ์ด์ ์ ๋ดค๋ ์๋ฆฌ์ผ์ด ํ๋ ธ๋ค๋ ๋ฌธ์์ด์ ํ์ธํ ์ ์๋ค.
- ๋๋ธํด๋ฆญํ์ฌ ํด๋น ์ฃผ์๋ก ๋ฐ๋ก ์ด๋ํ๋ค
- ๋ฉ์์ง ๋ฐ์ค์ ํ์ดํ ๋ฟ๋ง ์๋๋ผ ๋ด์ฉ ๋ถ๋ถ๊น์ง ํ์ธํ ์ ์์ผ๋ฉฐ, ์ค์ ๋ฉ์์ง ๋ฐ์ค ํธ์ถ ํจ์ ์ฝ๋ ๋ํ ๋ํ๋ฌ๋ค.
- ๋ฉ์์ง ๋ฐ์ค ํจ์ ํธ์ถ ์ฝ๋: 4034A6
- ํ๋ก๊ทธ๋๋ฐ ๊ด์ ์์ ์๊ฐํด๋ณด์
- ์ด๋ค ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์๋ฆฌ์ผ ํค๋ฅผ ์์ฑํ๊ณ
- ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ํค์ ๋ฌธ์์ด ๋น๊ต๋ฅผ ํตํด์ ๊ฐ๊ฐ TRUE(ํค๊ฐ ๊ฐ์)์ FALSE(ํค๊ฐ ํ๋ฆผ)๋ก ์ฝ๋๊ฐ ๊ฐ๋ผ์ง ๊ฒ์ด๋ค. ์ฆ, ์ ์ฝ๋ ์ ํ์ ๋ฌธ์์ด ๋น๊ต ์ฝ๋ ๊ทธ๋ฆฌ๊ณ ํค๊ฐ ๋ง์์ ๋ ์ถ๋ ฅ๋ ์ฑ๊ณต ๋ฉ์์ง ๋ฐ์ค ํธ์ถ์ฝ๋๊ฐ ์กด์ฌํ ์ ์์ ๊ฒ์ด๋ค. (์คํฌ๋กค์ ์ฌ๋ฆฌ๋ฉด ํ์ธ ๊ฐ๋ฅ)
- 403329 ์ฃผ์์ __vbaVarTstEq() ํจ์๋ฅผ ํธ์ถํด์ ๋ฆฌํด๊ฐ(AX)๋ฅผ ๋น๊ต(TEST ๋ช ๋ น)ํ ํ 403332 ์ฃผ์์ ์กฐ๊ฑด ๋ถ๊ธฐ(JE ๋ช ๋ น)์ ์ํด์ ์ฐธ, ๊ฑฐ์ง ์ฝ๋๋ก ๋ถ๊ธฐํ๊ฒ ๋๋ค.
- ๋ฌธ์์ด ์ฃผ์ ์ฐพ๊ธฐ
- 403329 ์ฃผ์์ __vbaVarTstEq() ํจ์๊ฐ ๋ฌธ์์ด ๋น๊ต ํจ์๋ผ๋ฉด, ๊ทธ ์์ ์๋ ๋ ๊ฐ์ PUSH ๋ช
๋ น์ด(403327,403328)๋ ๋น๊ต ํจ์์ ํ๋ผ๋ฏธํฐ, ์ฆ ๋น๊ต ๋ฌธ์์ด์ด ๋ ๊ฒ์ด๋ค.
- C์ธ์ด์ strcmp() ํจ์๋ฅผ ํตํด ์ ์๊ฐ ์ถ์ธกํ ๋ถ๋ถ
- 403329 ์ฃผ์๊น์ง ๋๋ฒ๊น
์ ์งํํด์ค๋ค.
- 403329์๋ง Breakpoint๋ฅผ ๊ฑธ๊ณ F9๋ฅผ ํตํด ์คํํ๋ค.
- SS: [EBP-44]
- SS: ์คํ ์ธ๊ทธ๋จผํธ
- EBP: ๋ฒ ์ด์ค ํฌ์ธํฐ
- ์ฆ, EBP-44๋ ์คํ ๋ด์ ์ฃผ์๋ฅผ ๋งํ๋๋ฐ, ์ด๊ฒ์ด ๋ฐ๋ก ํจ์์์ ์ ์ธ๋ ๋ก์ปฌ ๊ฐ์ฒด์ ์ฃผ์์ด๋ค.
- ๋ก์ปฌ ๊ฐ์ฒด๋ ์คํ์์ญ์ ์ ์ฅ๋จVB์ ๋ฌธ์์ด์ C++์ string ํด๋์ค์ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ฐ๋ณ ๊ธธ์ด ๋ฌธ์์ด ํ์ ์ ์ฌ์ฉํ๋ค.
ํด๋น ์ฃผ์๋ก ์ด๋ํ๋ ๋ฒ: ํด๋น ์ฃผ์ ํด๋ฆญ -> ๋ง์ฐ์ค ์ฐ์ธก ๋ฒํผ -> Follow in dump (-> Memory address)
- EAX:19F298
- EDX:19F288
๋ฉ๋ชจ๋ฆฌ ๋คํ ์ฐฝ -> address with ASCII dump
*๋ณต๊ตฌ: Hex -> Hex/ASCII(16 bytes)
- ์ฌ์ง์์ ์ ์ ์๋ฏ์ด ๊ฒฐ๊ตญ EDX๋ ์ค์ serial ๊ฐ์ด๊ณ , EAX ๊ฐ์ ๋ด๊ฐ ์
๋ ฅํ ์๋ฆฌ์ผ ๊ฐ์ด๋ผ๋ ๊ฑธ ์ ์ ์๋ค.
- ๋ฐ๋ผ์, ๊ฐ์ Name ๊ฐ์ผ๋ก ํด๋น ์๋ฆฌ์ผ ๊ฐ์ ์ ๋ ฅํด๋ณด๋ฉด ์ฑ๊ณต์ด๋ค
- Serial ์์ฑ ์๊ณ ๋ฆฌ์ฆ
- ์์์ ๋ณด์๋ ์กฐ๊ฑด ๋ถ๊ธฐ ํจ์๋ ์ด๋ค ํจ์์ ์ํด์์ ๊ฒ์ด๋ค. ๊ทธ ํจ์๋ Check ๋ฒํผ์ event handler ์ผ ๊ฒ์ด๋ค.
- [Check] ๋ฒํผ์ ์ ํํ์ ๋ ์ ํจ์๊ฐ ํธ์ถ๋์์ผ๋ฉฐ, ์ฑ๊ณต/์คํจ ๋ฉ์์ง ๋ฐ์ค๋ฅผ ์ถ๋ ฅํ๋ ์ฌ์ฉ์ ์ฝ๋๋ฅผ ํฌํจํ๊ณ ์๊ธฐ ๋๋ฌธ์ด๋ค
- ํด๋น ์กฐ๊ฑด ๋ถ๊ธฐ ์ฝ๋์์ ์๋ก ์คํฌ๋กค์ ํ๋ค๋ณด๋ฉด ์๋์ ๊ฐ์ ์ฝ๋๋ฅผ ์ฐพ์ ์ ์๋ค
- ์๋ ์ฝ๋๋ ํจ์๊ฐ ์์ํ ๋ ์คํ ํ๋ ์์ ๊ตฌ์ฑํ๋ ์ ํ์ ์ธ ์ฝ๋์ด๋ค.
- ๋ฐ๋ผ์, ์ด ์์น๊ฐ ํจ์์ ์์์์ ์ ์ ์์ผ๋ฉฐ, ๋ฐ๋ก [Check] ๋ฒํผ์ event handler์ด๋ค.
- ์ ํํ ๋ถ์์ ์ํ 402ED0์ BP๋ฅผ ๊ฑด๋ค.
- ์ฝ๋ ์์ธกํ๊ธฐ
- ์๋ฆฌ์ผ ํค๋ฅผ ์์ฑํ๋ ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฐ ๊ฒฝํ์ด๋ ๋ฆฌ๋ฒ์ฑ ๊ฒฝํ์ ํตํด ์๋ฆฌ์ผ ํค์ ์์ฑ๋ฐฉ๋ฒ์ ๋ํ ์์ธก์ด ๊ฐ๋ฅํ๋ค.
- Name ๋ฌธ์์ด ์ฝ๊ธฐ
- ๋ฃจํ๋ฅผ ๋๋ฉด์ ๋ฌธ์๋ฅผ ์ํธํ ํ๊ธฐ
๋ฐ๋ผ์, VB์์ง ํจ์๋ก ์์ฑ๋ ํด๋น ํ์ผ๋ ์๋ฆฌ๊ฐ ์ด์ ๋น์ทํ ๊ฒ์ด๋ผ๊ณ ์์ธกํ ์ ์๋ค
์์ธก์ด ๋ง๋ค๋ฉด, event handler ์์ ์ฝ๋๋ถํฐ ๋๋ฒ๊น
์ ํ์ฌ Name ๋ฌธ์์ด์ ์ฝ๋ ๋ถ๋ถ์ ์ฐพ์ผ๋ฉด, ๋ฐ๋ก ์ด์ด์ ์ํธํ ๋ฃจํ๊ฐ ๋ํ๋ ๊ฒ์ด๋ค.
- Name ๋ฌธ์์ด ์ฝ๋ ์ฝ๋์ ์ํธํ ๋ฃจํ
- ํด๋น Call ํจ์๋ฅผ ์คํํ๋ฉด ์คํธ๋ง ๊ฐ์ฒด์ ๊ฐ์ด ์ ์ฅ๋๋ ๊ฒ์ ํ์ธํ ์ ์๊ณ ,
- ๊ณ์ ๋๋ฒ๊น
์ ํ๊ฒ ๋๋ฉด ๋ฐ๋ณต๋ฌธ์ ๋ง๋ ์ ํด์ง ํ์๋งํผ ๋ฃจํ๋ฅผ ๋๊ฒ ๋๋ค.
- ์ํธํ ๋ฐฉ๋ฒ
- ์ ๋ ฅํ Name: minji123
- ์์ ํ๋ฉด๊น์ง ๋๋ฒ๊น
ํ๋ค
- ECX:00191F0
- ๊ฒฐ๊ณผ ์ ์ฅ์ฉ ๋ฒํผ
- EAX: 0019F1F0
- ์ํธํ ํค
- EDX: 0019F278
- Name ๋ฌธ์์ด์์ ์ฒซ ๋ฒ์งธ ๋ฌธ์์ ์์คํค ๊ฐ
- ECX:00191F0
- ์ด์ฒ๋ผ ์์ฑ๋ ๋ฌธ์์ด์ ์ด์ด ๋ถ์ฌ์ฃผ๋ ๋ฐฉ์์ผ๋ก ์งํ๋๋ค.
- ์ํธํ ๋ฐฉ์ ์ด ์ ๋ฆฌ
- ์ฃผ์ด์ง Name ๋ฌธ์์ด์ ์์์๋ถํฐ ํ ๋ฌธ์์ฉ ์ฝ๊ธฐ(์ด 4ํ)
- ๋ฌธ์๋ฅผ ์ซ์(ASCII์ฝ๋)๋ก ๋ณํ
- ๋ณํ๋ ์ซ์์ 64๋ฅผ ๋ํจ
- ์ซ์๋ฅผ ๋ค์ ๋ฌธ์๋ก ๋ณํ
- ๋ณํ๋ ๋ฌธ์๋ฅผ ์ฐ๊ฒฐ์ํด