일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- Tree/Binary_Tree
- Tree/RBTree/Insertion
- CS/자료구조/Linked_List
- CS/자료구조/Singly_Linked_List
- reversing
- CS/자료구조/Priority_Queue
- Tree/AVL/Insertion
- CS/자료구조/Stack
- Tree/AVL/Deletion
- Tree/Traversal
- Tree/RBTree/Deletion
- 코드엔진
- Tree/AVL
- tree
- codeengn
- UTCTF
- CS/자료구조/Circular_Linked_List
- ctf
- CS/자료구조/Circular_Queue
- Tree/RBTree
- Tree/BST
- CS/자료구조/Doubly_Linked_List
- CS/자료구조/Queue
- forensic
- Tree/Binary_Search_Tree
- 리버싱
- Today
- Total
목록Wargame[워게임]/CodeEngn (21)
SuperVingo

0. 실행화면 약 12~13초 쯤에서 꺼지는 것같다. 1. ExeInfoPE 분석 같은 문제로 코드엔진 Basic RCE L19번이 있겠다. Exe2Aut로 디컴파일을 진행한다. 2. Exe2Aut 분석 바로 보인다. 저걸 MD5로 변환 후, 인증을 진행하면된다.

마지막 문제답게 어려워보인다. 한번 도전해보자. 0. 실행화면 뭐 없다... 1. ExeInfoPE 분석 다행히 패킹은 되어있지 않으므로 분석을 바로 들어간다. 2. 올리디버거 분석 처음 ReadFile을 통해서 파일을 읽어온다. 그 후, 글자수가 0x12, 즉 18자인지 비교하므로 키파일의 크기는 18바이트여야한다. 그 후 함수와 비교를 통해 성공 문자열을 출력한다. 그럼 첫번째 Routine에 들어가보자. EAX, ECX를 0으로 초기화한 후, BL을 0x41 ~ 0x4F까지 총 14번 반복한다. 그 사이에서 KEY에서 한자리씩 가져와 BL과 XOR연산을 진행한 후, 0x4020F9에 누적하고 있다. 그 후, 0x4020F9와 0x12345678를 XOR연산을 진행한 후, 0040133으로 넘어간다...

처음 보는 부류의 문제이다. 0. 실행화면 이 화면이 약 10초 정도가 지나면 꺼지게된다. 1. ExeInfoPE 분석 Autoit이라는 언어로 제작되었고, Exe2Aut라는 디컴파일러가 있는것을 알 수 있었다. 2. Exe2Aut 분석 간단한 코드 한줄이 나왔고, 뒤에 적혀있는 숫자가 종료되는 시간으로 보인다. 단, 초단위이므로 ms단위로 바꾸기 위해서는 1000을 곱해줘야하는 것을 잊지 않아야한다.

0. 실행화면 1. ExeInfoPE 분석 2. 올리디버거 분석 늘 해왔던 패턴이다. 성공 문자열 찾고 분기 조건 찾아보니 lstrcmpi로 비교하여 분기하므로 BP걸고 실행하여 시리얼을 찾는다. 끝.

0. 실행화면 1. ExeInfoPE 분석 2. 올리디버거 분석 빠르게 성공 문자열을 찾고 첫번째 비교 구문이다. 글자가 3글자 이상이여야하는데, 우리는 1글자 키값을 찾아야하므로 CMP EAX, 3을 CMP EAX, 0으로 바꿔 지나가도록 한다. 이 부분을 글자가 30자 미만을 체크하는 부분으로 그냥 넘어가면 된다. 그러다 이런 루틴을 발견했다. 이 계산을 통해 나온 값의 앞 4자리를 시리얼 앞 4자리로 사용하는 것을 확인했고, 이를 코드로 구현해서 확인하면 쉽게 찾을 수 있었다. #include int main(void) { int EDX = 0, ESI, i; for(i = 0x30; i

0. 실행화면 이름, 패스워드를 입력하고 틀렸으면 실패 메세지를 출력한다. 1. ExeInfoPE 분석 Dev-C++로 작성되었고, 패킹되어있지 않으므로 바로 올리디버거로 분석을 시작한다. 2. 올리디버거 분석 빠르게 성공 문자열을 찾았고, 바로 분기점을 찾았다. EAX와 LOCAL.15를 비교하고 있다. LOCAL.15는 EBP - 3C이다. 그럼 BP를 걸고 실행하면 EBP-3C에 값이 들어있는 것을 볼 수 있다. 이를 10진수로 변환해 입력하면 성공이다.

0. 실행화면 실패 화면과 시리얼은 정수로 이루어져야한다는 조건을 알 수 있었다. 1. ExeInfoPE 분석 델파이로 작성되었으며 패킹은 되어있지 않으므로 바로 분석을 들어간다. 2. 올리디버거 분석 비교적 쉬웠다. 성공문자열을 찾았고, 분기문이 바로 위에있었다. BP를 걸고 이름에 CodeEngn, 시리얼에 12345를 입력하니 입력한 값은 EAX로 들어가니, 0x45B844에 우리가 원하는 시리얼 값이 들어있을 것이다. DWORD크기만큼 값을 불러와 10진수로 변환하여 다시 입력해보았다. 성공했다.

0. 실행화면 틀리면 위와같은 MessageBox를 보여준다. 1. ExeInfoPE 분석 또 UPX다. 이제는 언패킹 과정은 설명하지 않겠다. 2. 올리디버거 분석 올리디버거에서 Search for -> All referenced strings 에서 성공 문자열을 볼 수 있다. 이를 따라가면 분기점을 찾을 수 있었고, BP를 걸어 12345를 넣어 실행해보았다. EAX에는 입력한 값이 들어가고, CMP EAX, ESI를 통해 분기하므로 ESI에 들어있는 값이 키이다.