이번 코드는 복잡해 보이지만 뜯어보면 간단하다.
argv를 입력받고, argv길이가 20이어야 하며, hashcode = 0x21DD09EC 와 check_password(argv[1]) 이 같으면 플래그를 볼 수 있다.
check_password를 보자
입력받은 const char* p 를 int*로 캐스트한다.
int는 4byte이기 떄문에 4바이트씩 받는것으로 보인다.
그 후 for문을 이용해 res 에 ip[i] 를 더 해준 후, res를 return한다.
즉 20개의 글자를 4개씩 잘라 5번 더해서 hashcode를 만들어 주면 된다.
hashcode를 5로 나눠보자.
0x6C5CEC8이므로 \xc8\xce\xc5\x06을 5번 넣으면 될줄 알았다.
하지만 플래그가 안 출력되길래 5를 다시 곱해보았다.
보다시피 원래 hashcode보다4 줄었다. 그래서 \xc8\xce\xc5\x06 를 4번 넣고 마지막에는 \xcc\xce\xc5\x06 를 넣어보았다.
보다시피 flag가 출력되었다.
'pwnable > Toddler's Bottle' 카테고리의 다른 글
[Toddler's Bottle] random (0) | 2018.05.21 |
---|---|
[Toddler's Bottle] passcode (0) | 2018.05.21 |
[Toddler's Bottle] flag (0) | 2018.05.21 |
[Toddler's Bottle] bof (0) | 2018.05.19 |
[Toddler's Bottle] fd (0) | 2018.05.18 |