-
[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