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

Study34

Dynamic ์•ˆํ‹ฐ ๋””๋ฒ„๊น…(Anti Debugging) ๊ธฐ๋ฒ•๊ณผ ์šฐํšŒ ์˜ค๋Š˜์€ Dynamic ์•ˆํ‹ฐ ๋””๋ฒ„๊น… ๊ธฐ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.Dynamic ์•ˆํ‹ฐ ๋””๋ฒ„๊น… ๊ธฐ๋ฒ•์€ ํ•ต์‹ฌ ์ฝ”๋“œ(OEP)๋กœ ๊ฐ€์ง€ ๋ชปํ•˜๋„๋ก ํŠธ๋ ˆ์ด์‹ฑ์„ ์ง€์†์ ์œผ๋กœ ๋ฐฉํ•ดํ•ฉ๋‹ˆ๋‹ค.  1. ์˜ˆ์™ธ (Exception)์ฒซ ๋ฒˆ์งธ๋Š” ์˜ˆ์™ธ๋ฅผ ์ด์šฉํ•œ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.์ผ๋ฐ˜ ์‹คํ–‰๊ณผ ๋””๋ฒ„๊ฑฐ ์‹คํ–‰์˜ ์ฐจ์ด๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜ ์‹คํ–‰์€ ์˜ˆ์™ธ ๋ฐœ์ƒ ์‹œ SEH๋ฅผ ํ˜ธ์ถœํ•˜์ง€๋งŒ ๋””๋ฒ„๊น…์„ ํ†ตํ•ด ์‹คํ–‰ํ•˜๋ฉด ๋””๋ฒ„๊ฑฐ๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๋™์ž‘๋ฉ๋‹ˆ๋‹ค. ์˜ˆ์™ธ๋ฅผ ๋งŒ๋‚˜๋ฉด ๋””๋ฒ„๊ฑฐ๊ฐ€ ์ž์ฒด์ ์œผ๋กœ (๊ฐ€๋กœ์ฑ„์„œ) ์ฒ˜๋ฆฌํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.  1.1. SEH (Structured Exception Handling)SEH๋Š” ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์œผ๋กœ ์ฒด์ธ ํ˜•ํƒœ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๊ธฐ์—์„œ ํ•ด๋‹น ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•˜๋ฉด ๋‹ค์Œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๊ธฐ๋กœ ์˜ˆ์™ธ๋ฅผ ๋„˜๊ฒจ์ฃผ๋Š” ํ˜•์‹์ž…๋‹ˆ๋‹ค. ์˜ˆ์™ธ ์ฒ˜๋ฆฌ๊ธฐ๋Š” .. 2024. 12. 17.
Static ์•ˆํ‹ฐ ๋””๋ฒ„๊น…(Anti Debugging) ๊ธฐ๋ฒ•๊ณผ ์šฐํšŒ Static ์•ˆํ‹ฐ ๋””๋ฒ„๊น…์€ ์ž์‹ ์ด ๋””๋ฒ„๊น…๋˜๊ณ  ์žˆ๋Š”์ง€ ํŒŒ์•…ํ•˜์—ฌ ๋””๋ฒ„๊น…๋˜๊ณ  ์žˆ๋‹ค๊ณ  ํŒ๋‹จํ•˜๋ฉด ์›๋ณธ๊ณผ ๋‹ค๋ฅธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. Static ๊ธฐ๋ฒ•์€ ํ•œ ๋ฒˆ๋งŒ ํ•ด์ฒดํ•˜๋ฉด ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.Dynamic ์•ˆํ‹ฐ ๋””๋ฒ„๊น…์€ ์›๋ณธ ์ฝ”๋“œ์™€ ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์—†๋„๋ก ํŠธ๋ ˆ์ด์‹ฑ์„ ์ง€์†์ ์œผ๋กœ ๋ฐฉํ•ดํ•ฉ๋‹ˆ๋‹ค. Dynamic ๊ธฐ๋ฒ•์€ ๋งŒ๋‚  ๋•Œ๋งˆ๋‹ค ํ•ด๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ Static ์•ˆํ‹ฐ ๋””๋ฒ„๊น… ๊ธฐ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.  1. PEB (Process Environment Block)ํ”„๋กœ์„ธ์Šค ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๊ตฌ์กฐ์ฒด PEB๋ฅผ ์ด์šฉํ•œ ๊ฒฝ์šฐ๊ฐ€ ์ ‘๊ทผ์ด ์‰ฌ์›Œ ๋งŽ์ด ์ด์šฉํ•ฉ๋‹ˆ๋‹ค.PEB ๊ตฌ์กฐ์ฒด ์ฃผ์†Œ๋Š” FS ์„ธ๊ทธ๋จผํŠธ(๋˜๋Š” GS ์„ธ๊ทธ๋จผํŠธ)๋ฅผ ํ†ตํ•ด ์‰ฝ๊ฒŒ ๊ตฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. FS ๋ ˆ์ง€์Šคํ„ฐ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฐ ์Šค๋ ˆ๋“œ ๊ด€๋ฆฌ๊ฐ ์Šค๋ ˆ๋“œ ์ƒํƒœ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” TEB๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฉฐ, ์˜ˆ์™ธ ์ฒ˜.. 2024. 11. 29.
ํ‚ค๋กœ๊ฑฐ(Keylogger)(C++) ํ”„๋กœ๊ทธ๋žจ ๋ฆฌ๋ฒ„์‹ฑ ํ‚ค๋กœ๊น…ํ•˜์—ฌ ์ €์žฅ๋œ ํŒŒ์ผ์„ AES ์•”ํ˜ธํ™”ํ•˜์—ฌ ์†Œ์ผ“ ํ†ต์‹ ํ•˜๋Š” C++ ํ”„๋กœ๊ทธ๋žจ์„ ๋ฆฌ๋ฒ„์‹ฑํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.30์ดˆ๋™์•ˆ ์ž…๋ ฅ๋˜๋Š” ํ‚ค๋ฅผ ํŒŒ์ผ์— ์ €์žฅํ•˜๊ณ  ํ•ด๋‹น ํŒŒ์ผ์„ ์•”ํ˜ธํ™”ํ•˜์—ฌ ์™ธ๋ถ€๋กœ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. #include #include #include #include #include #include #include #include #include #pragma comment(lib, "ws2_32.lib") // ์œˆ๋„์šฐ ์†Œ์ผ“ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋งํฌ#pragma comment(lib, "advapi32.lib") // Advapi32 ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋งํฌ// ์•”ํ˜ธํ™”ํ•  ํŒŒ์ผ ๊ฒฝ๋กœ ๋ฐ ์ถœ๋ ฅ ๊ฒฝ๋กœconst char* inputFilePath = "E:\\Office 2022\\HOffice120\\Bin\\Logs\\log.txt";const ch.. 2024. 11. 25.
ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋“œ(overload) ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋“œ ๊ฐœ๋…์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.  ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋“œ(overload)๊ฐ™์€ ์ด๋ฆ„์˜ ํ•จ์ˆ˜๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐœ๋…๊ฐ ํ•จ์ˆ˜๊ฐ€ ์ž…๋ ฅ๋ฐ›๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ฐœ์ˆ˜๋‚˜ ํƒ€์ž…์„ ๋‹ค๋ฅด๊ฒŒ ํ•ด์•ผํ•œ๋‹ค.ํ•จ์ˆ˜ ์ด๋ฆ„์ด ๊ฐ™์•„๋„ ์ž…๋ ฅ๋˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ฐœ์ˆ˜๋‚˜ ํƒ€์ž…์ด ๋‹ค๋ฅด๋ฉด ๋‹ค๋ฅธ ํ•จ์ˆ˜๋กœ ์ธ์‹๋˜์–ด ํ˜ธ์ถœ๋œ๋‹ค.C++, C#, Java, Swift์—์„œ๋Š” ์˜ค๋ฒ„๋กœ๋”ฉ์„ ์ง€์›ํ•˜๊ณ , C, Python, JavaScript, Ruby ๋“ฑ์—์„œ๋Š” ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.์–ธ์–ด๋งˆ๋‹ค ์˜ค๋ฒ„๋กœ๋“œ ๊ตฌํ˜„ ๋ฐฉ์‹๊ณผ ์ œ์•ฝ ์‚ฌํ•ญ์€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค.  C++์—์„œ์˜ ํ•จ์ˆ˜ ์˜ค๋ฒ„๋กœ๋“œํ•จ์ˆ˜ ์ด๋ฆ„์€ ๊ฐ™์ง€๋งŒ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ํƒ€์ž…์ด๋‚˜ ๊ฐœ์ˆ˜๋ฅผ ๋‹ค๋ฅด๊ฒŒ ํ•˜์—ฌ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.๋ฐ˜ํ™˜ ๊ฐ’์˜ ํƒ€์ž…๋งŒ ๋‹ค๋ฅด๊ฒŒ ์ •์˜ํ•˜๋ฉด ์˜ค๋ฒ„๋กœ๋“œํ•  ์ˆ˜ ์—†๊ณ , ํŒŒ๋ผ๋ฏธํ„ฐ๊นŒ์ง€ ๋‹ค๋ฅด๊ฒŒ ํ•ด์•ผ ํ•œ๋‹ค. C++ ์˜ค๋ฒ„๋กœ๋”ฉ ์˜ˆ์‹œ1: ํŒŒ๋ผ๋ฏธ.. 2024. 11. 14.
์ •์ˆ˜ ํƒ€์ž…์˜ ๋ถ€ํ˜ธ ๊ตฌ๋ถ„ ๋ช‡๋ช‡ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ์ค‘์—์„œ๋Š” ์ •์ˆ˜ ํƒ€์ž…์˜ ๋ถ€ํ˜ธ๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฐœ๋…์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์ค‘ C/C++์—์„œ์˜ ์ •์ˆ˜ ํƒ€์ž… ๋ถ€ํ˜ธ ๊ตฌ๋ถ„์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.  ์ •์ˆ˜ ํƒ€์ž…์˜ ๋ถ€ํ˜ธ ์œ ๋ฌด๋ถ€ํ˜ธ๊ฐ€ ์žˆ๋Š” ํƒ€์ž…(signed type)0์„ ํฌํ•จํ•˜์—ฌ ์–‘์ˆ˜์™€ ์Œ์ˆ˜๋ฅผ ๋ชจ๋‘ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์ •์ˆ˜ ํƒ€์ž…๊ธฐ๋ณธ์ ์œผ๋กœ ๋Œ€๋ถ€๋ถ„์˜ ์ •์ˆ˜ํ˜• ํƒ€์ž…(int, short, long ๋“ฑ)์€ ๋ถ€ํ˜ธ๊ฐ€ ์žˆ๋Š” ํƒ€์ž…์œผ๋กœ ์„ ์–ธ๋œ๋‹ค.+์™€ - ๊ธฐํ˜ธ๋ฅผ ํ†ตํ•ด ์Œ์ˆ˜๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.๋ถ€ํ˜ธ๊ฐ€ ์—†๋Š” ํƒ€์ž…(unsigned  type)์–‘์ˆ˜์™€ 0๋งŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์ •์ˆ˜ ํƒ€์ž…์Œ์ˆ˜๋Š” ํ‘œํ˜„ํ•  ์ˆ˜ ์—†๋‹ค.unsigned int, unsigned short, unsigned long ๋“ฑ์œผ๋กœ ์„ ์–ธ๋œ๋‹ค.   ์˜ค๋ฅ˜ ๋ฐ ํ•ด๊ฒฐ ์˜ˆ์‹œํŠน์ • ํŒŒ์ผ์˜ ํฌ๊ธฐ๊ฐ€ 1024๋ฐ”์ดํŠธ๋ณด๋‹ค ํฐ ์ง€ ๊ฒ€์‚ฌํ•˜๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.const .. 2024. 11. 13.
AES ์•”ํ˜ธํ™” ๋ฐ์ดํ„ฐ ์ „์†ก ํ”„๋กœ๊ทธ๋žจ(C++) ๋ฆฌ๋ฒ„์‹ฑ ๋ฐ์ดํ„ฐ๋ฅผ AES ์•”ํ˜ธํ™”ํ•˜์—ฌ ์†Œ์ผ“ ํ†ต์‹ ํ•˜๋Š” C++ ํ”„๋กœ๊ทธ๋žจ์„ ๋ฆฌ๋ฒ„์‹ฑํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.OpenSSL ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(v3.4.0)๋ฅผ ํ†ตํ•ด AES ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค. #include #include #include #include #include #include #pragma comment(lib, "ws2_32.lib")#pragma comment(lib, "libssl.lib")#pragma comment(lib, "libcrypto.lib")#define AES_KEY_SIZE 32 // AES-256#define AES_BLOCK_SIZE 16// AES ์•”ํ˜ธํ™” ํ•จ์ˆ˜ (EVP API ์‚ฌ์šฉ)int aes_encrypt(const unsigned char* input, int input_len, unsign.. 2024. 11. 11.