
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 ํจ์
์ต์ํ ๋ชจ์์ ํจ์์ด๋ค.
va_start ํจ์๋ฅผ ํตํด ๊ฐ๋ณ ์ธ์๋ฅผ ๋ถ๋ฌ์ค๊ณ , _arct_job_func ํจ์๋ฅผ ์ฌ์ฉํด 1๋ฒ์ ํด๋นํ๋ stdout ํ์ผ ์คํธ๋ฆผ์ ๊ฐ์ ธ์ sub_1400012B0 ํจ์๋ก ์ ๋ฌํ๋ค.
sub_1400012B0 ํจ์๋ฅผ ์ดํด๋ณด๋ ํจ์ ๋ด์์ _stdio_common_vfprintf ํจ์๋ฅผ ํธ์ถํ๋ค.
vfprintf ํจ์์ ํ์ผ ์คํธ๋ฆผ์ด stdout์ด๊ธฐ ๋๋ฌธ์ sub_1400013E0 ํจ์๋ printf์์ ์ถ์ธกํ ์ ์๋ค.
sub_1400013E0 ํจ์๊ฐ printf ํจ์์์ ์์์ผ๋ IDA์์ ์ฌ๋ณผ์ ์ด๋ฆ์ ๋ณ๊ฒฝํ๋ 'n' ๋จ์ถํค๋ฅผ ์ด์ฉํด ์ด๋ฆ์ printf๋ก ๋ณ๊ฒฝํ๋ค.
sub_140001440 ํจ์
sub_140001440 ํจ์๋ printfํจ์์ ๋น์ทํ ํํ์ ์ฝ๋ ํจํด์ ๊ฐ๊ณ ์๋ค.
ํ์ง๋ง _arct_job_func ํจ์๋ฅผ ํตํด ๊ฐ์ ธ์ค๋ ํ์ผ ์คํธ๋ฆผ์ด 0๋ฒ์ด๋ฏ๋ก stdin(ํ์ค ์ ๋ ฅ) ํ์ผ ์คํธ๋ฆผ์ ๊ฐ์ ธ์จ๋ค.
๋ค์์ sub_140001440 ํจ์ ๋ด์์ ์ ๋ฌ๋๋ ํจ์์ธ sub_140001300 ํจ์์ด๋ค.
์ฝ๋๋ฅผ ์ดํด๋ณด๋ฉด _stdio_common_vfscanf ํจ์๋ฅผ ํธ์ถํ๋ค.
๋ฐ๋ผ์ sub_140001440 ํจ์๋ scanf ํจ์๋ก ๋ณผ ์ ์๋ค.
sub_140001440 ํจ์์ ์ด๋ฆ๋ scanf๋ก ๋ฐ๊ฟ์ฃผ์๋ค.
์ ๋ ฅ๊ฐ ๊ฒ์ฌ ํจ์ ๋ถ์
๋ณธ๊ฒฉ์ ์ผ๋ก sub_140001000 ํจ์๋ฅผ ๋ถ์ํ๊ธฐ ์ ์
"Correct"๋ฅผ ์ถ๋ ฅํ๊ธฐ ์ํด์๋ sub_140001000ํจ์๊ฐ 1์ ๋ฆฌํดํด์ผ ํ๋ค๋ ๊ฑธ ๊ธฐ์ตํ์!
_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๋ฅผ ์ถ๋ ฅํ๋ค.
'DreamHack > Reversing (Dreamhack)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Reversing] rev-basic-0 dreamhack stage 5 (0) | 2022.05.19 |
---|---|
[Reversing] 4์ฃผ์ฐจ dreamhack stage 5 - (1) (0) | 2022.05.14 |
[Reversing] 3์ฃผ์ฐจ dreamhack stage 3 - (1) (0) | 2022.05.08 |
[Reversing] 3์ฃผ์ฐจ dreamhack stage 3 (0) | 2022.05.08 |
[Reversing] 2์ฃผ์ฐจ_dreamhack stage 3 - (1) (0) | 2022.04.30 |