Study/study17 ์๋ ์คํ ๋ฑ๋ก ํ๋ก๊ทธ๋จ(C++) ๋ฆฌ๋ฒ์ฑ ํน์ ํ๋ก๊ทธ๋จ์ ์๋ ์คํํ๋๋ก ๋ ์ง์คํธ๋ฆฌ์ ๋ฑ๋กํ๋ C++ ํ๋ก๊ทธ๋จ์ ๋ฆฌ๋ฒ์ฑํด๋ณด๊ฒ ์ต๋๋ค. #include #include void AddToStartup(const std::wstring& appName, const std::wstring& appPath) { // ๋ ์ง์คํธ๋ฆฌ ํค๋ฅผ ์ด๊ธฐ HKEY hKey; LONG result = RegOpenKeyEx(HKEY_CURRENT_USER, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_SET_VALUE, &hKey); if (result != ERROR_SUCCESS) { std::cerr (appPath.c_.. 2024. 11. 5. SEH, TEB(TIB), PEB์ FS ๋ ์ง์คํฐ๋ฅผ ํตํด ์ ๊ทผํ๋ ๋ฐฉ๋ฒ SEH ํจ์์์ธ ์ฒ๋ฆฌ๊ธฐ๋ 4๊ฐ์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ ๋ ฅ ๋ฐ๊ณ , ์ด๊ฑฐํ(enum) EXCEPTION_DISPOSITION์ ๋ฆฌํดEXCEPTION_DISPOSITION _except_handler( EXCEPTION_RECORD *pRecord, EXCEPTION_REGISTRATION_RECORD *pFrame, CONTEXT *pContext, PVOID pValue); SEH ํจ์ ์ฒซ ๋ฒ์งธ ํ๋ผ๋ฏธํฐ EXCEPTION_RECORDtypedef struct _EXCEPTION_RECORD { DWORD ExceptionCode; //์์ธ ์ฝ๋ DWORD ExceptionFlags; .. 2024. 5. 14. SEH, ์์ธ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ SEH ์์ : seh.exe (reversecore)seh.exe๋ฅผ ๊ทธ๋ฅ ์คํํ๋ฉด Hello :) ๋ฌธ์์ด์ ์ถ๋ ฅ ๋๋ฒ๊ฑฐ์์ ์คํํ๊ฒ ๋๋ฉด EXCEPTION_ACCESS_VIOLATION ์์ธ๊ฐ ๋ฐ์ ๊ทธ๋ฅ ์คํํ์ ๋ ์ ์ ์คํ๋์๋ ๊ฒ์ ์ค๋น๋ SEH์ ์ํด ํด๋น ์์ธ๊ฐ ์ฒ๋ฆฌ๋์๊ธฐ ๋๋ฌธ ์์ธ๊ฐ ๋ฐ์ํ ์ฝ๋(0x401019)๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ 0(eax)์ 1์ ์ ๋ ฅํ๋ ์ฝ๋.ํ ๋น๋์ง ์์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ access ์๋๋ฅผ ํ๋ฉด Memory Access Violation ์๋ฌ๊ฐ ๋ฐ์ ๊ทธ๋ฅ ์คํํ๋ฉด Debugger detected :( ๋ฌธ์์ด ์ถ๋ ฅ → ๋๋ฒ๊ฑฐ ํ์ง ์ฝ๋ ๆ ๋๋ฒ๊น ์ ํตํ ์์ธ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ๋๋ฒ๊น ์ค ๋๋ฒ๊ธฐ ํ๋ก์ธ์ค์ ์์ธ๊ฐ ๋ฐ์ํ๋ฉด, OS๋ ์ฐ์ ์ ์ผ๋ก ๋๋ฒ๊ฑฐ์๊ฒ ์์ธ๋ฅผ ๋๊ฒจ ์ฒ๋ฆฌํ๋๋ก ํจ.. 2024. 5. 13. TLS, TLS ์ฝ๋ฐฑํจ์ TLS, Thread Local Storage์ค๋ ๋: ํ๋ก์ธ์ค ๋ด ์คํ ์์ฝ ๋ด๋น ์ํฐํฐํ๋ก์ธ์ค์ ๋ชจ๋ ์ค๋ ๋๋ ๊ฐ์ ์ฃผ์ ๊ณต๊ฐ, ์์คํ ๋ฆฌ์์ค๋ฅผ ๊ณต์ ํ๋๋ฐ TLS๊ฐ ์ด๋ฅผ ๋ด๋น(๊ด๋ฆฌ) ๊ฐ ์ค๋ ๋์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ /์ ๊ณตํ๊ธฐ ์ํ ๊ณต๊ฐ์ค๋ ๋๋ณ ๋ ๋ฆฝ๋ ๋ฐ์ดํฐ ์ ์ฅ ๊ณต๊ฐTLS๋ฅผ ํตํด ํ๋ก์ธ์ค์ ์ ์ญ ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ์ค๋ ๋์ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณต ํ ์ค๋ ๋์์ ์ธ๋ฑ์ค๋ฅผ ํ ๋น์ ๋ด๋นTLS ๋์ ๋ฐฉ์TLS์ ์ค๋ ๋๋ณ ์ธ๋ฑ์ค(gdwTlsIndex)๋ฅผ ํ ๋น ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก(Data)์ ํ ๋นํ๊ณ TLS ์ฌ๋กฏ์ ํด๋น ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์ ๋ํ ํฌ์ธํฐ ์ ์ฅTLS ์ฌ๋กฏ์์ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์ ๋ํ ํฌ์ธํฐ๋ฅผ ๊ฒ์ํ๊ณ ์ด๋ฅผ ์ง์ญ ๋ณ์ lpvData์ ์ ์ฅ TLS ์ฝ๋ฐฑํจ์ํ๋ก์ธ์ค์ ์ค๋ ๋๊ฐ ์์ฑ/์ข ๋ฃ๋ ๋๋ง๋ค ์๋์ผ๋ก ํธ์ถ๋๋ ์ฝ๋ฐฑ.. 2024. 5. 9. SEH, ๊ตฌ์กฐ์ ์์ธ ์ฒ๋ฆฌ SEH, Structured Exception Handler์๋์ฐ ์์ธ ์ฒ๋ฆฌ ๋ฉ์ปค๋์ฆํ๋์จ์ด SEH๋ ํ๋ก์ธ์ ๊ฐ์ (invalid memory access, integer divide-by zero, Access Violation ๋ฑ)์ ์ํด ์ผ์ด๋๊ณ , ์ํํธ์จ์ด SEH๋ ์ฌ์ฉ์๊ฐ ์ ์ํ ์์ธ(try-catch ๋ฑ)๋ก ์ผ์ด๋๊ฒ ๋จ SEH ๊ตฌ์ฑEXCEPTION_REGISTRATION_RECORD ๊ตฌ์กฐ์ฒด ์ฐ๊ฒฐ ๋ฆฌ์คํธ ํํ๋ก ๊ตฌ์ฑpub struct EXCEPTION_REGISTRATION_RECORD { pub Next: *mut EXCEPTION_REGISTRATION_RECORD, pub Handler: EXCEPTION_ROUTINE,}๋ค์ SEH ์ฃผ์์ ํฌ์ธํฐ + ํ์ฌ SEH ์์ธ ์ฒ๋ฆฌ๊ธฐ์ .. 2024. 5. 7. ์ด์ 1 2 3 ๋ค์