일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 시스템해킹
- code enigne
- 링크 대역폭
- 서브넷 마스크
- 코드엔진 basic 5
- 루트 포트
- 서브넷팅
- 데지그네이티드 포트
- 네트워크 장비
- 콜리젼 도메인
- Non Root Bridge
- FTZ level3
- Root Bridge
- 세그먼트
- code engine
- 코드엔진
- BPDU
- 서브넷
- 브리지 우선순위
- 해커스쿨 FTZ
- 브리지 ID
- ip주소
- 치트엔진 풀이
- 루트 브리지
- 루핑
- 스패닝 트리 알고리즘
- 코드엔진 풀이
- Path Cost
- TCP/IP
- 네트워크
- Today
- Total
IT 블로그 !!
Code Engine Basic 6 본문
언팩 후, OEP와 시리얼을 찾으라고 합니다. 프로그램을 실행시켜보겠습니다.
아무 키나 입력 후 Check Serial을 눌러봅시다.
이렇게 잘못된 등록키라고 Error창이 뜹니다
우선 OEP의 개념에 대해서 알아봅시다. OEP란 Original Entry Point로 실제 프로그램의 시작 위치를 이야기합니다. 그렇다면 먼저 PEID로 프로그램의 정보를 얻어봅시다.
UPX패킹 돼 있음을 확인 할 수 있습니다
언패킹 한 후 올리디버그를 통해 파일을 열어봅시다.
성공적으로 언팩이 되었습니다. 프로그램의 시작은 00401360으로 시작합니다. 그러면 이 00401360이 이 프로그램의 OEP가 됩니다.
Wrong 메시지를 찾기 위해 5번에서 했던 것처럼 문자열을 찾아봅시다
오른쪽 마우스 -> Search For -> All referenced text strings를 클릭합니다.
Wrong 메시지가 보인다. 더블클릭을 통해서 들어가도록 합니다.
코드를 보다 보면 성공문과 에러 문이 나옵니다. JNZ위에 조건문이 있지요. 조건문을 살펴보면 TEST EAX, EAX라고 되어있습니다. TEST문은 우리가 그전까지 한 번도 보지 못했던 조건문입니다. TEST EAX, EAX에 break를 걸고 코드를 실행해보도록 하겠습니다.
시리얼 값을 123을 넣고 실행시켜 TEST코드까지 왔을 때의 EAX의 값은 1입니다. 일단 TEST라는 조건문에 대해서 자세히 알아보도록 합시다.
TEST : 첫 번째 Operand와 두 번째 Operand를 AND연산을 한다. 0이 아닌 값이 나오면 ZF를 0으로 설정하고 반대로 연 산값이 0이 나오면 ZF를 1로 설정한다.
현재 EAX의 값이 1인걸로 봐서는 ZF가 1이 나올 수밖에 없습니다. 우리는 ZF를 0으로 바꿔야 합니다. 그러려면 EAX를 0으로 만들어줘야 하지요. EAX는 함수의 반환 값이 저장되는 레지스터입니다. 주변 코드들을 살펴보면
바로 위에 00401073주소에서 이상함 함수를 CALL하고 있습니다. F7을 사용해서 함수 안에 들어갑시다.
코드 해석을 해보자면
1. EDX와 ECX에 어떤 값을 넣는다.
2. EDX와 3을 AND연산한다. ZF가 0이면 JNZ를 실행하지 않는다.
3. EAX에 어떤 값을 넣는다.
4. AL과 ECX를 비교한다. ZF가 0이면 JNZ를 실행하지 않는다.
5. AL과 AL을 OR연산
(OR연산은 각 비트가 모두 0이면 결과가 0이고 모두 0이 아니면 결과가 1이 된다.)
6. AH와 ECX+1을 비교, ZF가 0이면 JNZ를 실행하지 않는다.
7. AH와 AH을 OR연산
8. AL과 ECX+2를 비교, ZF가 0이면 JNZ를 실행하지 않는다.
9. AL과 AL을 OR연산
10. AH과 ECX+3을 비교, ZF가 0이면 JNZ를 실행하지 않는다.
결국 EAX는 0이 됩니다.
간단하게 정리하자면 ECX와 EDX에 집중하면 됩니다.
ECX는 우리가 넣었던 시리얼 값이고 EDX는 어떤 문자열인 것 같습니다. 정리하면
AD46DFS547을 시리얼 값을 넣게 되면
이렇게 성공했다는 창이 뜨게 됩니다.
그러므로 이번 6번 문제의 OEP = 00401360, 시리얼 값 = AD46DFS547 입니다.
'Reversing > Code Engine' 카테고리의 다른 글
Code Engine Basic 8 (0) | 2018.11.03 |
---|---|
Code Engine basic 7 (0) | 2018.11.03 |
Code Enigne Basic 5 (0) | 2018.10.12 |
Code Engine basic 4 (0) | 2018.10.07 |
Code Enigne Basic 3 (0) | 2018.10.07 |