ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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
Designed by Tistory.