블로그 이전했습니다. https://jeongzero.oopy.io/
[CodeEngine] Advance RCE L04
본문 바로가기
워게임/CodeEngn

[CodeEngine] Advance RCE L04

728x90

1. 문제


Name이 CodeEngn 일때 Serial은 무엇인가


Author: LibertyorDeath
File Password: codeengn

3번 문제와 동일. 키젠

아이다에서 디컴파일이 안된다. 패킹 되있나 해서 확인해보니 또 그것도 아닌거 같다.

둘중 하나인듯, 뭐 지원안하는 형식이거나 알려지지 않은 패커로 패킹된거임

2. 접근방법


잘못 입력하면 저렇게 뜬다. 문자열로 따라가보려고 했으나 검색이 안된다. 따라서 MessageBoxA에 bp를 걸고 확인을 해봄

해당 api가 끝나고 돌아갈 주소를 확인해보면 0x4011a4이다. 저기로 가보면

성공-실패 로직을 확인할 수 있고, 주석에 Name에 해당하는 키젠값이 보인다. 사실 정답은 저렇게 확인만해도 알 수 있다.

3. 풀이


추가로 키젠을 하는 함수를 찾아보았다.

위로 올리다 보면 저 함수가 보인다. 의심스러워서 bp를 걸어봤으나 걸리지 않는다. 뭔가 동적으로 생성되는 함수인가?

따라서 oep부터 그냥 진행해보았다

oep를 보면 뭔가 복구하는 로직이 나온다. 아 ! 자체 패커로 패킹된거같다.

보면 0x401006 에 들어있는 값들을 디코딩하는 로직이 보인다. 디코딩이 끝나면 그곳으로 이동한다

여기군. 이제 아까 그 의심스러운 부분을 살펴보자

함수 안으로 들어가보자

요 로직이 바로 키젠 로직이다. 입력값중 8바이트를 변형시키는데 로직은 간단하다. 입력값 한바이트를 가지고와 + 1을 해준다. 그다음 edx와 더하고 그 결과 값을 다시 esi와 더한다.

그다음엔 ecx에 +1을 하고 , edx=edx*ecx 의 결과 값을 edi에 복사한다. 마지막으로 edi=edi*esi를 한다.

밑에 잘려서 안보이긴 하는데 swprintf로 생성된 키젠값을 LOD-%lu-%lx 형태로 출력시킨다. 해당 로직을 파이썬 코드로 포팅하면 다음과 같다

"""
0040113E | 40                       | inc eax                                   |
0040113F | 03C2                     | add eax,edx                               |
00401141 | 03F0                     | add esi,eax                               |
00401143 | 41                       | inc ecx                                   |
00401144 | 0FAFD1                   | imul edx,ecx                              |
00401147 | 8BFA                     | mov edi,edx                               |
00401149 | 0FAFFE                   | imul edi,esi                              |
"""

# -*- coding:utf-8 -*-

name = "CodeEngn"
edx = 0xA
esi = 0
ecx = 0
edi = 0x111
for i in name:
    tmp = ord(i) + 1
    tmp += edx
    esi += tmp
    ecx = ecx + 1
    edx = edx * ecx
    edi = edx
    edi *= esi

print(f"key is => LOD-{esi}-{hex(edi&0xffffffff)[2:]}")
E:\JungJaeho\STUDY\Self\hacking\Wargame\CodeEngine\advance rev>C:/Users/wogh8732/AppData/Local/Programs/Python/Python37/python.exe "e:/JungJaeho/STUDY/Self/hacking/Wargame/CodeEngine/advance rev/04/ex.py"
key is => LOD-59919-a0024900

4. 몰랐던 개념


728x90

'워게임 > CodeEngn' 카테고리의 다른 글

[CodeEngn] Advance RCE L06  (0) 2021.01.30
[CodeEngn] Advance RCE L05  (0) 2021.01.29
[CodeEngine] Advance RCE L03  (0) 2021.01.27
[CodeEngine] Advance RCE L02  (0) 2021.01.26
[CodeEngine] Advance RCE L01  (0) 2021.01.25