이메일을 적으시면 보안관련 소식을 받을수 있습니다.
이메일:

안녕하세요 호환입니다. 벌써 개강을 한지는 일주일이 되었네요.
원래 리버싱은 수요일날 항상해왔으나 지난시간 개강의 여파로 인하여 부득이하게 기존 리버싱은 토요일
구글해킹은 일요일날 진행하도록 하겠습니다.

오늘은 올리디버거를 사용하여 C기반으로 제작된 프로그램의 작동원리를 알아보고 우리가 사용하는
수많은 키젠들이 어떻게 만들어지는지 그 과정을 알아보는 시간을 갖도록 해보겠습니다.

일단은 오늘 문제풀이과정에서 ASCII Table이 필요합니다.(http://www.asciitable.com)으로 가시면
아스키 코드표를 보실 수 있습니다. 물론 포스팅에도 캡쳐화면을 포함시키겠습니다.


그리고 오늘의 문제를 다운받아보겠습니다.
http://haiklr.new.fr/ 로 가셔서 Crackme 메뉴를 누르신후 Babylon keygenme를 다운로드 받아주세요.(첨부합니다)


다운을 받은 후 압축을 풀면 실행파일과 readme 파일이 생성됩니다. 일단 readme를 읽어보겠습니다.


C로 작성되어있으며 콘솔환경에서 실행이되는것을 알 수 있습니다. 실행파일을 실행시켜보면
아이디와 시리얼넘버를 입력하라고 하는것을 보실수 있습니다.
아이디에 test 시리얼에 1234 를 입력하면 불어로 실패했다고 뜹니다. 이번문제는 아까말했긋이
아이디 입력에따른 시리얼생성 로직을 분석하는것이죠.


이제 올리디버거를 열어 파일이 어떻게 만들어 졌는지 알아보겠습니다.
올리디버거를 열어 스크롤을 하다보면 아이디와 시리얼을 입력하는 C언어 구문이 써진 부분들을 발견하실 수 있습니다.
scanf 가 있는 부분이죠.


유저가 아이디와 시리얼을 입력하면 입력한 아이디에 따라서 시리얼을 생성하겠지요?
시리얼을 입력받는 부분바로 다음에 F2 키를 눌러 Breakpoint 를 걸어주고 F9로 실행을 해보겠습니다.
(한단계씩 진행하는것은 F8입니다.)한 단계씩 보다보면 입력받은 아이디 사이에 공백을 넣어서 
다시 스택에 저장하는것을 볼 수 있습니다.



다시 계속해서 진행을 하다보면은 위쪽에 있었던 이상한 문자들이 EAX에 들어오는것을 보실수있습니다.



이렇게 입력된 문자들을 INC 문구로 하나씩증가시켜 ASCII 상의 다음문자로 변환해줍니다.


그러면 원래 있던 문자는 다음문자로 변경이 됩니다. ".\$^^>~''',)>%+--*'/+0,,,\^\<0//?"
변경된 문자열과 입력한 아이디에 공백을 넣은 문자열사이에 XOR(exclusive OR)연산을 수행하여
코드를 생성하여 [EBP-160]에 저장하고 별도의 저장공간[EBP-360]에 위의 생성된 문자열을
역순으로 저장한후 앞의 1~3번째 문자열을 1?/ 로 변경해여줍니다. 




exclusive OR는 이진수로 같은값이 입력되었을때는 0을 다른값이 입력되었을때는 1을 반환합니다.
간단하게 "t" 와 "." 사이의 XOR 연산을 해보겠습니다.

t 의 경우의 16진 아스키넘버는 74 그리고 . 의 16진 아스키넘버가 2E 인것을 위의 표로 알수있습니다.
먼저 16진으로 표현된 각 자릿수를 이진수로 변환한후에 XOR 연산을 시행하여 줍니다.

t = 74 =  0111 0100
. = 2E = 0010 1110
=====================
            0101 1010 = 5A(HEX) = Z


이런식으로 공백까지 포함하여 XOR연산을 수행하여 준후 [EBP-460]에
역순으로 입력한 값과[EBP-360] XOR연산저장값[EBP-160]을 번갈아서 입력하여 주게되는데
바로 이게 생성되는 시리얼넘버가 되게 됩니다.
하지만 여기서 끝이아닙니다. 아래 어셈블리 코드를 보다보면 DS값이([EAX+EDX])1F 이하이거나 7A를  초과할시
모두 숫자를 6으로 변환하여 줍니다.(책에서는 EBP-460에 저장된 문자열의 값이라고 했는데 조금다르더군요) 


최종 생성된 시리얼은 다음과 같습니다.


우리는 test 4글자를 입력하였으므로 1Z66 을 입력하면 완료가 되겠습니다.


이상으로 Babylon keygen을 마치겠습니다.
위에서 설명한 시리얼 생성로직을 C나 기타다른 프로그래밍 언어로 코딩한다면
바로 그것이 keygen 이 되는것입니다. 이상 9월 첫째주 호환의 리버싱을 마치도록 하겠습니다.

이포스팅은 호환의IT이야기(http://tigernet.tistory.com)에 공동기재되고 있습니다.

 




****************************************************************************************************

본 포스팅의 저작권은 보안인닷컴과 작성자에 있으며 상업적 이용을 배제하며 콘텐츠 이용시에는 반드시 출처와 링크를 이용해 주시기 바랍니다. 무단도용은 저작권법에 저촉을 받습니다..

****************************************************************************************************

Posted by 53PE
,