kaka09
code engn basic 7 본문
[사진] 1-1
해당 문제는 C드라이브의 이름을 CodeEngn 으로 바꿨을때 시리얼이 어떻게 변하는지를 묻는 문제다. C드라이브를 바꾸기전에 생성되는 시리얼 값을 분석해보자
[사진] 1-2
004010d0 영역에 있는 DialogBoxParamA 함수에 의해 생성된 입력창에 AAAA를 입력하면 [사진]1-2 처럼 String2에 AAAA가 들어간다. 그리고 밑에 있는 String1 영역에 시리얼 값처럼 보이는걸 확인 할 수 있다. 밑에 IstrcmpiA 라는 문자열 비교함수를 실행시키는 것을 미루어 보아 문자열이 서로 일치하는지 비교하는 함수인것 같다.
[사진] 1-3
그대로 값을 넣어보고 실행하면 [사진]1-3 처럼 시리얼 값이 틀리다는 경고창이 출력 된다. 그럼 이제 String1에 들어있는 값을 입력하여 어떻게 처리하는지 지켜보자
[사진] 1-4
String1에 들어있는 값으로 입력하였더니 serial 번호가 일치한다는 창이 출력되었다. 즉 String1에 들어 있는 값이 serial 값임을 알 수가 있다. 그럼 이제부터 C 드라이브를 CodeEngn으로 바꿔서 시리얼값이 어떻게 변하는지 확인해보자
[사진] 1-5
C드라이브를 CodeEngn으로 바꿔도 아무런 변화가 없어서 D드라이브에 CodeEngn 으로 바꿨더니 제대로 인식이 되었다. 아무튼 D드라이브를 CodeEngn으로 바꿔 보았더니 String1의 값이 바뀐 것을 확인 할 수 있다.
[사진] 1-6
GetVolumeInformation 이라는 함수에 의해 드라이브의 정보를 갖고오고 그것을 conoatString에 전달해주는 식의 원리로 파악된다. 따라서 C드라이브의 이름이 바뀌면 변경된 드라이브명이 conoatString에 담겨진다고 볼 수 있다. 그 다음 IstrcatA 함쑤예 의햬 CodeEngn과 4562-ABEX 값이 합쳐져 CodeEngn4562-ABEX 으로 된다.
[사진] 1-7
그 다음 ADD DWORD PTR DS: 명령어에 의해 Code 총 4글자가 각 한글자씩 +1을 진행한다. code->dode->dpde->dpee->dpef 순으로 EDX 례지스터가(정확히는 DL) 0이 될 때 까지 반복한다. 최종적으로 반복하고나면 Code->Eqfg 값으로 변화된다.
[사진] 1-8
그리고 L2C-5781와 EqfgEngn4562-ABEX 값이 합쳐져 L2C-5781EqfgEngn4562-ABEX와 같은 형태가 되면서 최종 키 값이 생성 된다고 할 수있다.
'Reversing' 카테고리의 다른 글
code engn basic 9 (0) | 2017.08.01 |
---|---|
code engn basic 8 (0) | 2017.08.01 |
code engine basic 6 (0) | 2017.07.31 |
code engine basic 5 (0) | 2017.07.27 |
code engine basic 4 (0) | 2017.07.27 |