ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • lena tutorials - 01. && 02.
    IT/리버싱 2020. 7. 31. 18:41

    올리디버거보다는 x64dbg가 편해서 x64dbg를 사용하였다.

    01. Olly + assembler + patching a basic reverseme

    02. Keyfiling the reverseme + assembler

    해당문제는 1번 2번이 같은 문제이다.

     


     

    실행 화면

     

     

    제목 : Key File ReverseMe

    내용 : Evaluation period out of date. Puchase new license.

     

     

    Key 파일로 새로 인증하라는 구문이 있다.

     


     

    strings 값

     

     

    You really did it! Congratz !!! 가 뜨게 해야된다.

     

    해당 주소는 40120C 

     

     


     

    순서도를 그리면

     

    GetModuleHandleA 

     

    LoadIconA

     

    LoadCursorA

     

    CreateFileA ( Keyfile.dat )

     

    MessageBoxA

     

    ExitProcess

     

    순서대로 들어간다.

     


     

    createFileA() 함수를 검색해보았고 함수를 열거나 만드는 함수이다.

     

    그래서 Keyfile.dat 을 만들었다.

     

    데이터파일의 값과 비교하여 key를 본다.

     

     


     

     

    invalid값으로 향하는 구문이 총 3개있는것을 알수있다.

    해당구문으로 가는 비교구문또한 3개가 된다.

     

    1.  test eax,eax

    2. cmp [402173], 10

    3. cmp al, 0  과 cmp al,47

     


     

    1. test eax, eax

    EAX는 파일의 유무값이다.

    ReadFile() API를 찾아보면 hFile 변수 값이라는 것을 알수있다.

    파일안의 입력값을 읽는다.

    입력값을 $data data 로 주었다. 그랬더니 해결되었다.

     

     


     

    1. cmp [402173], 10

    여기서 좀 해맸다. 

     

    맨처음에는 오버플로우로 인줄알고

     402173 에 대한 값을 10으로 만들면 되는 줄 알았다.

     

    그렇지만 최대 갯수로 46? 정도 까지 읽혔다..

    한참을 보던중 ReadFile함수에서 402173 을 push 하는것을 발견하고

     

    ReadFile() 함수를 docs로 찾아보았다.

    lpNumberOfBytesRead 값인갓을 확인하고 A * 10 을 입력했으나

     

    [402173] = 0A 가 되는것을보고 바로 A * 16으로 바꾸었더니 해결되었다.

     


     

    1. cmp al, 0 과 cmp al,47

    0 은 띄어쓰기나 파일 끝부분의 경우에 사용되는것같다고생각했다.

    A * 16 을 KeyFile.dat 에 입력하였으니 이부분은 바로 넘어갔다.

     

    cmp al,47

     

    47 의 아스키는 'G' 이므로 G * 16 을 입력했다.

     


     

    해결!

     

     

     

     

     

     

     

     

     

     

Designed by Tistory.