출처 : http://cafe.naver.com/boanproject/23607



IDA Pro를 이해하는데 좋은 콘텐츠네요.


Unpacking Pykspa Malware With Python and IDA Pro - Subscriber Request Part 1


Reverse Engineering Anti-VM Detections in Malware - Subscriber Request Part 2



서준석 부대표의 강의도 있습니다. :)


1. 개요
파일과 함께 지문이 주어짐

시리얼이 5B134977135E7D13일때 이름을 구하시오.

2. 분석
먼저 CFF로 본 결과,


패킹이 되어있지 않다.

Olly로 한번 돌려보고 스택을 따라서 HxD덤프를 떠본결과

7D415E66415E가 떳다.
참고로 12글자이다. 이로 유추할수 있는게, 이름을 입력하면 키길이는 그 두배 만큼 나온다는 것이다.

그리고 나는 이곳이 키를 만드는 구간이라고 생각했다.


그럼 저부분을 역추적해서 5B134977135E7D13가 나오게 하면될것이다.
우선 키 길이는 16이므로 입력된 이름은 8글자일 것이라는 것은 알고 가자.

이번에는 예시로 abcdefgh를 입력하였다. 결과로는
HEX : 37 31 34 32 35 33 37 34 34 35 35 36 37 37 34 38
ASCII: 7  1  4  2  5  3  7  4  4  5  5  6  7  7  4  8
이렇게 나왔다. 규칙성을 여기서 하나더 추론하자면, 31,32... 이것들은 16진수 아스키코드에서 30을 더하면
61,62,63... 고로 a,b,c..가 된다.

우리의 목표는 5B134977135E7D13을 띄우는 것이기에 일단..
HEX : 
ASCII: 5  B  1  3  4  9  7  7  1  3  5  E  7  D  1  3
이름 : K???????

이번에는 Kabcdefg를 입력하였다.
HEX :  35 42 34 31 35 32 37 33 34 34 35 35 37 36 34 37
ASCII:  5  B  4  1  5  2  7  3  4  4  5  5  7  6  4  7
겁나 신기하다.. 각 밑줄에서 홀수번째 숫자가 4,5,7반복된다..

그럼 다음 숫자는 13+20을 한 33, 16진수로 3 까지 하면 맞다.

K3abcdef를 입력해보자.
사실 여기서 나는 특별한 규칙을 찾았다.


이곳에서 연산이 되는 것이다!!! 고로 이곳에서 BP를 걸어주고 계속 연산한 값을 추측해볼 수 있다.
그럼 3번째는 어떻게 되냐면


EDX=a ECX=30이 되었다! 여기서 XOR연산을 하면

예상대로 51이 나왔다..
그럼 이미 답은 유추할 수 있게 되었다 ㅋㅋㅋ

다시말하지만 우리의 목표는 5B134977135E7D13을 띄우는 것이기에
5B 13 49 77 13 5E 7D 13이 숫자들을 각각 10 20 30 40 50 60 70 80으로 xor를 해준다.........
인줄 알았으나 다시 돌려보면 ECX가 싸이클당 10,20,30순으로 루프한다.

다시 계산하면
5B 13 49 77 13 5E 7D 13
10 20 30 10 20 30 10 20
각 연산하면 4B 33 79 67 33 6E 6D 33
16진수 아스키 변환하면 K3yg3nm3

클리어!

'Reversing > Reversing.kr' 카테고리의 다른 글

Reversing.Kr 001 Easy Crack 풀이  (0) 2017.07.04
일단 코드엔진과 다르게 지문이 없다.

그냥 바이너리만 주어짐.

바로 OllyDBG로 열어서 스트링값들을 봐보자


5y, R3versing.. 

이것들을 보자마자 키값이 흩어져있다는 것을 어느정도 감잡아야한다.


바로 처음시작부분에 BP를 걸어주고,

여기서는 동적으로 보다기보단 정적으로 한번 보고
키값을 찾는 식으로 해야할 것이다.

점프문 주변에 먼저 BP를 걸어주고 분석을 시작하자

manvan입력하고 확인 누르고

여기서 멈추는데 밑에보면
ESP+5(0019F6CD)에서 'a'와 맞는지 비교를 하고

틀리면 실패하는 구문으로 점프뛰어버리게 만들었다.
그리고 스택부분에 보면

위와 같이 ESP+4부터 내가 넣은 값이 들어가있었다.
그렇다면 ESP+4가 시작위치인것이고, 여기의 주소는

0019F6CC였다.

일단 여기서 유추할 수 있는 것은
두 번째 문자는 a라는 것이다.

?a?????라는 것이다.

계속 해보자

