๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

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.