워게임 풀이
Reversing.Kr
This site tests your ability to Cracking & Reverse Code Engineering. Now Challenge a problem for each environment. (Windows, Linux, .Net, Flash, Java, Python, Mobile..) Admin E-Mail: gogil@reversing.kr
reversing.kr
3. Easy ELF
ELF(Executable and Linkable Format)는 실행 파일, 목적 파일, 공유 라이브러리 그리고 코어 덤프를 위한 표준 파일 형식이다. ELF 파일을 IDA에 넣으려니 넣어지지 않아서 실행파일(.exe)로 변환 후에 넣어주었다.
String 검색창은 단축키(Shift+F12)를 사용해서 열거나
View>Open subviews>Strings를 통해서 열 수 있다.
Correct!, Reversing.kr Easy ELF, Wrong과 같은 문자열을 볼 수 있다.
Reversing.kr Easy ELF를 더블 클릭하면 위와 같은 화면으로 넘어가고
aReversingKrEas를 선택한 상태에서 'x' 키를 눌러 메인 함수로 이동할 수 있다.
메인 함수는 위와 같고 아주 간단하다!
cmp를 통해서 eax가 1이 아닌 경우 wrong으로 점프한다.
Wrong으로 분기를 하지 않을 경우에는 80484F7로 간다. 해당 함수를 살펴보면
Correct!를 출력하는 함수이다.
다시 main 함수로 돌아가서 첫번째 노드를 보면 _write, 8048434, 3048451을 호출(call)하고 있다.
정답을 입력받는 함수인 것을 알 수 있다.
8048451 함수이다. 정답과 입력값을 비교하는 함수이고, eax에 1이 담긴 상태로 빠져나와야 한다. (eax가 1이 아니면 Wrong으로 분기한다.)
eax가 1이 되기 위해서는 모든 분기문에서 점프를 하여 오른쪽 사선 방향으로 진행해야 한다.
각 노드들은 어떤 주소 값에서 1byte를 가져와서 eax에 저장하고 연산을 취하는 방식으로 동작한다. 제일 첫번째 주소인 804A020부터 input에 저장되는 것을 추측해볼 수 있다.
첫번째 노드부터 보면, 21(804A021)에 있는 한 글자를 eax에 저장한 후, eax와 0x31(1)을 비교한다. 이전에 20부터 input이 저장된다고 했으므로 2번째 글자가 1이 된다는 것을 알 수 있다.
두번째 노드에서는 20을 eax에 저장하고, eax와 0x34를 XOR 연산, 그리고 그 결과를 다시 20에 저장한다.
20 = 첫번째 글자 ^ 0x34
22 = 세번째 글자 ^ 0x32
23 = 네번째 글자 ^ 0xFFFFFF88
24 = 다섯번째 글자 / 0x58(X) 비교
20 = 첫번째 글자 ^ 0x34 = 0x78
22 = 세번째 글자 ^ 0x32 = 0x7C
23 = 네번째 글자 ^ 0xFFFFFF88 = 0xDD
XOR 연산의 경우 a^b=c일 때, a=b^c임을 이용해서 해당 자릿수의 글자를 구해주면 된다.
첫번째 글자는 'L', 두번째는 '1', 세번째는 'N', 네번째는 'U', 다섯번째는 'X'로
모두 합치면
'L1NUX'가 된다.
L1NUX
'Reversing' 카테고리의 다른 글
DLL, IAT, EAT 분석 (0) | 2023.05.12 |
---|---|
[Reversing] ImagePrc_WirteUp (0) | 2023.04.29 |
[Reversing] Easy Keygen_WirteUp (0) | 2023.04.29 |
PE 구조(2)__notepad.exe(메모장 프로그램) PE 헤더 분석 (0) | 2023.04.28 |
PE 구조 (0) | 2023.04.04 |