FLARE ON 2015 문제풀이

Posted by : on

Category : reversing   learning


배경

2025년 7월에 진행한 FLARE ON 2015 스터디 진행중 나온 풀이를 저장하게 되었습니다.

chal1

_

_

입력값을 0x7D와 xor시켜서 맞는지 확인하고있다

_

>>> q = [0x1f,8,0x13,0x13,4,0x22,0xe,0x11,0x4d,0xd,0x18,0x3d,0x1b,0x11,0x1c,0xf,0x18,0x50,0x12,0x13,0x53,0x1e,0x12,0x10\]
>>> "".join([chr(q ^ 0x7d) for q in q])
'bunny_sl0pe@flare-on.com'

chal2

_

_

_

연산 로직이 좀 생겼다

정적분석으로 풀기가 좀 그래서 동적분석을 돌렸습니다

_

대충 코드로 짜면

int w = 0;
for (for i =0; i < len; i++) {
  char c = input[i];
	char temp = c ^ 0xc7;
	temp = temp + 1 + (1 << w & 0x3);
	w += temp;
  if (*edi != temp) error!()
}

edi 데이터는 다음과 같으며, 역순으로 비교하고 있습니다

03 66 B8 C7 01 50 9E AC 9C 32 44 24 04 86 CA D2 C4 9D 10 E0 86 CA 31 D2 25 FF 00 00 00 66 01 C3 AE 66 0F 45 CA 58 E3 07 83 EF 02 E2 CD EB 02 31 C0 5E 5F 89 EC 5D C3 E8 1C FF FF FF AF AA AD EB AE AA EC A4 BA AF AE AA 8A C0 A7 B0 BC 9A BA A5 A5 BA AF B8 9D B8 F9 AE 9D AB B4 BC B6 B3 90 9A A8

_

chal3

_

_

_

파이인스톨러 프로그램이다

_

임시폴더에 가면 내부 파일이 나온다

_

디컴파일을 해도 되고, import하여 여러 함수를 사용해봐도 된다

_

_

_

wsa socket의 select wrapper이다

pyd파일은 래퍼가 끝인것같아서 pyinstaller extractor를 검색해서 돌렸다

_

나온 pyc를 파이썬 소스코드로 디컴파일한다

pyc 여러 툴을 써도 디컴파일이 실패해서 strings를 써봤는데, 내부 데이터가 나왔다

_

_

파일 자체가 이랬다

_

마지막만 Exec가 아닌 print로 실행한다

_

_

찾았다

보니까 메모리에서 gui에 숨겨진 attribute를 찾아내는 것 같았다

_

chal4

_

_

_

아무것도 실행되지 않아 뭔가 했는데 oep가 잘못설정된듯합니다.

_

101에디터로 dynamic_base 를 지워 aslr을 껐습니다

오류는 이제 발생하진 않습니다

프로그램 루틴은 이렇습니다.

  • “5”문자열을 atoi하여 데이터가 5이면 종료

  • 인자값이 2개가 아니면 종료

  • 인자값으로 받은 문자열을 atoi 및 메모리에 저장

  • 내부에 있는 base64 문자열들을 메모리 영역에 복사 및 ??

  • 메모리에 데이터가 ??이면 실제 로직 진행

    • 실제 로직은 안티 디버깅 기법들이 적용되어 있었습니다 _

동적 분석 결과, 로직은 다음처럼 흘러갔습니다.

  • 프로그램 시작시 0x407018에서 데이터를 읽어 esp와 xor시킨 후 esp+d0에 저장 (주소는 고정이나, 값은 매번 바뀜)

  • base64 데이터를 기반으로 연산 수행

  • 로직이 다 끝나면 esp+d0 값을 읽어 esp와 xor시켜 복호화 후, 0x407018값이 바뀌었는지 확인

  • 값이 바뀌었다면 이후 정상 로직 수행

정상 로직에서 debughook나 exceptionlist등을 통해 조작하는 내용이 보였으나, 추가적인 내용이 보이지 않았습니다.


알아보니 upx 패킹상태에서 실행시 다른 로직이 실행된다고 합니다

md5 체크섬등의 로직이 적용되며, 바이너리 변조도 필요하지 않았다고 합니다

패킹 상태에서 디버깅을 했음에도 flare-on 데이터가 보이지 않아 포기하였습니다

chal5

_

_

_

key.txt파일을 읽어, 각 글자에 flarebearstare의 각 n번째 글자를 더해서 전송하는 프로그램인듯하다

_

보내진 문자열은 합치면 UDYs1D7bNmdE1o3g5ms1V6RrYCVvODJF1DpxKTxAJ9xuZW==

_

오류가 났습니다

key파일에 000000..등의 데이터를 넣어 암호화를 시킨 후

_

해당 암호화 결과물을 확인했습니다

_

_

대소문자가 변환되는듯합니다

_

chal6

_

dex 리버싱입니다

dex2jard2j-dex2jar.bat을 이용해 jar파일로 바꿔 jd-gui로 열어줍니다

_

입력 값을 받아 native 함수를 호출하는 것으로 보입니다

apk의 lib 내부에 있던 so파일을 디컴파일 진행합니다

_

_

위 함수를 파이썬으로 짜면 위와 같고,

_

해당 배열들 내부의 데이터와 v16이 같은지 비교합니다

각 글자 << 8 + 다음글자가 소수들을 몇 번 곱하여 나오는지 연산하는 로직입니다

_

마지막에서 두 번째 값이며, 2바이트씩 배열되었는지 4바이트씩 배열되었는지는 여러 시도를 통해 알아본 결과, 2 바이트씩 배열된 것으로 나타났습니다

_

배열 값 해독은 정상적인 값이라는 것만 알아냈으므로 패스하였습니다

chal7

_

_

_

dnspy결과, smartassembly를 사용했으며, 검색해보니 난독화 툴이라고 합니다

검색하니 역시 난독화 해제도구가 뜹니다

_

난독화 해제 후 디버깅하였습니다

_

메소드 조건문을 true로 하니 오류가 나고, 언패킹을 해서 그런지 텍스트가 제대로 주어지지 않았습니다

패킹 된 상태로 진행하겠습니다

_

_

chal8

_

_

_

프로그램 내용은 없는데 용량은 800kb나 합니다

_

텍스트 영역에 글자가 많습니다, 0d 0a로 구분되어 있습니다

_

이미지파일이었습니다

0d0a가 있는 데이터들만 빼서 base64 복호화 후 합쳐보겠습니다

_

_

zsteg에 의해 특정 파일이 숨겨져 있는 것이 보입니다

_

_

chal9

chal10

_

chal11


About 영원염원영웅
영원염원영웅

공부하는것을 좋아합니다.

Email : xhve00000@gmail.com

Website : http://eveheeero.com

Useful Links