ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Net-Force]Aargh! Stupid Elf DIE!!!
    Hack/Reversing 2016. 1. 6. 14:39

    c++로 만들어진 리눅스 바이너리이다.


     v4 = std::operator<<<std::char_traits<char>>(&std::cout, "Net Force Linux Crackme");

      std::ostream::operator<<(v4, &std::endl<char,std::char_traits<char>>);

      v5 = std::operator<<<std::char_traits<char>>(&std::cout, "By   BasTijs, bastijs@net-force.nl");

      std::ostream::operator<<(v5, &std::endl<char,std::char_traits<char>>);

      std::operator<<<std::char_traits<char>>(&std::cout, "\nUsername: ");

      std::istream::getline((std::istream *)&std::cin, s, 20);

      std::operator<<<std::char_traits<char>>(&std::cout, "Serial: ");


    소스이다.


    좀 더럽게 보이긴하지만 c++를 했다면 별거아니게 느껴진다.


    Username을 받고, 시리얼도 받는데, 그 밑에 루틴이존재한다.


    for ( i = 0; i < strlen(s); ++i )

        v16 += i + s[i] + 101;

      if ( v16 == v15 )

      {

        v7 = std::operator<<<std::char_traits<char>>(&std::cout, "\n\nAccess Granted!!!\n");

        std::ostream::operator<<(v7, &std::endl<char,std::char_traits<char>>);


    for문으로 연산된값을 시리얼 입력받은값과 비교한다.


    그럼 코딩을해주자.


    #include <stdio.h>

    #include <string.h>


    int main()

    {

    int value=31337;

    char buf[40];

    char s[40];

    printf("Username: ");

    scanf("%s",s);

    int i;

    for(i=0;i<strlen(s);++i)

    {

    value += i + s[i] + 101;

    }

    printf("%s",value);

    }


    username은 s0ngsari니까 , 


    root@HackCat:~# ./pass

    Username: s0ngsari

    32980


    답이나왔다.


    Well done, the password is: ***********


    지정된사이트에 시리얼을입력해주면답이 나오게된다


    'Hack > Reversing' 카테고리의 다른 글

    어셈블리 분기문  (0) 2015.08.13
    Assembly  (0) 2015.07.15
    jmp  (0) 2015.04.14
    Code,Data Section  (0) 2015.04.14
    RVA 실제 번지 변환 계산  (0) 2015.04.13

    댓글

Designed by Tistory.