-
lena 02강> Information Security/Reverse Engineering 2012. 3. 25. 01:27
lena 2번강의는 lena 강의 01과 같은파일을 CPU레지스터와 어셈블리언어, 진수변환을 이용하여 패치하는 방식이다.
마찬가지로 OllyDbg를 이용하여 열어본당
CreatFileA는 새로운 파일을 생성한다는 의미의 API함수.
파일이름은 "Keyfile.dat"이다. 이 파일이 우리가 원하는 라이센스를 취득할 수 있도록 해주는 키 파일이 되는것으로 보인다.
notepad를 이용하여 "Keyfile.dat" 을 생성해 본다.
ReadFile은 파일을 읽어오는 API함수.
F8을 눌러 진행한다.
EAX와 EAX를 TEST한다. 이때 EAX값은 1이다.
JNZ SHORT reverseM.004010B4
의 ZF가 0이면 빨간 화살표를 따라 점프한다.
F8을 눌러 진행한다.
ESI값은 0이다.
DWORD PTR DS:[402173]과 10h을 비교한다.
노란 선을 보아, DS:[402173]은 0인 것을 알 수 있다.
(주소값 402173 <<"Keyfile.dat"을 의미함)
여기에서 10h은 HEX값으로, 10진수로 변환시켜주어야 한다.
우리는 계산기를 이용하여 변환시켜줄 것이다.
이 결과, 16이다.
즉, DS:[402173]이 0이라는 것은
"Keyfile.dat"의 글자 수가 0이기 때문이고,
주소값의 글자 수와 16을 비교함으로써,
글자 수가 16이라는 것을 알 수 있다.
F8을 눌러 진행시킨다.
이번 점프문은 lena (01)에서 봤듯이,
"Keyfile is not valid, Sorry"라는 창을 띄우도록 한다.
우리가 원치 않는 값이므로,
이 부분으로 점프하지 않도록 바꾸어준다.
"JMP SHORT reverseM.004010F7"의 1인 SF를
0으로 변경시켜 줌으로써 점프를 방지할 수 있다.
DS : [EBX+40211A]의 값을 AL에 대입한다.
원래 AL값은 1이었으나, 0으로 바뀐다.
AL값과 0을 비교하는 구문.
이전의 JE를 패스하기 위하여, 아까와 같은 방법으로 잠시 패스해준다.
AL값과 47h을 비교하는 구문.
47h는 아스키값으로 "G"
AL값과 0이 Equal(같음)이 될 경우, ESI와 8을 비교하도록 점프한다.
ESI값은 0이다. ("KeyFIle.dat"의 글자 수가 0)
즉, KeyFile.dat이 요구하는 글자 수는 8이라는 것을 알 수 있다.
따라서 G가 8자리 이상이여야 하며, 총 16자리이어야 한다.
역시나 원치 않는 부분으로 점프하는 구문이므로 SF값을 0으로 변경해준다.
우리가 원하는 부분으로 가는 마지막 점프문으로 도달했다!
이제 이 파일의 분석을 끝내고
아까의 KeyFile.dat으로 다시 돌아와서,
를 저장한 뒤 ReverseMe파일을 실행시켜보면 된다.
728x90반응형'> Information Security > Reverse Engineering' 카테고리의 다른 글
lena 04강 (0) 2012.03.31 lena 03강 (0) 2012.03.25 lena 01강 (0) 2012.03.24 Crack Me 문제유형 (0) 2011.01.05 upx(실행파일압축) 가 packing 하는 원리 (0) 2010.11.17