• [Reversing.kr] 5_Replace.exe

    2020. 2. 4.

    by. ugonfor

    DialogFunc 함수

    여기서 보면, 함수가 특별한 점이 있는 데, 함수의 주소를 0xC39000C6으로 바꾸는 것과, 0x6E8로 바꾸어 버리는 부분이다. 그런데 0xC39000c6의 경우 어셈블리 코드로는 eax가 가리키는 곳을 0x90[nop]로 바꾸고 ret하는 것이다. 

    그리고 저 hmmm___가 0x6e8로 바꾸는 부분은 이후에 hmmm함수가 실행되거나 하지 않기에 신경쓸 필요 없을거 같다.

     

    아마도, 바꾼거를 가리기 위해서 만들어주는 부분인듯

     

     

    Graph

    그래프로 보면 이렇게 되어있는 데, 이부분에서 

    0x401071을 nop로 바꾸어 버리면 될거같다. 

     

    즉 hmmm함수를 바꾸기 전에 eax를 0x401071로 바꾸어놓으면 될거로 보인다.

    여기서 보면 input을 eax에 넣어주기 때문에, call hmmm__ 하나만 잘 확인하면 될듯

     

    hmmm에 가면, 먼저 0x40467a에 가서 406016에다가 0x619060eb를 적고,

    ** 이부분은 쓸데 없는 데, 코드 쓰는 과정에서 어쩔수 없이 생긴듯

     

    input을 1 증가시킨다. 이후 다시 돌아오면 바로 input_1up에 또다시 가게 되어서 input을 1 증가 시킨다.

     

    이후 리턴은 0x404674로 가게된다. 

    가보면 input에다가 601605C7을 더한다. 그다음, eax를 1증가시키고 bl에 ch를 넣고, 모두 push하다가 pop을 하고 난후 다시 input을 1 증가시킨다. 또 아까처럼 input으로 가서 1을 한번 더 증가시킨다. 이후 ret은.... 생각하기 힘드니 디버깅해보자.

     

    스택을 보니 다시 원래 함수로 돌아가는 군.

     

    그 이후 eax에다가 input의 값을 집어넣는다.

     

    그러니까 정리하자면, input값에다가 0x601605c7을 더하고 4를 더한다. 그 값을 EAX에 넣는다.

     

    X + 0x601605c7 + 4 = 0x401071 이 되면 될듯하다...

     

    그러면 X는 0xA02A0AA6(-1,607,857,498)‬ 이 된다. 그런데... 음수가 불가능하니까 integer overflow를 이용해서 값을 적어주자.

    X + 0x601605c7 + 4 = 0x100401071 이 되면 된다 ㅇㅇ..

    X = 0xA02A0AA6(2,687,109,798‬) 

    ㅋㅋㅋㅋㅋ 16진수로 보면 똑같네.. 당연한건가...

    쉽네

     

    'Writeup > Wargame_Writeup' 카테고리의 다른 글

    [Reversing.kr] 11_Easy ELF  (0) 2020.02.05
    [Reversing.kr] 6_ImagePrc  (0) 2020.02.05
    HackCTF j0n9hyun's secret  (0) 2020.01.23
    HackCTF Unexploitable #2  (0) 2020.01.23
    [Flare-on 2019] Reloadered  (0) 2020.01.21

    댓글