์ „์ฒด ๊ธ€ 110

[Java] ๋ฐฑ์ค€ 1822

1822. ์ฐจ์ง‘ํ•ฉ (Silver 4) # ์ž๋ฃŒ๊ตฌ์กฐ ๋ช‡ ๊ฐœ์˜ ์ž์—ฐ์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ ๋‘ ์ง‘ํ•ฉ A์™€ B๊ฐ€ ์žˆ๋‹ค. ์ง‘ํ•ฉ A์—๋Š” ์†ํ•˜๋ฉด์„œ ์ง‘ํ•ฉ B์—๋Š” ์†ํ•˜์ง€ ์•Š๋Š” ๋ชจ๋“  ์›์†Œ๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ์ž…๋ ฅ ์ฒซ์งธ ์ค„์—๋Š” ์ง‘ํ•ฉ A์˜ ์›์†Œ์˜ ๊ฐœ์ˆ˜ n(A)์™€ ์ง‘ํ•ฉ B์˜ ์›์†Œ์˜ ๊ฐœ์ˆ˜ n(B)๊ฐ€ ๋นˆ ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ฃผ์–ด์ง„๋‹ค. (1 ≤ n(A), n(B) ≤ 500,000)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ์ง‘ํ•ฉ A์˜ ์›์†Œ๊ฐ€, ์…‹์งธ ์ค„์—๋Š” ์ง‘ํ•ฉ B์˜ ์›์†Œ๊ฐ€ ๋นˆ ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ฃผ์–ด์ง„๋‹ค. ํ•˜๋‚˜์˜ ์ง‘ํ•ฉ์˜ ์›์†Œ๋Š” 2,147,483,647 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ด๋ฉฐ, ํ•˜๋‚˜์˜ ์ง‘ํ•ฉ์— ์†ํ•˜๋Š” ๋ชจ๋“  ์›์†Œ์˜ ๊ฐ’์€ ๋‹ค๋ฅด๋‹ค. ์ถœ๋ ฅ ์ฒซ์งธ ์ค„์— ์ง‘ํ•ฉ A์—๋Š” ์†ํ•˜๋ฉด์„œ ์ง‘ํ•ฉ B์—๋Š” ์†ํ•˜์ง€ ์•Š๋Š” ์›์†Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ๋‹ค์Œ ์ค„์—๋Š” ๊ตฌ์ฒด์ ์ธ ์›์†Œ๋ฅผ ๋นˆ ์นธ์„ ์‚ฌ์ด์—..

๋ฐฑ์ค€ 2022.10.02

[Python] ๋ฐฑ์ค€ 1269

1269. ๋Œ€์นญ ์ฐจ์ง‘ํ•ฉ (Silver 4) ์ž์—ฐ์ˆ˜๋ฅผ ์›์†Œ๋กœ ๊ฐ–๋Š” ๊ณต์ง‘ํ•ฉ์ด ์•„๋‹Œ ๋‘ ์ง‘ํ•ฉ A์™€ B๊ฐ€ ์žˆ๋‹ค. ์ด๋•Œ, ๋‘ ์ง‘ํ•ฉ์˜ ๋Œ€์นญ ์ฐจ์ง‘ํ•ฉ์˜ ์›์†Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ๋‘ ์ง‘ํ•ฉ A์™€ B๊ฐ€ ์žˆ์„ ๋•Œ, (A-B)์™€ (B-A)์˜ ํ•ฉ์ง‘ํ•ฉ์„ A์™€ B์˜ ๋Œ€์นญ ์ฐจ์ง‘ํ•ฉ์ด๋ผ๊ณ  ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, A = { 1, 2, 4 } ์ด๊ณ , B = { 2, 3, 4, 5, 6 } ๋ผ๊ณ  ํ•  ๋•Œ, A-B = { 1 } ์ด๊ณ , B-A = { 3, 5, 6 } ์ด๋ฏ€๋กœ, ๋Œ€์นญ ์ฐจ์ง‘ํ•ฉ์˜ ์›์†Œ์˜ ๊ฐœ์ˆ˜๋Š” 1 + 3 = 4๊ฐœ์ด๋‹ค. ์ž…๋ ฅ ์ฒซ์งธ ์ค„์— ์ง‘ํ•ฉ A์˜ ์›์†Œ์˜ ๊ฐœ์ˆ˜์™€ ์ง‘ํ•ฉ B์˜ ์›์†Œ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋นˆ ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„์—๋Š” ์ง‘ํ•ฉ A์˜ ๋ชจ๋“  ์›์†Œ๊ฐ€, ์…‹์งธ ์ค„์—๋Š” ์ง‘ํ•ฉ B์˜ ๋ชจ๋“  ์›์†Œ๊ฐ€ ๋นˆ ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ๊ฐ๊ฐ ์ฃผ์–ด..

[Python] ๋ฐฑ์ค€ 1302

1302. ๋ฒ ์ŠคํŠธ์…€๋Ÿฌ (Silver 4) ๊น€ํ˜•ํƒ์€ ํƒ‘๋ฌธ๊ณ ์˜ ์ง์›์ด๋‹ค. ๊น€ํ˜•ํƒ์€ ๊ณ„์‚ฐ๋Œ€์—์„œ ๊ณ„์‚ฐ์„ ํ•˜๋Š” ์ง์›์ด๋‹ค. ๊น€ํ˜•ํƒ์€ ๊ทธ๋‚  ๊ทผ๋ฌด๊ฐ€ ๋๋‚œ ํ›„์—, ์˜ค๋Š˜ ํŒ๋งคํ•œ ์ฑ…์˜ ์ œ๋ชฉ์„ ๋ณด๋ฉด์„œ ๊ฐ€์žฅ ๋งŽ์ด ํŒ”๋ฆฐ ์ฑ…์˜ ์ œ๋ชฉ์„ ์น ํŒ์— ์จ๋†“๋Š” ์ผ๋„ ๊ฐ™์ด ํ•˜๊ณ  ์žˆ๋‹ค. ์˜ค๋Š˜ ํ•˜๋ฃจ ๋™์•ˆ ํŒ”๋ฆฐ ์ฑ…์˜ ์ œ๋ชฉ์ด ์ž…๋ ฅ์œผ๋กœ ๋“ค์–ด์™”์„ ๋•Œ, ๊ฐ€์žฅ ๋งŽ์ด ํŒ”๋ฆฐ ์ฑ…์˜ ์ œ๋ชฉ์„ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ์ž…๋ ฅ ์ฒซ์งธ ์ค„์— ์˜ค๋Š˜ ํ•˜๋ฃจ ๋™์•ˆ ํŒ”๋ฆฐ ์ฑ…์˜ ๊ฐœ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. ์ด ๊ฐ’์€ 1,000๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ์ž์—ฐ์ˆ˜์ด๋‹ค. ๋‘˜์งธ๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— ์ฑ…์˜ ์ œ๋ชฉ์ด ์ž…๋ ฅ์œผ๋กœ ๋“ค์–ด์˜จ๋‹ค. ์ฑ…์˜ ์ œ๋ชฉ์˜ ๊ธธ์ด๋Š” 50๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๊ณ , ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ์ถœ๋ ฅ ์ฒซ์งธ ์ค„์— ๊ฐ€์žฅ ๋งŽ์ด ํŒ”๋ฆฐ ์ฑ…์˜ ์ œ๋ชฉ์„ ์ถœ๋ ฅํ•œ๋‹ค. ๋งŒ์•ฝ ๊ฐ€์žฅ ๋งŽ์ด ํŒ”๋ฆฐ ์ฑ…์ด ์—ฌ๋Ÿฌ ๊ฐœ์ผ ๊ฒฝ์šฐ์—๋Š” ์‚ฌ์ „..

[Python] ๋ฐฑ์ค€ 1251

๋‹จ์–ด ๋‚˜๋ˆ„๊ธฐ (Silver 5) ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž๋กœ ์ด๋ฃจ์–ด์ง„ ๋‹จ์–ด๋ฅผ ๊ฐ€์ง€๊ณ  ์•„๋ž˜์™€ ๊ฐ™์€ ๊ณผ์ •์„ ํ•ด ๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ๋จผ์ € ๋‹จ์–ด์—์„œ ์ž„์˜์˜ ๋‘ ๋ถ€๋ถ„์„ ๊ณจ๋ผ์„œ ๋‹จ์–ด๋ฅผ ์ชผ๊ฐ ๋‹ค. ์ฆ‰, ์ฃผ์–ด์ง„ ๋‹จ์–ด๋ฅผ ์„ธ ๊ฐœ์˜ ๋” ์ž‘์€ ๋‹จ์–ด๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ด๋‹ค. ๊ฐ๊ฐ์€ ์ ์–ด๋„ ๊ธธ์ด๊ฐ€ 1 ์ด์ƒ์ธ ๋‹จ์–ด์—ฌ์•ผ ํ•œ๋‹ค. ์ด์ œ ์ด๋ ‡๊ฒŒ ๋‚˜๋ˆˆ ์„ธ ๊ฐœ์˜ ์ž‘์€ ๋‹จ์–ด๋“ค์„ ์•ž๋’ค๋ฅผ ๋’ค์ง‘๊ณ , ์ด๋ฅผ ๋‹ค์‹œ ์›๋ž˜์˜ ์ˆœ์„œ๋Œ€๋กœ ํ•ฉ์นœ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‹จ์–ด : arrested ์„ธ ๋‹จ์–ด๋กœ ๋‚˜๋ˆ„๊ธฐ : ar / rest / ed ๊ฐ๊ฐ ๋’ค์ง‘๊ธฐ : ra / tser / de ํ•ฉ์น˜๊ธฐ : ratserde ๋‹จ์–ด๊ฐ€ ์ฃผ์–ด์ง€๋ฉด, ์ด๋ ‡๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋‹จ์–ด ์ค‘์—์„œ ์‚ฌ์ „์ˆœ์œผ๋กœ ๊ฐ€์žฅ ์•ž์„œ๋Š” ๋‹จ์–ด๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ์ž…๋ ฅ ์ฒซ์งธ ์ค„์— ์˜์–ด ์†Œ๋ฌธ์ž๋กœ ๋œ ๋‹จ์–ด๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ธธ์ด๋Š” 3 ์ด์ƒ 50 ์ด..

