๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ”ง ๋ฆฌ๋ฒ„์‹ฑ

Dreamhack ๋ฆฌ๋ฒ„์‹ฑ ๋ฌธ์ œํ’€์ด: rev-basic-3

by ๋ถˆํƒ€๋Š” ์ฐธ์ƒˆ 2023. 10. 31.

cmd๋กœ ์‹คํ–‰์‹œ์ผœ ์•„๋ฌด ์ˆซ์ž๋‚˜ ๋„ฃ์–ด๋ณธ๋‹ค.

๊ธฐ์ ์€ ์ผ์–ด๋‚˜์ง€ ์•Š์•˜๋‹ค..ใ…Žใ…Ž

IDA๋กœ ๋จผ์ € ์—ด์–ด์ค€๋‹ค.

๋ฌธ์ž์—ด์„ ์ž…๋ ฅ ๋ฐ›์•„ ํ•จ์ˆ˜๋กœ ์ฐธ๊ฑฐ์ง“์„ ํŒ๋ณ„ํ•ด Correct๋‚˜ Wrong์„ ์ถœ๋ ฅํ•œ๋‹ค.

sub_140001000 ํ•จ์ˆ˜๊ฐ€ ์–ด๋–ค ํ•จ์ˆ˜์ธ์ง€ ๋”๋ธ” ํด๋ฆญํ•ด ์•Œ์•„๋ณธ๋‹ค.

๋ณต์žกํ•ด๋ณด์ธ๋‹ค.

0x18๋ฒˆ ์–ด๋–ค ๋ฌธ์ž์—ด ๋น„๊ต๋ฅผ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

byte_140003000[i]๋Š” ์ž…๋ ฅํ•œ ๋ฌธ์ž์—ด์ธ ๊ฒƒ ๊ฐ™๊ณ 

์˜ค๋ฅธ์ชฝ์€ ์ข€ ๋” ๋ณด๊ธฐ ์ข‹๊ฒŒ ์ •๋ฆฌํ•˜๋ฉด ( i ^ ์ •๋‹ต๋ฌธ์ž์—ด[ i ]) + 2 * i ) ์ด๋‹ค. 

์ฆ‰ ์ •๋‹ต ๋ฌธ์ž์—ด์„ ์ˆœ์„œ๋Œ€๋กœ 0๋ฒˆ๋ถ€ํ„ฐ 23๋ฒˆ๊นŒ์ง€(0x18=24) ๋ฐ˜๋ณต ํšŸ์ˆ˜์ธ i์™€ XOR ์—ฐ์‚ฐํ•œ ๋’ค 2 * i๋ฅผ ๋”ํ•ด์ค€ ๊ฒƒ์ด input ๊ฐ’์ด์–ด์•ผ ํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค.

๋””๋ฒ„๊ฑฐ๋กœ๋„ ์—ด์–ด๋ณด์ž. ๋ฌธ์ž์—ด ์ฐธ์กฐ๋ฅผ ํ†ตํ•ด input ๋ฌธ์ž์—ด์ด ๋“ค์–ด๊ฐ„ ๋ถ€๋ถ„์„ ์ฐธ์กฐํ•˜๋ฉด ๋ฉ”์ธํ•จ์ˆ˜๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๋ฉ”์ธํ•จ์ˆ˜์—์„œ input ์ฒ˜๋ฆฌ ๋ถ€๋ถ„๊ณผ ๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ ๋ถ€๋ถ„ ํ•จ์ˆ˜๋Š” ๊ฑด๋„ˆ๋›ฐ๊ณ  ๊ทธ ๋‹ค์Œ ํ•จ์ˆ˜๋ฅผ ๋ณธ๋‹ค.

์ด ํ•จ์ˆ˜ ๋’ค์— test exe, exe๋ฅผ ํ•œ ๋’ค ๋ฐ”๋กœ je, ์ฆ‰ ๊ฐ™์œผ๋ฉด ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ”๋กœ ๋ฐ˜ํ™˜์‹œํ‚ค๋Š” ํ•จ์ˆ˜๋กœ ์—ฐ๊ฒฐ๋œ๋‹ค.

๊ทธ๋Ÿผ ๋งํ•˜๋‹ˆ๊นŒ test exe exe ์ง์ „ ํ•จ์ˆ˜์—์„œ ์Šน๋ถ€๋ฅผ ๋ด์•ผ ํ•œ๋‹ค.

