lyl -2부

2020. 4. 30. 15:320x02 Reverse Engineer/0x03. Etc

728x90

1부에서는 코드를 작성하기 위해 세분화하는 작업을 했다면, 2부에서는 1부에서 다루지 못한 세부적인 사항들을 들여다보는 작업을 진행한다.

 


어셈블리어를 이해하고 있다면 보기에 편하다.

어셈블리어 하나하나 설명하기엔 너무 noisy라 배제한다.

 

1부에서 언급한 'ㄹ'이 출력되는 이유에 대해 알아보고 넘어가자.

 

여러 가지를 입력하면서 규칙성이 있는지 파악해보자.

양, 수의 경우 릘로 나와서 오 첫 번째는 무조건 릘인가? 할 수 있었지만 휴를 테스트해보니 릘릴이 나왔다.

그렇다면, 1부에서 놓친 부분 즉, 상세한 분석을 좀 더 진행해야 한다.

한글을 세분화해서 프로그래밍을 해두지 않았을까? 하는 고민을 잠시 해볼 만 하지만, 1부의 연산과정을 보면 단독 초성으로 작업하지 않는 것은 확인해둔 상태이다.

연 : ㅇ ㅕ ㄴ

가 : ㄱ ㅏ 

 

 

1부에서 'ㄹ'을 잠시 언급했다. 기억이 안 나면 다시 읽고 오면 된다 ^0^;;

 

분석 요약을 하자면 다음과 같다.

릴 친구를 처음 만나기 전엔 EBP값이 0이기 때문에 ㄹ을 출력하지 않는다.

예를 들어 '연'을 입력했을 때 연이라는 단어 때문에 ㄹ이 출력되는 원리가 아니라는 것이다.

 

릴 친구들을 출력하고 나면 EBP값이 바뀌게 된다. 

사실, 릴 친구 출력 전에 슬쩍 inc ebp를 해두기 때문이다.

 

릴 친구 출력 -> EBP 증가 (X)

EBP 증가 -> 릴 친구 출력 -> EBP를 EAX에 재 대입 -> 조건 파악 -> ㄹ 출력 or 평범한 릴 친구들 출력 결정

 

//문장 중간중간 'ㄹ'이 들어가는 것은 케이스가 0xB보다 클 때 && test값이 참이 아닐 때를 의미함을 새롭게 알게 된다.

[처음 분석할 때 이렇게 판단함]

 


숨겨진 값의 의미를 찾아라

 

Case 연 : 0x1 -> 0xA -> 0xA -> 0x17 -> 0x7

Case 어 : 0x1 -> 0x2  ...  

유동적 데이터 임을 알 수 있다.

 

// Case가 0xB보다 클 때는 지금과 같은 상황이다.

ex. 0x17

 

쭉 따라가다 보면 또 다른 분기를 만나게 되는데 이 분기에서 릘 이라는 문장을 쓸 것인지 말 것인지가 결정된다.

여기서 알 수 있는 건 1부에서 EBX에서 B까지 비교하여 케이스를 세분화하는 과정에서만 릘, 륄 이런 친구들이 쓰이는 게 아니라 여기서 페이크식으로 한번 더 강제로 사용한다는 것이다.

아울러, 릘과 리는 한 세트임을 알 수 있다.

하지만, EBX에서 분기되는 그 릴 친구들과는 별개로 생각해야 한다.

가령 릘을 성공적으로 출력하게 되면, 하기의 사진 중 첫 번째 print에 진입하게 되고, print가 반환 된 후 instruction은 변동 없이 아래로 떨어진다. 즉 리를 만나서 출력한다는 것이다.

PoC는 EBX에서 분기되는 친구들을 무시하고 그냥 릘과 리가 세트 인 녀석을 표시해보았다.

생각이 맞는 거 같다.

테스트 중인 '연'으로도 보자.

1] 실제 바이너리 실행

2] 디버거를 통해 실시간으로 체크


조건을 조작하여 의미 파악을 하라

 

je -> jmp

접근 주소는 다음과 같다.

%uB2B4 '늴' 을 출력한다

 

조작함으로써 알게 된 것은 ECX가 0이 되면 늴을 출력한다.

ECX가 0이 되는 조건은 음절 혹은 다른 조건일 때 일 것(어절)이라는 것을 추측할 수 있다.

 

영상을 요약하면, 연과 어를 통해 암호화를 마구마구 진행을 하고, 각 케이스에 맞는 난독화 문자열을 출력한다.

한 글자와 2글자로 테스트를 진행함으로써 음절은 늴이 아님을 증명한다.

닐은 음절에 속한다.

 

조건 분기문 하나를 조작함으로써 빠른 시간 내 2가지 기능을 익힐 수 있다.

 

 

 

그렇다면, 늴은 어디서 나오는 걸까? 문장을 입력하다 보면 스페이스(어절)를 반드시 이용하게 된다.

예를 들어, 오늘은 부처님 오신 날이다. 그래서 출근 안 한다.

오늘은부처님오신날이다그래서출근안한다라고 사람들은 잘 쓰지 않는다.

이를 생각하며 동적 진행해보았다.

역시나, 영상에서 나오지 않은 늴은 어절을 통해 출력된다.

 

 

 

너무 길어진다. 3부로..

'0x02 Reverse Engineer > 0x03. Etc' 카테고리의 다른 글

CRACKME constant ver 01  (0) 2020.07.04
lyl -3부  (0) 2020.04.30
lyl -1부  (9) 2020.04.30
Rootme Prob . ELF x86 - KeygenMe  (0) 2020.02.06
KaKaoTalk MacOS Analysis  (0) 2020.01.26