Exercise: rev-basic-1

 

1. ์ •์  ๋ถ„์„

 

main ํ•จ์ˆ˜ ์ฐพ๊ธฐ

ํ”„๋กœ๊ทธ๋žจ์ด ๋กœ๋“œ ๋˜๋ฉด mainํ•จ์ˆ˜๋ฅผ ์ฐพ์ง€ ์•Š์•„๋„ IDA๊ฐ€ ์Šค์Šค๋กœ ํŒ๋‹จํ•œ mainํ•จ์ˆ˜๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.

IDA๊ฐ€ ์•„๋ฌด๋Ÿฐ ์ •๋ณด ์—†์ด mainํ•จ์ˆ˜๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์—ˆ๋˜ ์ด์œ ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๋ณ„๋กœ mainํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ํŒจํ„ด์ด ์ผ์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

 

 

 

F5ํ‚ค๋ฅผ ๋ˆŒ๋Ÿฌ์„œ ๋””์ปดํŒŒ์ผ ๋œ mainํ•จ์ˆ˜๋ฅผ ๋ถ„์„ํ•ด๋ณด์ž.

char v4[256]; // [rsp+20h] [rbp-118h] BYREF
memset(v4, 0, sizeof(v4));

๋จผ์ € v4๋ผ๋Š” 256 ๋ฐ”์ดํŠธ์˜ char๋ฐฐ์—ด์„ 0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.

 

 

sub_1400013E0("Input : ", argv, envp);
sub_140001440("%256s", v4);

sub_1400013E0 ํ•จ์ˆ˜์™€ sub_140001440 ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š”๋ฐ, ์ด๋•Œ ์ธ์ž์— ๊ฐ๊ฐ "Input : ", "%256s" ๋ฌธ์ž์—ด์ด ๋“ค์–ด๊ฐ„๋‹ค.

 

if ( (unsigned int)sub_140001000(v4) )
    puts("Correct");
else
    puts("Wrong");

๋งˆ์ง€๋ง‰์œผ๋กœ v4 ๋ฐฐ์—ด์„ sub_140001000 ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ์ „๋‹ฌํ•ด ๋ฐ˜ํ™˜๊ฐ’์ด ์žˆ๋‹ค๋ฉด "Correct"๋ฅผ, ์•„๋‹ˆ๋ผ๋ฉด "Wrong" ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

 

 

main ๋‚ด๋ถ€ ํ•จ์ˆ˜ ๋ถ„์„

 

sub_1400013E0 ํ•จ์ˆ˜

sub_1400013E0 ํ•จ์ˆ˜

์ต์ˆ™ํ•œ ๋ชจ์–‘์˜ ํ•จ์ˆ˜์ด๋‹ค.

va_start ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๊ฐ€๋ณ€ ์ธ์ž๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ณ , _arct_job_func ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด 1๋ฒˆ์— ํ•ด๋‹นํ•˜๋Š” stdout ํŒŒ์ผ ์ŠคํŠธ๋ฆผ์„ ๊ฐ€์ ธ์™€ sub_1400012B0 ํ•จ์ˆ˜๋กœ ์ „๋‹ฌํ•œ๋‹ค.

 

 

sub_1400012B0 ํ•จ์ˆ˜

sub_1400012B0 ํ•จ์ˆ˜๋ฅผ ์‚ดํŽด๋ณด๋‹ˆ ํ•จ์ˆ˜ ๋‚ด์—์„œ _stdio_common_vfprintf ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

vfprintf ํ•จ์ˆ˜์˜ ํŒŒ์ผ ์ŠคํŠธ๋ฆผ์ด stdout์ด๊ธฐ ๋•Œ๋ฌธ์— sub_1400013E0 ํ•จ์ˆ˜๋Š” printf์ž„์„ ์ถ”์ธกํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

ํ•จ์ˆ˜ ์ด๋ฆ„ ๋ณ€๊ฒฝ

 

sub_1400013E0 ํ•จ์ˆ˜๊ฐ€ printf ํ•จ์ˆ˜์ž„์„ ์•Œ์•˜์œผ๋‹ˆ  IDA์—์„œ ์‹ฌ๋ณผ์˜ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•˜๋Š” 'n' ๋‹จ์ถ•ํ‚ค๋ฅผ ์ด์šฉํ•ด ์ด๋ฆ„์„ printf๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.

 

 

 

sub_140001440 ํ•จ์ˆ˜

sub_140001440 ํ•จ์ˆ˜

sub_140001440 ํ•จ์ˆ˜๋„ printfํ•จ์ˆ˜์™€ ๋น„์Šทํ•œ ํ˜•ํƒœ์˜ ์ฝ”๋“œ ํŒจํ„ด์„ ๊ฐ–๊ณ  ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ _arct_job_func ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๊ฐ€์ ธ์˜ค๋Š” ํŒŒ์ผ ์ŠคํŠธ๋ฆผ์ด 0๋ฒˆ์ด๋ฏ€๋กœ stdin(ํ‘œ์ค€ ์ž…๋ ฅ) ํŒŒ์ผ ์ŠคํŠธ๋ฆผ์„ ๊ฐ€์ ธ์˜จ๋‹ค.

 

 

sub_140001300 ํ•จ์ˆ˜

๋‹ค์Œ์€ sub_140001440 ํ•จ์ˆ˜ ๋‚ด์—์„œ ์ „๋‹ฌ๋˜๋Š” ํ•จ์ˆ˜์ธ sub_140001300 ํ•จ์ˆ˜์ด๋‹ค.