๊ทธ ํ•จ์ˆ˜๋กœ ๋“ค์–ด๊ฐ€๋ณธ๋‹ค.

IDA์—์„œ ์‚ดํŽด๋ณธ ๊ฒŒ ๋งž๋‹ค๋Š” ๊ฑธ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

rax๋ฅผ ์ด์šฉํ•ด cmp ํ•˜๋ฉฐ 0x18๋ฒˆ ๋ฐ˜๋ณต ์ค‘ ๋ช‡ ๋ฒˆ์งธ์ธ์ง€ ์ฒดํฌํ•˜๊ณ  ์žˆ๊ณ 

rcx์— ์›ํ•˜๋Š” ๋‹ต์„ lea ์‹œํ‚จ ๋’ค ํ•˜๋‚˜์”ฉ ๊ณ„์‚ฐํ•˜์—ฌ ๋น„๊ตํ•˜๊ณ  ์žˆ๋‹ค.

rcx์— ๋“ค์–ด๊ฐ„ 7FF753193000์ด๋ผ๋Š” ์ฃผ์†Œ์— ๋ญ๊ฐ€ ๋“ค์–ด๊ฐ€ ์žˆ๋Š”์ง€ ๋ชจ๋ฅด๋‹ˆ ๋คํ”„๋กœ ๋”ฐ๋ผ๊ฐ€๋ณด์ž.

๋”ฐ๋ผ๊ฐ€๋ณด๋ฉด 49, 60, 67, ... 45๊นŒ์ง€ 16์ง„์ˆ˜๋กœ 24๊ฐœ์˜ ์ˆซ์ž๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋‹ค.

์ด์ œ ์ด๊ฑธ ๊ฒฐ๊ณผ ๊ฐ’์ด ๋˜๊ฒŒ ๊ณ„์‚ฐํ•œ ๋’ค ๋ฌธ์ž๋กœ(์•„์Šคํ‚ค๋กœ) ๋‚ด๋ณด๋‚ด๋ฉด ๋œ๋‹ค.

๊ทธ๋Ÿผ ์ด์ œ ์›ํ•˜๋Š” ๋‹ต์ด ๋ฌด์—‡์ธ์ง€ ๊ฑฐ๊พธ๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ•ด ์•Œ์•„๋‚ด ๋ณด์ž.

IDA์—์„œ ์‚ดํŽด๋ณธ ๊ฒƒ์ฒ˜๋Ÿผ 'input ๊ฐ’=( i ^ ์ •๋‹ต๋ฌธ์ž์—ด[ i ]) + 2 * i )'์ด๋ฏ€๋กœ

์ •๋‹ต๋ฌธ์ž์—ด์„ ์•Œ์•„๋‚ด๋ ค๋ฉด ๊ฑฐ๊พธ๋กœ ๊ณ„์‚ฐํ•ด์•ผ ํ•œ๋‹ค.

 i ^ ์ •๋‹ต๋ฌธ์ž์—ด[ i ] = input๊ฐ’ -  2 * i 

 ์ •๋‹ต๋ฌธ์ž์—ด[ i ] = (input๊ฐ’ -  2 * i ) ^ i (XOR์˜ XOR์„ ํ•˜๋ฉด ์›๋ž˜๋กœ ๋Œ์•„๊ฐ€๊ธฐ ๋•Œ๋ฌธ)

์œ„์˜ ์‹์ฒ˜๋Ÿผ ๋˜๋ฏ€๋กœ

C++์„ ์‚ฌ์šฉํ•ด ๋ฌธ์ž์—ด์— 7FF753193000์— ๋“ค์–ด์žˆ๋Š” ์ˆซ์ž๋“ค 24๊ฐœ๋ฅผ ์ž…๋ ฅํ•ด์ฃผ๊ณ 

์ •๋‹ต์ด ๋  ๊ฒฐ๊ณผ๊ฐ’์„ ์ถœ๋ ฅ์‹œ์ผฐ๋‹ค.

์ •๋‹ต ๋ฌธ์ž์—ด์ด ๊นœ์ฐํ•˜๋‹ค.

cmd ์ฐฝ์— ์ž…๋ ฅํ•ด์ฃผ๋ฉด

Correct~๏ผˆ๏ฟฃ๏ธถ๏ฟฃ๏ผ‰โ†—ใ€€