목록Hack/DreamHack (74)
CIDY
실행시키면 이런걸 보여준다. 이름처럼 문제 프로그램을 패치해서 해결하라는 것 같다. 선을 그리는 부분을 찾아 제거해야 할듯.. 프로그램이 DLL에서 임포트해 사용하는 함수 목록은 import에서 볼 수 있다. CreateWindowExW 가 윈도우를 생성할 때 사용되는 함수 이름인데, 얘가 임포트되는 곳으로 가보자. winmain에서 참조되고 있다. winmain을 디컴파일한거 14번째 줄을 보면 윈도우의 메시지 콜백을 설정하는 부분이 있다. (메시지 콜백함수에 윈도우 동작이 정의되어 있다.) -> 저 서브함수를 뜯어보자. LRESULT __fastcall sub_1400032F0(HWND a1, UINT a2, WPARAM a3, LPARAM a4) { _QWORD *v5; // rbx __int64 ..
이것도 검증조건에 맞는 입력을 찾는 문제같다. 저 함수를 열어보자 음.. Compar3_the_ch4ract3r 이다. scanf는 마지막에 널을 알아서 넣어주므로 해결
실행시켜보면 입력값을 받고 Wrong을 출력한다. -> 적절한 입력을 찾아주면 될 것 같다. 우선 Input, Wrong이라는 인위적인 문자열이 포함되어 있다는 부분을 이용해 문자열 검색을 해보자. 역시 Correct도 있다. 어떻게 해야 Correct가 나오는지 보자. 상호 참조해보면 main에서 Correct문자열이 참조되고 있음을 알 수 있다. main을 디컴파일해보면 if문 내부에 검증조건 함수가 보인다. 쟤랑 같으면 strcmp가 0을 반환하고, == 0 이면 1을 반환하게 되니까 if문 내부로 들어갈 수 있다 -> 쟤가 플래그
// 32-bit, nx, partial relro #include #include #include #include void alarm_handler() { puts("TIME OUT"); exit(-1); } void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0); signal(SIGALRM, alarm_handler); alarm(30); } void read_str(char *ptr, int size) { int len; len = read(0, ptr, size); printf("%d", len); ptr[len] = '\0'; } void get_shell() { system("/bin/sh"); ..
보호되어 있는 글입니다.
보호되어 있는 글입니다.
보호되어 있는 글입니다.
보호되어 있는 글입니다.