그러면 이곳 ESP+A부분을 가져오고
5y를 푸쉬한다.

일단 ?a5y??인것 같아서 다시 시작해서
입력값을 바꾸어보았다.


맞게 넘어갔다.
여기서 ?a5y????~인것은 확정

같은방법으로 아래에 있는 R3versing도 이어진다 생각하여 값을 바꿔서 또 해보았다.


그 결과,
분기문을 잘 점프하였고
이 싸이클에서는 한글자 한글자 검사하는 부분이다.


그 결과 여 분기문에 왔고 마지막에
ESP+4와 비교하는 구문이 보였다!!!!

그러면 여기서 45가 16진수 아스키코드료 표현하면 E가 되고
쭉 이어서 다시 적으면
Ea5yR3versing이 된다.

다시 실행해서 위 키값을 입력하면.


성공하였다

'Reversing > Reversing.kr' 카테고리의 다른 글

Reversing.Kr 002 Easy Keygen 풀이  (0) 2017.07.04
1. 지문


2. 분석
우선 파일 정보를 확인

UPX 2.90 패치되어있으니 원활한 분석을 위해 언패킹을 먼저함

IDA로 열면 오류를 뿜어대길래
Olly로 열 수 밖에 없었다.

언패킹된 문제 바이너리를 열면

이렇게 다양한 함수들을 볼 수 있다.

우선 스트링을 검색해서 실패로 의심되는 문구를 출력하는 부분을 찾아보자


더블클릭하고 이동하면

이 곳으로 이동된다.

(미리 디버깅을 하고 핵심 BP들을 걸었다)

조금더 위로 올라가면 빨갛게 BP가 걸린부분인
4012FB가 있는데 저기가 내가 입력한 이름부분이다.

자. 문제에서 CodeEngn/12345(아무숫자)를 입력하고 CHECK를 눌러보자

그럼 저렇게 두 군데가 변경될 것이다.
그리고 왠만하면 아랫부분(401300~40132C)이 패스워드 부분을 결정하는 곳이라고 생각을 할 수가 있었다.
왜냐하면 별달리 키값을 조정하는 부분을 찾지 못했기 때문이다.

아 미리 알아둘게 있는데, 문제지문에서 숫자5자리라 했으니, 왠만하면 특정 주소에 값이 저장되어 있다는 것도 대강 눈치를 채야한다. 문자열이아니라.

키값 뽑는 분석은 나중에하고, 바로 결론부터말하면
40133A부분에 ESI부분을 보면 키 값을 볼 수가 있다.

패스워드는 76193이다.

이제 디버거 다시 실행해서 저 숫자를 패스워드로 입력하면

성공했다!

'Reversing > CodeEngn Basic RCE' 카테고리의 다른 글

CodeEngn Basic RCE 13 풀이 (최초 C# 분석??)  (0) 2017.07.04
CodeEngn Basic RCE 12 풀이  (0) 2017.07.04
CodeEngn Basic RCE 11 풀이  (0) 2017.07.04
CodeEngn Basic RCE 10 풀이  (0) 2017.01.31
CodeEngn Basic RCE 09 풀이  (0) 2016.11.10
  1. 문제 지문
     

     별다른 특징이 없다. 그냥 키값 찾아서 인증만하면 되는것 같다.


  1. IDA로 열어보고, OllyDBG로도 열어보기

     OllyDBG로 열었더니 에러
     

     
     IDA로 열었더니 ...
     

     일단 코드는 나오나 처음보는 패턴이라 패쓰

     알아본 결과 이 문제는 C#으로 코딩이 된것이였다.
     C#으로 코딩되어있으니 OllyDBG를 통한 분석은 불가능이다.

     위 문제들을 해결하는 방법을 검색한 결과
     

     .NET Reflector를 이용해서 디버깅을 진행해야한다.
     
     (사용법을 먼저 조사하고..)

     

     프로그램 실행후 문제 파일을 불러오면 위와 같이 나온다.
     스샷은 메인 소스코드를 나타낸것. 

     이제 위 소스코드를 파악하면 된다.
     
     위 소스코드에서 해답을 찾기위한 코드를 보자면
     

     이 부분이다. 한 줄을 읽어 오는데, plainText와 같으면 된다..!
     그러면 우리는 plainText를 찾으면 된다.

     이 소스코드들을 추출하자.
     

     
     추출한뒤 plainText를 보기위해서 드래그한 영역을 추가로 적어주자.
     


     Ctrl+F5로 컴파일 해서 확인해보자.
     

     바로 Leteminman이라는 문자열이 출력되고

     이것을 값으로 입력해 주면된다.
     

+ Recent posts