CrackMe 시리즈의 역분석——CrackMe001

CrackMe 시리즈의 역분석——CrackMe001

예전에 배웠던 리버스엔지니어링을 다 잊어버리고 최근에 다시 배우기 시작했는데 이번에는 CrackMe부터 시작했습니다.
이 시리즈의 CrackMe 리소스는 모두 I love cracking network 에서 가져온 것입니다 .

1. 프로그램을 실행하고 일련 번호를 입력하면 팝업 창이 나타납니다.
여기에 이미지 설명을 삽입하세요.
여기에 이미지 설명을 삽입하세요.
2. 메인 창 프로그램에 들어간 후 중단점을 설정합니다: bp MeaasgeBoxA 또는 MessageBoxW는 어느 것이 호출되고 있는지 모르기 때문입니다.함수(메인 창 아래 새 창의 중단점은 오류 메시지가 표시될 때 일시 중지되는 것입니다)

3. 깨진 위치를 찾습니다:
여기에 이미지 설명을 삽입하세요.
4. 그런 다음 ctrl + F9를 역추적하여 기본 창 프로그램이 아닌지 확인하고 계속해서 역추적합니다.
여기에 이미지 설명을 삽입하세요.

5. 계속 역추적 Ctrl+F9: 여기에 이미지 설명을 삽입하세요.
6. 의심되는 주요 프로세스 찾기:
여기에 이미지 설명을 삽입하세요.
7. 분석 및 기록. 이 부분의 입구는 다음과 같습니다.0042F998
익숙한 문자열 찾기"다시 시도하십시오!" “죄송합니다. 일련번호가 잘못되었습니다! 문자열, 이전 데이터 분석을 수행하고 새 문자열을 발견합니다.“축하해요!!” “잘했어요 친구 =)”일련번호 뒤의 문자열을 정확하게 입력한 것으로 의심되며, 동시에jnz 짧은점프는 오류 처리 부분을 가리키며, 일련번호가 올바르게 검증되면 계속해서 다운되어 올바른 일련번호로 처리 기능(팝업창)을 실행하고, 일련번호가 틀리면 에러 처리 기능 팝업창이 실행됩니다.(팝업) 이 경우 우리는 직접jnz명령문을 수정하고 다음으로 직접 변경하십시오.안돼그게 전부입니다. 일련 번호가 정확할 때 프로그램이 처리 기능을 직접 실행하도록 하십시오.

여기에 이미지 설명을 삽입하세요.
8. 그러나 실행 후 오류가 보고되었습니다.

여기에 이미지 설명을 삽입하세요.
9. 분석, 원래 어셈블리 코드 길이가 4바이트이고 nop가 2바이트에 불과하기 때문에 오류가 발생하므로 여기서 nops 2개를 교체해야 합니다. 10. 계속 실행, 성공: 11. 이전 작업
여기에 이미지 설명을 삽입하세요.
일부
여기에 이미지 설명을 삽입하세요.
이후 끝났으니 다음으로 전체 프로그램의 일련번호 생성 기능을 검색하겠습니다 분석: jnz에서의 점프는 jnz 이전에 일련번호가 확인되었음을 나타내므로 계속해서 되돌아봅니다.jnz이전 주소0x0042FAFE정확히 함수 호출이 있습니다.004039FC로 전화하세요12. 이 함수 앞에는 함수 호출이 많기 때문에 단일 단계 분석을 수행해야 합니다 .
여기에 이미지 설명을 삽입하세요.
0x42F5E동일한 일련번호 오류가 다시 발견되었을 때 처리 기능:
여기에 이미지 설명을 삽입하세요.
13. 분석, 이 기능 이전에 처리 기능이 있습니다.jge 짧은점프의 주소가 이 함수의 처리가 끝난 후 다음 명령어인 점프, 즉 이전에 어떤 판단이 내려진 상태이므로 조건이 맞으면 계속 진행하고, 조건이 맞지 않으면 계속 진행한다. , 시퀀스 번호 오류에 대한 처리 기능이 실행됩니다.~도이전에는 eax의 값을 4와 비교하여 점프 여부를 결정했습니다.cmp 앞에 정확히 호출 함수 호출이 있습니다., 호출 함수의 반환 값은 일반적으로 eax에 저장되므로 이 함수는 일련 번호에 대한 일종의 판단 함수일 가능성이 높습니다.

14. 분석을 위해 다음 함수를 입력합니다.
여기에 이미지 설명을 삽입하세요.
15. 이 함수는 단순한 길이 계산 함수이므로 여기서 판단은 먼저 입력 데이터의 길이를 확인하고, 4보다 크면 아래쪽으로 진행하고, 4개 미만이면 실행하세요. 잘못된 팝업창이 뜹니다만, 현재로서는 사용자 이름을 확인하는 것인지, 일련번호를 확인하는 것인지 알 수 없습니다.

16. 여기서 잠시 휴식을 취한 후 데이터를 살펴보겠습니다.전화 00406930eax는 직전에 값을 할당받았고 호출이 호출되기 전에 매개변수를 전달해야 하는데 eax를 사용하여 전달될 가능성이 가장 높으며 eax에 대해 메모리를 검색한 결과 입력한 사용자 이름: 17인 것을 알 수 있습니다. 따라서 여기서 논리는
여기에 이미지 설명을 삽입하세요.
여기에 이미지 설명을 삽입하세요.
여기에 이미지 설명을 삽입하세요.
먼저 이름을 확인하는 것입니다. 분석을 계속해 봅시다. 일반적인 논리에 따르면 사용자 이름을 확인한 후 일련번호 확인을 해야 합니다.jge 짧은점프 주소는0042FA79, 그런 다음부터 시작합니다.0042FA79는 현재 일련번호 확인 기능의 주소 0x0042FAFE까지 분석되었습니다..
18. 단일 단계 실행을 수행하고 동시에 스택을 보고 분석하며 관련 결과는 다음과 같습니다.
여기에 이미지 설명을 삽입하세요.
스택 입력은 다음과 같습니다.

여기에 이미지 설명을 삽입하세요.
19. 전체 일련번호 계산 부분의 논리는 다음과 같습니다.

1) 사용자 이름의 첫 번째 문자를 가져와 곱셈 계산을 수행하고, 계산 결과에 2를 곱하여 주소에 저장합니다.[431750]에, 여기는0x19F2 값은 "6642"입니다.
2) 이후 스트링 스플라이싱(string splicing)을 수행하여 일련번호 생성을 완료합니다.이 부분은 일련번호 생성 기능에 있습니다.004039AC로 전화하세요완전한. 처음 4개의 푸시는 모두 매개변수로 전달되며 이는 단순한 문자열 연결이어야 합니다. 생성된 시퀀스 번호는 로컬 변수 4에 저장됩니다."CW-6642-깨짐")。

20. 그 중전화 00403708함수가 어떤 실질적인 기능을 가지고 있는지는 확실하지 않습니다. 그 기능 중 하나는 지역 변수에 값을 할당하고 문자열 "CW"와 "CRACKED"를 각각 할당하는 것입니다.전화 00406718나는 그것이 무엇인지 잘 모르겠습니다. 누군가가 그것을 설명할 수 있기를 바랍니다.

21. 프로그램의 또 다른 부분은 일련번호(비밀번호는"친구 안녕!"), 다음과 같습니다:
여기에 이미지 설명을 삽입하세요.

Supongo que te gusta

Origin blog.csdn.net/weixin_39561364/article/details/108082265
Recomendado
Clasificación