์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด _stdio_common_vfscanf ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. 

๋”ฐ๋ผ์„œ sub_140001440 ํ•จ์ˆ˜๋Š” scanf ํ•จ์ˆ˜๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

sub_140001440 ํ•จ์ˆ˜์˜ ์ด๋ฆ„๋„ scanf๋กœ ๋ฐ”๊ฟ”์ฃผ์—ˆ๋‹ค.

 

 

 

 

 

 

์ž…๋ ฅ๊ฐ’ ๊ฒ€์‚ฌ ํ•จ์ˆ˜ ๋ถ„์„

 

๋ณธ๊ฒฉ์ ์œผ๋กœ sub_140001000 ํ•จ์ˆ˜๋ฅผ ๋ถ„์„ํ•˜๊ธฐ ์ „์—

"Correct"๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” sub_140001000ํ•จ์ˆ˜๊ฐ€ 1์„ ๋ฆฌํ„ดํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฑธ ๊ธฐ์–ตํ•˜์ž!

sub_140001000 ํ•จ์ˆ˜

 

_BOOL8 __fastcall sub_140001000(_BYTE *a1)

ํ•จ์ˆ˜๋ฅผ ์‚ดํŽด๋ณด๋ฉด a1 ์ธ์ž๋Š” ์ž…๋ ฅํ•œ ๊ฐ’์ด๊ณ , 1๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ๊ฐ’์„ ๋น„๊ตํ•œ๋‹ค.

 

 

๊ทธ ๋‹ค์Œ ๋‹ค์ˆ˜์˜ ์กฐ๊ฑด๋ฌธ์ด ์กด์žฌํ•˜๋Š”๋ฐ, ๋ฌธ์ž์—ด์˜ ๊ฐ ์ธ๋ฑ์Šค ๋ณ„๋กœ ์ •ํ•ด์ง„ ์ˆซ์ž์™€ ๋‹ค๋ฅด๋‹ค๋ฉด 0์„ ๋ฆฌํ„ดํ•˜๊ณ , ๋งˆ์ง€๋ง‰ ์กฐ๊ฑด์ธ ์ž…๋ ฅ๊ฐ’์˜ 21๋ฒˆ์งธ ์ธ๋ฑ์Šค๊ฐ€ 0์ด๋ผ๋ฉด 1์„ ๋ฆฌํ„ดํ•œ๋‹ค.

์ฆ‰ ์ž…๋ ฅํ•ด์•ผ ํ•˜๋Š” ๋ฌธ์ž์—ด์˜ ๊ฐ ์ธ๋ฑ์Šค ๊ฐ’์ด ์ •ํ•ด์ ธ ์žˆ๊ณ  ์ •ํ•ด์ง„ ๊ฐ’๊ณผ ๋ชจ๋‘ ์ผ์น˜ํ•œ๋‹ค๋ฉด "Correct"๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

 

 

 

 

์ž…๋ ฅ๊ฐ’ ๊ฒ€์‚ฌ ํ•จ์ˆ˜ ๋ถ„์„

IDA์—์„œ ์ˆซ์ž๋ฅผ ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋‹จ์ถ•ํ‚ค๋Š” 'r'์ด๋‹ค.

๊ฐ ์ˆซ์ž์— ์ปค์„œ๋ฅผ ์˜ฌ๋ฆฌ๊ณ  'r'์„ ๋ˆ„๋ฅด๋ฉด ์ˆซ์ž์—์„œ ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€ํ™˜ํ•ด์ฃผ์—ˆ๋‹ค.

 

๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•œ ๋ชจ์Šต

๊ฐ๊ฐ์˜ ์ˆซ์ž๋ฅผ ๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•ด๋ณด๋‹ˆ Compar3_the_ch4ract3r ์ด๋ผ๋Š” ๋ฌธ์ž์—ด์„ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๋ฌธ์ž์—ด์˜ ๋์€ NULL๋ฌธ์ž๋กœ 0์„ ์˜๋ฏธํ•œ๋‹ค.

๋”ฐ๋ผ์„œ ๋งˆ์ง€๋ง‰์— ๋น„๊ตํ•˜๋Š” 0์€ ์ง์ ‘ ์ž…๋ ฅํ•˜์ง€ ์•Š์•„๋„ ์ž๋™์œผ๋กœ ๋“ค์–ด๊ฐ€ ํ•จ์ˆ˜์˜ ์กฐ๊ฑด์„ ๋ชจ๋‘  ๋งŒ์กฑํ•˜๊ฒŒ ๋œ๋‹ค.

 

 

 


 

 

2. ํ”Œ๋ž˜๊ทธ ์ธ์ฆ

๋งฅ๋ถ์—์„  ์‹คํ–‰์ด ๋ถˆ๊ฐ€ํ•ด์„œ ์‚ฌ์ดํŠธ ๋‚ด์˜ ์‹คํ–‰ ํ™”๋ฉด์„ ์‚ฌ์šฉํ–ˆ๋‹ค.

์ž…๋ ฅ๊ฐ’์ด ๋งž๋Š”์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•ด์„œ Compar3_the_ch4ract3r ์ด๋ผ๋Š” ๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ•ด๋ดค๋”๋‹ˆ ๋ถ„์„ํ•œ ๊ฒฐ๊ณผ๋Œ€๋กœ Correct๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

 

"DH{}" ํฌ๋งท์— ๋งž์ถฐ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ž…๋ ฅํ–ˆ๋”๋‹ˆ ์„ฑ๊ณต์ ์œผ๋กœ ์ œ์ถœํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

 

๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค!