Hack The Planet

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

reverse engineering/CodeEngn

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

cyalume 2020. 12. 14. 20:30

๋ฌธ์ œ๋Š” ์ฝ”๋“œ์—”์ง„ ์‚ฌ์ดํŠธ์—์„œ ๋‹ค์šด๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋ชฉํ‘œ๊ฐ’ : 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