Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Tree/BST
- codeengn
- 리버싱
- tree
- Tree/RBTree/Insertion
- forensic
- reversing
- CS/자료구조/Priority_Queue
- CS/자료구조/Stack
- UTCTF
- CS/자료구조/Singly_Linked_List
- CS/자료구조/Queue
- Tree/Binary_Tree
- 코드엔진
- Tree/RBTree/Deletion
- CS/자료구조/Linked_List
- Tree/Binary_Search_Tree
- CS/자료구조/Circular_Linked_List
- Tree/Traversal
- Tree/AVL/Insertion
- Tree/AVL
- ctf
- Tree/RBTree
- Tree/AVL/Deletion
- CS/자료구조/Circular_Queue
- CS/자료구조/Doubly_Linked_List
Archives
- Today
- Total
SuperVingo
CodeEngn.com Basic RCE L17 WriteUp 본문
728x90
0. 실행화면
1. ExeInfoPE 분석
2. 올리디버거 분석
빠르게 성공 문자열을 찾고
첫번째 비교 구문이다. 글자가 3글자 이상이여야하는데, 우리는 1글자 키값을 찾아야하므로 CMP EAX, 3을 CMP EAX, 0으로 바꿔 지나가도록 한다.
이 부분을 글자가 30자 미만을 체크하는 부분으로 그냥 넘어가면 된다.
그러다 이런 루틴을 발견했다. 이 계산을 통해 나온 값의 앞 4자리를 시리얼 앞 4자리로 사용하는 것을 확인했고, 이를
코드로 구현해서 확인하면 쉽게 찾을 수 있었다.
#include <stdio.h>
int main(void)
{
int EDX = 0, ESI, i;
for(i = 0x30; i <= 0x7A; i++)
{
ESI = i;
ESI *= 0x772;
EDX = ESI;
EDX *= ESI;
ESI += EDX;
ESI *= 0x474;
ESI *= 2;
EDX = ESI;
printf("%c %x\n", i, EDX);
}
return 0;
}
728x90
'Wargame[워게임] > CodeEngn' 카테고리의 다른 글
CodeEngn.com Basic RCE L19 WriteUp (0) | 2020.08.04 |
---|---|
CodeEngn.com Basic RCE L18 WriteUp (0) | 2020.08.04 |
CodeEngn.com Basic RCE L16 WriteUp (0) | 2020.07.30 |
CodeEngn.com Basic RCE L15 WriteUp (0) | 2020.07.30 |
CodeEngn.com Basic RCE L14 WriteUp (0) | 2020.07.29 |