Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

kaka09

Reversing.kr Easy_Keygen Write Up 본문

Reversing

Reversing.kr Easy_Keygen Write Up

kaka09 2017. 11. 1. 23:48


[사진]2-1




Keygen 이라는 이름의 프로그램을 봐서 이름에 따라 특정한 시리얼 값이 생성되는 프로그램으로 보인다. ReadMe.txt를 읽어보면  시리얼 값이 5B134977135E7D13 일경우 대응되는 Name 을 찾으라는 문제인것 같다. 일단 시리얼 값이 어떻게 생성되는지 디버깅을 통하여 알고리즘을 분석해보자 




[사진]2-2


일단 이름에 "1111"을 입력한후 키를 생성하는 코드를 찾아보았다. 키를 생성하는 코드는 사진에서 보이다 싶이 004010C6에 존재한다. REP 반복 명령을 통해 입력한 Name의 한 글자씩 특정한 아스키 코드 값으로 치환한다. 즉, "1111"->"21110121" 이라는 시리얼값이 도출된다.

좀더 상세한 분석을 위해 여러가지 값을 넣어보고 일정한 규칙을 발견하였다.






[사진]2-3


위 사진은 아스키 테이블이다. 해당 키젠의 재밌는 점은 아스키 번호에 따라 치환하는 방식이 다르다는 점이다. 알기 쉽게 규칙을 표현하면 사진과 설명을 같이 보자


1번 패턴  EX) Name에 alt+14(^N)를 3번 입력시 -> "1E2E3E" 라는 시리얼값 생성 (E+10, E+20, E+30)

2번 패턴  EX) Name에 alt+31(^_)를 3번 입력시 -> "0F3F2F" 라는 시리얼값 생성 (1F-10, 1F+20, 1F+10)

3번 패턴 EX) Name에 "!"(느낌표) 3번 입력시 -> "310111" 라는 시리얼값 생성 (21+10, 21-20, 21-10) 

4번 패턴  EX) Name에 "7" 3번 입력시  -> "271707"라는 시리얼값 생성 (37-10, 37-20, 37-30)

5번 패턴  EX) Name에 "A" 3번 입력시 -> "516171" 라는 시리얼값 생성 (41+10, 41+20, 41+30)

6번 패턴  EX) Name에 "^" 3번 입력시 -> "4E7E6E" 라는 시리얼값 생성 (5E-10, 5E+20, 5E+10)

7번 패턴  EX) Name에 "o" 3번 입력시 -> "7F4F5F" 라는 시리얼값 생성 (6F+10, 6F-20, 6F-10)

8번 패턴  EX) Name에 "z" 3번 입력시 -> "6A5A4A" 라는 시리얼값 생성 (7A-10, 7A-20, 7A-30)


이렇게 총 8개의 범위 블록을 지정하여 입력한 내용의 한 글자씩 아스키 코드에 따라 치환하는 방법이 달라진다. 하지만 여기서 주의할점 또한 있다.


위에서 "AAA"  -> "516171" 라는 시리얼값이 나온다고 했다. 만약 "AAAAA" 5번을 입력한다면 결과는 어떻게 될까? 

이런 경우 "5161715161" 로 값이 나오게 되는데, 이는 "AAA"="516171" + "AA"="5161" 형태로 이어붙여지게 된다.  똑같은 값이 3번 이상 반복되면 4번째 부터는 다시 처음 규칙으로 돌아가 치환이 된다는 점이다.


그렇다면  "1A5Poz" 같이 여러 서로 다른 패턴이 적용된 문자열을 입력하면 어떻게 될까?? 

"216105404F4A" 라는 값이 생성된다


"1" -> 4번 패턴에서 첫 번째 글자 패턴 적용(31-10) = "21"

"A" -> 5번 패턴에서 두 번째 글자 패턴 적용(41+20) ="61"

"5" -> 4번 패턴에서 세 번째 글자 패턴 적용(35-30)="05"

"P" -> 6번 패턴에서 첫 번째 글자 패턴 적용(50-10)="40"

"o" -> 7번 패턴에서 두 번째 글자 패턴 적용(6F-20)="4F"

"z" -> 8번 패턴에서 세 번째 글자 패턴 적용(7A-30)="4A"


위와 같은 방식으로 "216105404F4A" 라는 값이 생성되었다.  그렇다면 이제 "5B134977135E7D13" 이 값에 대응되는 Name을 찾아보자 총 16자리 이므로 Name은 8글자임을 알 수있다. 


"5B1349"

첫 번째 글자의 치환 규칙은 +10 or -10 이기 때문에 "K"(4B) 이다.

두 번째 글자의 치환 규칙은 +20 or -20 이기 때문에 "3"(33) 이다. 

세 번재 글자의 치환 규칙은 +30 or +10 or -10 or -30 이기 때문에 "y"(79) 이다.  

"K3y"


"77135E"

첫 번째 글자의 치환 규칙은 +10 or -10 이기 때문에 "g"(67) 이다. 

두 번째 글자의 치환 규칙은 +20 or -20 이기 때문에 "3"(33) 이다.

세 번재 글자의 치환 규칙은 +30 or +10 or -10 or -30 이기 때문에 "n"(6E) 이다.


"7D13"

첫 번째 글자의 치환 규칙은 +10 or -10 이기 때문에 "m"(6D) 이다.

두 번째 글자의 치환 규칙은 +20 or -20 이기 때문에 "3"(33) 이다.


따라서 각 글자를 모두 조합하면 다음과 같다. K3yg3nm3



[사진]2-4

'Reversing' 카테고리의 다른 글

Reversing.kr Replace Write Up  (0) 2017.11.02
Reversing.kr Easy_UnpackMe Write up  (0) 2017.11.02
Reversing.kr Easy_CrackMe Write Up  (0) 2017.11.01
code engn basic 18  (0) 2017.08.03
code engn basic 17  (0) 2017.08.02