[6주차] 리버싱 문제 제작 과제
- SWING/reversing
- · 2024. 5. 21.
파일을 실행하면 이렇게 뜬다 아이다로 디컴파일 했을 때 main이 위와 같다. 결론부터 말하면 위 for문을 반대로 만들면 끝나는 문제이다. //원래 코드 for ( i = 27; i >= 0; --i ) *v3++ += byte_406000[i] - i; //수정 코드 for ( i = 0; i byte_406000의 배열은 위와 같다(16진수) 푸는 방법은 두 가지가 있다. 1. 파이썬이나 C++로 코드를 작성하고 실행하기 2. 어셈블리 수정 어셈블리를 이해한다면 이걸 수정하는 편이 더 편하다(코드를 작성하려면 조금 귀찮다) 간단하게 sub cl, al에서 sub를 add로만 바꿔보자 아래 덤프를 보면 문자열이 담긴 것을 알 수 있다. 다만 경고창에 SWING{} format이 맞냐..
1. 31기 함은지 님 "SWING_JJANG" is not plaintext Correct 문자열이 존재한다. hi 한 번 입력하고 동적분석 진행하면 NRDIB_EEVIB라는 문자열이 보인다 다시 실행하여 입력해주면 성공 2. 31기 지현아 님 문자열을 찾아준다 아무거나 입력해보고 배열 하나씩 검사하는 거 같다 이렇다 할 문자열이 안 보였다 아이다로 디컴파일 했더니 v8+=v6^0x41 주목 이 v8이 25가 되면 성공하는 문제이다. 0x44^0x41이 0x05이므로 대문자 D를 5번 입력해주면 총 25가 된다. 성공 3. 31기 노희민 님 알맞은 코드를 입력하시오.PNG 파일 푸터 시그니처가 없는 걸 보아 그냥 맨 앞 PNG만 지워주면 될 거 같다 디버거로 열고 correct 문자열을 찾았다. 문..
registered가 안 눌러진다. 뭔가 정해진 format이 있을듯 crackme.exe 모듈로 간다 Well done!으로 간다 hmm...동적 분석을 해도 잘 모르겠다... 라업 참고했다.. 모듈 간 호출 참고하면 msvbvm60을 호출한다는 것을 알 수 있다. 이중에서 문자열 format 비교해야 하므로 strcmp를 찾아 참고한다여기로 와서 아무거나 입력하면 eip가 여기로 오는데... 00402308로 오면 serial값이 보여서 재입력해준다이렇게 2145440으로 시리얼이 뜬다 프로세ㅔ스마다 달라진다.시리얼이 다른 건 다시 실행했기 때문이다... 아무튼 위처럼 해주면 Registered 버튼이 뜬다
일단 crackme5.exe모듈로 들어가고 문자열 참조를 해본다. well done! 참조하는 주소로 이동 well done으로 향하는 분기문이 수상하다 그 위에 strcmp를 하는 crackme5.402324를 참조해보자 메모리 맵에서 DATA쪽이 00402000~이므로 이동 위를 더 자세히 봤더니 4023FD를 보면 이렇게 시리얼 같은 게 숨겨져 있다. 4562-ABEX와 L2C-5781... 뭔가 섞어서 입력해봤는데 다 틀렸댄다 동적 분석해보니까 숫자 부분이 1씩 add되더라 분기문을 다 돌았더니 6784-ABEX가 되었다. 합한 시리얼 총 넘버는 L2C-57816784-ABEX
PE파일이란?리눅스 실행파일이 ELF인 것처럼 윈도우에서 사용하는 실행파일PE파일의 종류EXE, DLL, OBJ 등 윈도우OS에서 돌아가는 실행파일들이 있다. PE파일의 구조PE 파일은 위 그림처럼 구조체 형식으로 저장되어 있다. 크게는 PE header와 body가 존재한다. 메모장을 PEview로 열면 구조화되어 있는 걸 알 수 있다. 1. PE header1. DOS HeaderIMAGE_DOS_HEADER 구조체1. e_magic: DOS signature이다. PE 파일이라는 걸 나타낸다. MZ로 총 2바이트. 위 메모장에서도 data가 5A4D로 고정됨을 알 수 있다. 2. e_lfanew: NT header가 시작되는 위치 offset. 2. DOS stub(옵션) DOS환경에서 실행되는..