CodeEngn Basic 16

Kail-KM
|2015. 6. 2. 03:11

문제 확인






풀이


우선 아래와 같이 Name에 맞는 Password를 구하는 것으로 성공 분기점을 통해서 손쉽게 답을 찾을 수가 있다. 




추가 분석


이제 암호화 알고리즘에 대하여 분석을 해보자 우선 암호화는 패스워드를 입력 받기전과 입력 받은 후와 같이 두번의 과정을 걸친다. 바로 밑의 그림에서는 커서가 위치한 곳의 윗부분 주석있는 곳이 첫번쨰 과정이고 밑의 주석 부분이 두번쨰 과정이다.

첫번째 과정의 경우 Name의 길이 만큼 값이 반환이 되어 총 그 값을 3번 더한 값에서 SHL_2로 인하여 2칸 왼쪽으로 이동을 한다. 그리고 그 값을 이제 밑의 과정에서와 같이 0xACE80과 곱하여 주고 그 값과 기존의 값을 더하여 준다. 이 곱셈 과정에서 8자리가 넘어가게 되는데 여기서 우리는 8바이트만을 인식하게 된다.

곱한 값과 기존의 값을 더하여 주면 PassWord의 값이 나오고 이를 16진수에서 10진수로 변환하면 답이 된다. 여기에서 추가적으로 암호화 알고리즘의 인자로 쓰이는 것이 문자열의 길이 하나 뿐이기 떄문에 문자열의 길이가 같으면 Password 또한 같다는 것을 확인 할 수가 있다.


위에서 설명한 과정과 같이 CodeEngn을 인자로 주어 return 값으로 8을 받게 되어 알고리즘을 거치게 되면 0xE4C60D97이 나오게 된다. 이제 이를 10진수로 바꾸어서 입력을 해주면 크랙에 성공하는 것을 확인 할 수가 있다.


밑의 사진은 문자열의 길이만 같다면 문자가 다르더라도 값이 같다는 것을 확인 할 수가 있다.


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

CodeEngn Basic 18  (0) 2015.06.03
CodeEngn Basic 17  (0) 2015.06.02
CodeEngn Basic 15  (0) 2015.06.02
CodeEngn Basic 14  (0) 2015.06.02
CodeEngn Basic 13  (0) 2015.06.02