Hack The Planet

๋ฐ˜๊ฐ‘์Šต๋‹ˆ๋‹ค, cyalume์˜ ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.

reverse engineering/CodeEngn

[CodeEngn] Basic RCE L17 ๋ฌธ์ œํ’€์ด

cyalume 2020. 12. 18. 12:51

๋ฌธ์ œ ํŒŒ์ผ >> ์ฝ”๋“œ์—”์ง„ ์‚ฌ์ดํŠธ

 

๋ชฉํ‘œ๊ฐ’ : Key ๊ฐ’์ด BEDA-2F56-BC4F4368-8A71-870B ์ผ๋•Œ Name์˜ MD5 ํ•ด์‰ฌ๊ฐ’

 

์‹คํ–‰์„ ์‹œ์ผœ๋ด…๋‹ˆ๋‹ค.

 

 

Name ๊ฐ’์€ ํ•œ์ž๋ฆฌ๋ผ๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋””๋ฒ„๊ฑฐ๋กœ ์ด ๋ถ€๋ถ„์„ ์ˆ˜์ •ํ•ด์ค์‹œ๋‹ค.

 

 

์šฐํด๋ฆญ -> All referenced text strings -> 'Please Enter More Chars...' ๋ฌธ์ž์—ด์„ ์ฐพ์•„๊ฐ€ ์ค๋‹ˆ๋‹ค.

์œ„์— cmp eax, 3 ๋ผ๋Š” ๋ฌธ์ž์—ด ๊ธธ์ด ๋น„๊ต ๋ช…๋ น์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ cmp eax, 1 ๋กœ ๋ฐ”๊ฟ”์ฃผ๊ณ , ์šฐํด๋ฆญ -> Copy to Executable -> Save file ์œผ๋กœ ์ €์žฅํ•œ ๋’ค ์ˆ˜์ •๋œ ํŒŒ์ผ์„ ์—ด์–ด์ค๋‹ˆ๋‹ค.

 

 

์„ฑ๊ณต์‹œ ์ถœ๋ ฅ๋ ๋“ฏํ•œ ๋ฌธ์ž์—ด์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋™ํ•ด์„œ ํ™•์ธ์„ ํ•ด ๋ณธ ๊ฒฐ๊ณผ JNZ ๋ช…๋ น์ด ๋ถ„๊ธฐ์ ์ž…๋‹ˆ๋‹ค.

๋ฐ”๋กœ ์œ„์—์„œ ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜๋ฅผ ๋ถ„์„ํ•ด๋ด…์‹œ๋‹ค.

 

 

EAX์™€ EDX๋ฅผ ๋น„๊ตํ•œ ๋’ค ๊ฐ™์œผ๋ฉด ๋ฐ˜ํ™˜ ๊ฐ’์„ 0์œผ๋กœ ๋งŒ๋“ค๊ณ  ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค.

๋ ˆ์ง€์Šคํ„ฐ ์ฐฝ์—์„œ EAX ๊ฐ’์€ ์šฐ๋ฆฌ๊ฐ€ ์ž…๋ ฅํ•œ Serial, EDX ๊ฐ’์€ ์ƒ์„ฑ๋œ ์‹œ๋ฆฌ์–ผ์ด๋ผ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

์ด๋ ‡๊ฒŒ ๋ง์ด์ฃ .

์ด ํ•จ์ˆ˜๋Š” ๋ฌธ์ž์—ด ๋น„๊ต ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ๊ทธ ์œ„์—์„œ ํ˜ธ์ถœ๋œ ํ•จ์ˆ˜๊ฐ€ ์‹œ๋ฆฌ์–ผ์„ ์ƒ์„ฑํ•œ๋‹ค๊ณ  ์ถ”์ธกํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

45B850 ํ•จ์ˆ˜์— stepinํ•ด ๋ถ„์„ํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

์ด์™€ ๊ฐ™์€ ์‹œ๋ฆฌ์–ผ ์ƒ์„ฑ ๋ฃจํ‹ด์„ ๊ฑฐ์นฉ๋‹ˆ๋‹ค.

ESI ๋ฅผ ๊ฐ€๊ณตํ•œ ๋’ค ๊ทธ ๊ฐ’์„ EDX ์— ์˜ฎ๊ฒจ์ฃผ๋Š”๊ตฐ์š”.

ESI ๊ฐ’์— 0๋ถ€ํ„ฐ z๊นŒ์ง€ ํ•œ ๊ธ€์ž์”ฉ ๋Œ€์ž…ํ•ด ์‹œ๋ฆฌ์–ผ์„ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•  ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

์•„์Šคํ‚ค์ฝ”๋“œ๋กœ ์ˆซ์ž 0 ์€ 0x30์„, z ๋Š” 0x7A์„ ๋‚˜ํƒ€๋‚ด๋‹ˆ ์ด ๋ฒ”์œ„ ๋‚ด์—์„œ ์ฐจ๋ก€๋Œ€๋กœ ๋Œ€์ž…ํ•ด BEDA ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์‹œ๋ฆฌ์–ผ ๊ฐ’์„ ๊ฐ€์ง€๋Š” ๋ฌธ์ž๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

#include <stdio.h>

int main(void)
{
	int ESI = 0, EDX = 0;

	for (int i = 0x30; i <= 0x7A; i++) { //from 0 to z
		
		ESI = i * 0x772; //IMUL ESI, ESI, 0x772
		EDX = ESI; //MOV EDX, ESI
		EDX *= ESI; //IMUL EDX, ESI
		ESI += EDX; //ADD ESI, EDX
		ESI *= 0x474; //IMUL ESI, ESI, 0x474
		ESI += ESI; //ADD ESI, ESI
        	EDX = ESI;
		
		printf("%c >> %X\n", i, EDX); //์ƒ์„ฑ๋œ ์‹œ๋ฆฌ์–ผ ์ถœ๋ ฅ
	}
	return 0;
}

 

 

OR ESI, ESI ๋ฅผ ์ƒ๋žตํ•œ ์ด์œ ๋Š” ์—ฐ์‚ฐ์˜ ๊ฒฐ๊ณผ๋กœ ESI ๊ฐ’์ด ๋ณ€ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

์ด๋ฅผ ์‹คํ–‰ํ•ด ๋ด…์‹œ๋‹ค.

 

 

์ด๋ ‡๊ฒŒ ๋Œ€๋ฌธ์ž F๊ฐ€ BEDA๋กœ ์‹œ์ž‘ํ•˜๋Š” ์‹œ๋ฆฌ์–ผ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

์•„๋งˆ Name ๊ฐ’์€ F ๊ฐ€ ๋˜๊ฒ ๋„ค์š”.

ํ•œ ๋ฒˆ ์‹œ๋ฆฌ์–ผ ๊ฐ’๊ณผ ํ•จ๊ป˜ ๋„ฃ์–ด์„œ ํ™•์ธํ•ด๋ณผ๊นŒ์š”?

 

 

์ด๋ ‡๊ฒŒ Name ๊ฐ’์ด F๊ฐ€ ๋งž๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ F์˜ MD5 ํ•ด์‹œ๊ฐ’์„ ๊ตฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ„๋‹จํ•˜๊ฒŒ ์˜จ๋ผ์ธ MD5 ํ•ด์‹œ ์ƒ์„ฑ๊ธฐ๋ฅผ ์ด์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

 

 

F์˜ MD5 ํ•ด์‹œ ๊ฐ’์€ 800618943025315F869E4E1F09471012 ์ž…๋‹ˆ๋‹ค.
์ด๋ฅผ Auth ์— ์ธ์ฆํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.