본문 바로가기
  • Trace
MalwareAnalysis/Lena

Lena 2. reverseme 키파일링 + 어셈블

by seleuchel 2022. 5. 4.

중요

* ascii에서 파일의 끝은 0으로 사용된다. 

 

 

플러그인

-> Analyze This : 올리가 code segment 외부에서 조작 가능 코드 분석해주는 플러그인 (tuts4you 제공)

 

reverseme 

 

CreateFile

obj를 생성하거나 열고, obj에 접근하는 핸들을 반환한다.

CreateFileA 함수를 실행시키기 위한 인자들 (스택에 역순으로 들어감)

핸들 주소는?

keyfile.dat이 있어서 핸들을 잘 반환했다. (핸들을 잘 반환 못하면 EAX = FFFFFFFFh)

keyfile.dat에 들어가있는 정보 

다음 과정 ReadFile

 ReadFile

Keyfile.dat을 특정 바이트 수만큼 읽으려고 시도하며, 이 바이트 수는 특정 주소의 버퍼에 저장

46바이트를 읽음 

버퍼에 데이터가 잘 들어갔다.

성공 시, eax = 1

 

10h와 비교 (10h == 16)

402173 주소 데이터 세그먼트에 들어있는 데이터와 16비교

현재 17이 들어있음 (17h)

위의 비교를 통해서 

아래로 내려갈지 말지가 결정됨 (fail)

(여기서 JL : DS가 가리키는 데이터가 10h 보다 작으면 JMP를 수행)

=> dat 파일에서 읽을 데이터는 적어도 16바이트 이상이 읽혀야함

 

AL에 EBX + 40211A 위치의 데이터를 이동 

(EBX는 이전에 0으로 set)

 

AL == 0 -> D3으로 이동

D3 : ESI와 8 비교  (if esi >= 8)

ㄴ Y : 진행

ㄴ N : fail

앞서 미리 0으로 set 된 ESI

 

CB를 다시 보면, 

여기서는 AL과 47을 비교 

(아까 AL은 keyfile.dat에서 읽어온 데이터의 첫 바이트)

나는 이미 keyfile.dat에 G가 들어가 있어서 패스 가능

 

이후에 ESI INC (1증가), EBX 도 1 증가함 

INC [reg]

reg를 1증가 

Z/O 플래그를 활성화

 

 

그러면, 앞의 내용을 종합해 보았을 때, ESI가 8이 되었을 때, JMP 가능하므로

G가 8개 이상은 되어야한다는 말이군

 

=> 해당 프로그램 우회 방법

keyfile.dat이 가진 데이터는 G가 8개 이상이면서, 데이터가 16바이트 이상이어야함 (문자열)

 

JNE : Z-flag 1이 아닐 때 jmp

 

-x- ascii에서 파일의 끝은 0으로 사용된다. 

 

 

 

'MalwareAnalysis > Lena' 카테고리의 다른 글

Lena 1. ollydbg 사용 및 Reverse me  (0) 2022.01.25