일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- L15
- coin1
- rev-basic-2
- off_by_one_000
- rev-basic-6
- L17
- rev-basic-0
- pwnable.kr
- out_of_bound
- 코드엔진 베이직 13
- rev-basic-7
- rev-basic-3
- RCE
- L16
- 코드엔진 베이직
- 포너블
- rev-basic-4
- 드림핵
- basic_exploitation_000
- Pwnable
- off_by_one_001
- rev-basic-1
- CodeEngn
- rev-basic-5
- sint
- Dreamhack
- Basic
- basic_exploitation_001
- L18
- sd카드 리더기
- Today
- Total
목록전체 글 (52)
서브웨이

리버싱 기초 마지막 문제입니다. 파일을 실행합시다. 대충 입력하고 검증하는 부분을 찾습니다. 여기서 이런 검증하는 부분을 찾을 수 있습니다. 그럼 중단점이 걸린 검증하는 함수로 들어가봅시다. 조금 길어보입니다. 대충 정리해보면 이렇습니다. 암호문은 다음과 같습니다. 일단 rol이 뭔지는 다음 링크를 확인해보시면됩니다. https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=sol9501&logNo=70091168321 |정수 연산 ①| 시프트와 회전 명령어 및 응용 |정수 연산 1| 시프트와 회전 명령어 및 응용 목표 : 시프트 연산의 기본적이 사용법과 응용 및 각 연산이 ... blog.naver.com 정리하자면 다음과 같은 식이 됩니..

이제 기초문제는 두문제 남았습니다. 자 파일을 봅시다. 역시나 대충 입력하고 참조된 문자열을 검색해서 검증하는 부분을 찾아봅시다. 언제나 같은 방식입니다. 그럼 중단점이 걸린 검증하는 함수로 들어가봅시다. 뭔가 조금 짧은것을 알 수 있습니다. 한번 분석해보면 이렇네요. 그럼 테이블과 암호문은 어떤값이 있는지 봅시다. 이건 암호문이고 이건 테이블입니다. 각 자리에 입력된 값을 오프셋으로 쳐서, 테이블에서 해당 오프셋에 해당하는 값이 암호문과 일치하는 입력값을 찾아야합니다. 딱봐도 귀찮아보이니 그냥 검색해서 하나하나 찾아봅시다. 검색은 다음과 같이 패턴찾기를 눌러서 찾을 부분을 입력하고 이렇게 나온 부분을 클릭해서 확인하면 됩니다. 그럼 노가다로 다 찾아보면 다음과 같은 코드를 만들 수 있습니다. encry..

자 다음문제를 풀어봅시다. 일단 실행시켜봅시다. 일단 아무거나 입력해놓고 검증하는 부분을 여느때와 같이 찾아봅시다. 일단 참조된 문자열을 검색하고 거기서 검증 부분을 찾습니다. 그럼 중단점이 걸린 저 부분이 검증하는 함수로 이동하는 부분이 됩니다. 저 함수로 들어가봅시다. 뭐 딱히 길진 않습니다. 한번 분석해보면 이렇게 정리됩니다. 암호문은 다음과 같습니다. 이걸 다시 한번 요약하면 str[i] + str[i+1] == enc[i] 이렇게 암호화가 되는것을 알 수 있습니다. 자 그럼 올바른 입력값을 찾아야하는데, 처음부터 찾는건 경우의 수가 많아져서 거의 불가능합니다. 하지만 마지막 암호문이 00이므로 마지막 평문도 00이라는것을 알 수 있습니다. 그럼 마지막에서 두번째 평문은 당연히 마지막에서 두번째 ..

조금 더 어려워진 리버싱입니다. 자 파일을 한번 봅시다. 대충 입력을 넣어주고 일단 참조된 문자열을 중심으로 검증되는 부분을 찾아봅시다. 여기서 그럼 딱봐도 검증하는 함수로 보이는 부분으로 들어갑시다. 생각보다 길지는 않습니다. 대충 정리를 해보자면 이렇습니다. 이걸 정리하자면 (문자 >> 4) or ((문자 > 4) | ((j

참고를 보니 정수의 표현범위에 대한 문제로 예상됩니다. 쉘코드와 got 조작은 안됩니다. 소스코드를 봅시다. #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 get_shell() { system("/bin/sh"); } int main() { char buf[256]; int size; initialize(); signal(SIGSEGV, get_shel..

이번엔 RELRO, NX bit에 더해서 canary 까지 있는 예제입니다. 쪼끔 귀찮을것 같네요. 소스코드를 봅시다. #include #include #include #include #include char name[16]; char *command[10] = { "cat", "ls", "id", "ps", "file ./oob" }; 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); } int main() { int idx; i..