일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- CodeEngn
- basic_exploitation_000
- basic_exploitation_001
- sint
- rev-basic-7
- rev-basic-0
- L18
- RCE
- Pwnable
- rev-basic-1
- 포너블
- sd카드 리더기
- rev-basic-5
- off_by_one_000
- rev-basic-4
- 드림핵
- 코드엔진 베이직 13
- out_of_bound
- L15
- L16
- L17
- off_by_one_001
- Basic
- Dreamhack
- pwnable.kr
- rev-basic-6
- coin1
- rev-basic-2
- rev-basic-3
- 코드엔진 베이직
- Today
- Total
목록분류 전체보기 (52)
서브웨이
문제를 보아하니 단순한 리버싱 문제로 보입니다. 디버거에서 코드를 살펴보니 이 함수를 통해 드라이브 정보를 받아오는 것으로 보입니다. 그 후, 미리 정해놓은 4562-ABEX라는 문자열을 드라이브 정보를 받아오는 함수의 두번째 인자의 뒤에 붙이는 과정을 수행합니다. 하지만 드라이브 이름이 없으므로 아무 값도 얻어오지 못합니다. 드라이브 이름 변경하기 귀찮으니 덤프에서 그냥 메모리 값을 바꿔줍시다. 첫 네개의 문자에 대해 1씩 더해주는 반복문을 두번 거치고 나면 EqfgEngn4562-ABEX라는 문자열이 만들어집니다. 한번 더 L2C-5781이라는 미리 정해놓은 문자열과 아까 만든 문자열을 붙여서 최종 시리얼을 만들어 냅니다. 성공.
Detect It Easy를 돌려봅시다. UPX로 패킹되어있으니 일단 언패킹을 합시다. 시리얼을 찾아야하니 일단 문자열검색을 해봅시다. 얼래 뭔가 시리얼처럼 보입니다. 한번 입력해봅시다. 당황스럽네요. 사실 이 문제의 핵심은 시리얼이 아니라 OEP를 찾는 것이었습니다. 일단 OEP란 Original Entry Point라는 뜻인데요. 패킹된 파일의 실제 프로그램 시작 부분을 의미한다고 합니다. https://m.blog.naver.com/wsi5555/221261191211 [ Reversing ] UPX - OEP 확인 1. UPX - OEP 확인 OEP : Original Entry Point - 패킹된 파일의 실제 프로그램 시작 부분 입... blog.naver.com 자세한 내용은 이곳에서 도움을..
먼저 디버거에 올려보자. 뭔가 이상하다. 평소에 보던 어셈블리랑 다른 느낌이다. Detect It Easy를 돌려보자 UPX라는 것으로 패킹이 되어있다고 한다. 패킹이란 간단히 말하면 실행 압축인데, 파일 내부의 코드부분을 압축하여 저장하고있다가 실행할때 메모리에 압축된 코드를 풀어서 실행하는 기법이다. 패킹된 상태에선 어셈블리어로 보는것이 어렵다. 언패킹을 위해 툴을 써보자. https://github.com/upx/upx/releases/tag/v3.94 upx/upx UPX - the Ultimate Packer for eXecutables. Contribute to upx/upx development by creating an account on GitHub. github.com 위의 링크로 가서..
먼저 그냥 프로그램을 실행해보자. 이제 디버거 상에서 실행해보자. 라고 나오므로 간단히 함수 이름 중 디버거가 들어있는 것을 찾아본다. 우클릭 -> Search for -> All intermodular calls로 찾을 수 있다. 바로 이렇게 IsDebuggerPresent라는 함수가 나온다. 이제 저 함수가 사용되는 곳으로 가보자. IsDebuggerPresent함수의 리턴값이 0일 때 정상메시지를 출력하는 구조이다.