๋ฌธ์ ๋ ์ฝ๋์์ง ์ฌ์ดํธ์์ ๋ค์ด๋ฐ์ ์ ์์ต๋๋ค.
๋ชฉํ๊ฐ : Name ์ด CodeEngn ์ผ ๋ Serial ๊ฐ
์คํ์ ์์ผ๋ด ์๋ค.
Name ๊ฐ๊ณผ ์ผ๋ จ์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์์ฑ๋ Serial ๊ฐ์ ๋น๊ตํ ๋ค ๋ถ๊ธฐํ๋ ์ ํ์ ํ๋ก๊ทธ๋จ์ ๋๋ค.
๋๋ฒ๊ฑฐ๋ก ์ด์ด๋ณด๋ pushad ๋ช ๋ น์ด ๋์ ๋๋๋ค.
PEid ๋ก ํ์ธ ํด ๋ด ๋๋ค.
UPX ํจํน์ด ๋์ด์์ต๋๋ค.
[Ctrl + F] ํค๋ก popad ๋ช ๋ น์ ๊ฒ์ํ ๋ค ๊ทธ ์ฃผ์๋ก ์ด๋ํฉ๋๋ค.
OEP ๋ก JMP ํ๋ ๋ช ๋ น์ด ๋ณด์ด์๋์?
์ ๊ธฐ์ BP ๋ฅผ ๊ฑธ์ด์ค ๋ค [F9] + [F8] ํค๋ก ์๋ณธ ์ฝ๋๊ฐ ์์ถ ํด์ ๋ ๊ณณ์ผ๋ก ์ด๋ํฉ๋๋ค.
์ด๋ ๊ฒ ๋ง์ด์ฃ .
[Ctrl + A] ํค๋ก ๋ชจ๋ ๋ถ์์ ํ๊ฒ ์ต๋๋ค.
์ค๋ฅธ์ชฝ ์๋จ ๋ฐ์ Az ์์ด์ฝ์ ํด๋ฆญํด ๋ฌธ์์ด์ ์ฐพ์๋ด ์๋ค.
๋งจ ๋ง์ง๋ง ์ค์ ์ฐ๋ฆฌ๊ฐ ๋ณด์๋ ์คํจ ๋ฌธ์์ด์ด ์์ต๋๋ค.
์ด ์ฃผ์๋ก ์ด๋ํด์ค๋๋ค.
๋ฐ๋ก ์์ ์ฑ๊ณต ๋ฌธ์์ด์ด ์๊ณ , ๊ทธ ์์ ์กฐ๊ฑด๋ถ๊ธฐ๋ฌธ์ด ์์ต๋๋ค.
์ jne ๋ช ๋ น์ด ์คํ๋๋ฉด ์คํจ ๋ฌธ์์ด ๋ฐ๋ก ์๋ก ์ด๋ํ๋ eax ์ esi ๊ฐ์ด ๋ค๋ฅด๋ฉด ์คํจํ ๋ฏ ํฉ๋๋ค.
eax ๋ ๋ฆฌํด๊ฐ์ ๋ด๋ ๋ ์ง์คํฐ์์ฃ ?
๋ฐ๋ก ์์์ ํธ์ถ๋ ํจ์์ ์ฃผ๋ชฉํฉ์๋ค.
ํจ์ ํธ์ถ ๋ฐ pop esi ์ bp ๋ฅผ ๊ฑธ๊ณ , ํจ์์ ๋ฐํ ๊ฐ์ ๊ด์ฐฐํ๋๋ก ํ๊ฒ ์ต๋๋ค.
Name ๊ฐ์ผ๋ก CodeEngn ์, Serial ๊ฐ์ผ๋ก 1234 ๋ฅผ ๋ฃ์์ต๋๋ค.
Check ๋ฅผ ๋๋ฌ์ค๋๋ค.
eax ๋ ์ง์คํฐ์ ๊ฐ์ด 0x4D2 ์ ๋๋ค.
์ด๋ฅผ 10์ง์๋ก ๋ณํํ๋ฉด ์ฐ๋ฆฌ๊ฐ ์ ๋ ฅํ๋ 1234๊ฐ ๋์ต๋๋ค.
์ ํจ์์ ๋ฐํ ๊ฐ์ด ์ฐ๋ฆฌ๊ฐ ์ ๋ ฅํ ๊ฐ์ ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ฌ์ฉ์ ์ ๋ ฅ๊ณผ ํจ๊ป ๋น๊ต๋๋ esi ๊ฐ์ด Serial ๊ฐ์ ๊ฐ์ง๊ณ ์๊ฒ ๋ค์.
์ค์ ๋ก ๋ฌธ์์ด ๋น๊ต ํจ์ ์์ Name ๊ฐ์ ์ด์ฉํด esi ๊ฐ์ ๊ฐ๊ณตํ๋ (์๋ฆฌ์ผ์ ์์ฑํ๋) ๊ณผ์ ์ด ์์ต๋๋ค.
์ง๊ธ์ ์๋ฆฌ์ผ ์์ฑ ๋ฃจํด์ ์ง์ ๋ถ์ํ๋ ๊ฒ๋ณด๋ค ๋น ๋ฅธ ๋ฐฉ๋ฒ์ ์ด์ฉํ๊ฒ ์ต๋๋ค.
cmp eax, esi ๋ช ๋ น์ BP ๋ฅผ ๊ฑธ์ด์ค ๋ค [F9] ํค๋ก ์คํํด์ค๋๋ค.
์ฐ๋ฆฌ๋ CodeEngn ์ด๋ผ๋ ์ด๋ฆ์ ์ํด ์์ฑ๋ Serial ๊ฐ์ ๊ตฌํด์ผ ํ๋, Name ์ CodeEngn ์ผ๋ก ์ ๋ ฅํ๊ฒ ์ต๋๋ค.
Serial ๊ฐ์๋ ์๋ฌด ์ซ์๋ ๋ฃ์ด์ฃผ์ธ์.
์ด๋ ๊ฒ esi ๊ฐ 0x129A1 ์ด๋ผ๋ ๊ฐ์ ๊ฐ์ง๊ฒ ๋์์ต๋๋ค.
์ด๋ฅผ 10์ง์๋ก ๋ณํํ๋ฉด 76193 ์ ๋๋ค.
์ด ๊ฐ์ด CodeEngn ์ด๋ผ๋ ์ด๋ฆ์ ๋ง๋ ์๋ฆฌ์ผ ๊ฐ์ด ๋ ๊ฒ๋๋ค.
ํ๋ก๊ทธ๋จ์ ์ฌ์์ํด Name ์๋ CodeEngn ์, Serial ์๋ 76193 ์ ์ ๋ ฅํฉ๋๋ค.
Check ๋ฒํผ์ ๋๋ฌ์ฃผ๋ฉด ์ฑ๊ณต ๋ฉ์ธ์ง๊ฐ ์ถ๋ ฅ๋ฉ๋๋ค.
๋ฐ๋ผ์ ์ด ๋ฌธ์ ์ ์ ๋ต์ 76193 ์ ๋๋ค.
์๋ฆฌ์ผ ๋ฃจํด์ ๋ถ์ํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
์ด๋ ๊ฒ ์ด๋ฆ์ ์ด์ฉํด ๋ฐ๋ณตํ๋ฉด์ ์๋ฆฌ์ผ์ ์์ฑํ๋ ๊ฒ์ ์ ์ ์์ต๋๋ค.
ecx์ strlen ํจ์์ ๋ฐํ ๊ฐ์ ์ฎ๊ธฐ๊ณ , ์ด๋ฅผ ๊ฐ์์ํค๋ฉด์ ๋ฐ๋ณต๋ฌธ์ ์นด์ดํฐ๋ก ์ฌ์ฉํฉ๋๋ค.
eax๋ name ๊ฐ์ ์ด์ฉํ ๋, name ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ก ์ฌ์ฉ๋ฉ๋๋ค.
edx์ ebx๋ฅผ ์ด์ฉํด ์ฐ์ฐ์ ๊ฑฐ์น๊ณ , ์ต์ข ์์ฑ๋ ์๋ฆฌ์ผ ๊ฐ์ esi์ ๋ด์์ค๋๋ค
์ด ๊ณผ์ ์ ์๋์ C ์ฝ๋๋ก ๋ํ๋ด์์ต๋๋ค.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int sub_4011E2(char *arg){
int esi, ecx, eax;
esi = 0;
ecx = strlen(arg);
eax = 0;
for(ecx; ecx>0; ecx--, eax++){
esi = (arg[eax]>>1)+arg[eax]*arg[eax]+esi-arg[eax];
}
}
int main(void){
char *name = (char*)malloc(sizeof(char)*256);
int serial;
gets(name);
serial = sub_4011E2(name);
printf("serial is : %d\n\n", serial);
free(name);
return 0;
}
์คํํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
์ ์์ ์ผ๋ก ์๋ํฉ๋๋ค.
Name ์ด CodeEngn ์ผ ๋ Serial ๊ฐ : 76193
'reverse engineering > CodeEngn' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[CodeEngn] Basic RCE L16 ๋ฌธ์ ํ์ด (0) | 2020.12.17 |
---|---|
[CodeEngn] Basic RCE L15 ๋ฌธ์ ํ์ด (2) | 2020.12.15 |
[CodeEngn] Basic RCE L13 ๋ฌธ์ ํ์ด (2) | 2020.12.13 |
[CodeEngn] Basic RCE L12 ๋ฌธ์ ํ์ด (0) | 2020.12.12 |
[CodeEngn] Basic RCE L11 ๋ฌธ์ ํ์ด (2) | 2020.12.11 |