[DreamHack System Hacking] rtld

๋ฌธ์ œ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. // gcc -o rtld rtld.c -fPIC -pie #include #include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(60); } void get_shell() { system("/bin/sh"); } int main() { long addr; long value; initialize(); printf("stdout: %p\n", stdout)..

[DreamHack System Hacking] __eviron

๋ฌธ์ œ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. // Name: environ.c // Compile: gcc -o environ environ.c #include #include #include #include #include void sig_handle() { exit(0); } void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); signal(SIGALRM, sig_handle); alarm(5); } void read_file() { char file_buf[4096]; int fd = open("/home/environ_exercise/flag", O_RDONLY); read(fd, file_buf, sizeof(file_buf) - 1); close(f..

[DreamHack System Hacking] Linux Library exploit > __environ

ํ”„๋กœ์„ธ์Šค๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ , ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ๋ถˆ๋Ÿฌ์™€ ์‚ฌ์šฉํ•œ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•จ์ˆ˜์—์„œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ํฌ์ธํ„ฐ์™€ ๊ด€๋ จ๋œ ๊ณต๊ฒฉ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ณ ์ž ํ•œ๋‹ค. ์ด์ „์— ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์–ด๋А ์˜์—ญ์— ์ €์žฅํ•˜๊ณ , ์–ด๋–ป๊ฒŒ ์ฐธ์กฐํ•˜๋Š”์ง€ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฅผ ๋จผ์ € ์•Œ์•„๋ณด์ž. ์‹ค์Šต ์ฝ”๋“œ๋А ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. // Name: environ.c // Compile: gcc -o environ environ.c #include #include #include #include #include void sig_handle() { exit(0); } void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); signal(SIGALRM, sig_handle); alarm(5); } vo..

[DreamHack System Hacking] Linux Library exploit > overwrite _rtld_global

ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋ฆฌํ„ด ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๋กœ๋”์—์„œ ๋‹ค์–‘ํ•œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด์„œ ์ •์ƒ ์ข…๋ฃŒํ•œ๋‹ค. ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ๋Š” ์˜์—ญ์— ์กด์žฌํ•˜๋Š” ํ•จ์ˆ˜ ํฌ์ธํ„ฐ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž„์˜ ์ฃผ์†Œ ์“ฐ๊ธฐ ์ทจ์•ฝ์ ์ด ์žˆ๋‹ค๋ฉด ํ•ด๋‹น ํฌ์ธํ„ฐ๋ฅผ ๋ฎ์–ด์จ์„œ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰ ํ๋ฆ„์„ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค. _rtld_global ๋ฎ์–ด์“ฐ๊ธฐ ์‹ค์Šต ์˜ˆ์ œ // Name: ow_rtld.c // Compile: gcc -o ow_rtld ow_rtld.c #include #include void init() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); } int main() { long addr; long data; int idx; init(); printf("stdout: %p\n", stdout); whil..

[DreamHack System Hacking] Linux Library exploit > _rtld_global

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜๋ฉด์„œ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•˜๋Š”์ง€ ์•Œ์•„๋ณด์ž. _rtld_global ์‹ค์Šต ์˜ˆ์ œ // Name: rtld.c // Compile: gcc -o rtld rtld.c int main() { return 0; } ๋‹ค์Œ์˜ ์ฝ”๋“œ๋Š” ์ข…๋ฃŒํ•˜๋Š” ๊ณผ์ •์„ ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•œ ์˜ˆ์ œ ์ฝ”๋“œ์ด๋‹ค. _rtld_global __Gl_exit ์•ž์„œ ์ปดํŒŒ์ผ ํ•œ ์˜ˆ์ œ ์ฝ”๋“œ๋Š” ๋ณ„๋‹ค๋ฅธ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•œ๋‹ค. ๋””๋ฒ„๊น…์„ ํ†ตํ•ด ๋” ์ž์„ธํžˆ ์•Œ์•„๋ณด์ž. main ํ•จ์ˆ˜ ๋‚ด์— ๋ฆฌํ„ดํ•˜๋Š” ๋ช…๋ น์–ด์— ๋ธŒ๋ ˆ์ดํฌ ํฌ์ธํŠธ๋ฅผ ์„ค์ •ํ•œ๋‹ค. step into (si)๋ฅผ ํ†ตํ•ด ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•œ๋‹ค. ๋””๋ฒ„๊น… ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•ด๋ณด๋ฉด, main ํ•จ์ˆ˜ ๋‚ด์—์„œ ๋ฆฌํ„ด ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๋•Œ ์Šคํƒ ์ตœ์ƒ๋‹จ์— ์žˆ๋Š” __libc_start_main+231 ..

[DreamHack System Hacking] master_canary

๋ฌธ์ œ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. // gcc -o master master.c -pthread #include #include #include #include #include char *global_buffer; void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(60); } void get_shell() { system("/bin/sh"); } void *thread_routine() { char buf[256]; global_buffer = b..