2021. 5. 6. 18:43ㆍ악성코드 분석
1. easy-crackme1.exe 실행
단서1 : ‘input:’ 이라는 문자열을 찾음
가설1 : input이라는 문자열이므로 무언가를 입력하는 부분 같음, 디버깅할 때 input이라는 문자열로 main함수나 중요한 부분을 찾을 수 있겠다는 생각을 함
2. main 함수
결과1 : 가설대로 main 함수를 찾을 수 있었음
함수 설명 : %d(정수)라는 자료형을 두 개 입력받고 정수를 가지고 easy-crackme1 (1).140001180이라는 함수를 불러와 어떠한 조건으로 검사하고 correct!인지 wrong!인지를 확인한다.
가설1 : 설명에 있던 함수의 리턴값이 1이여야 test 연산을 하면 1이 되어 ZF값(ZF -> 0)이 세팅되지 않기 때문에 je문에 만족하지 않게 되어 correct! 값을 출력하게 될 것 같다.
3. easy-crackme1.140001180 함수
함수 설명 : 입력받은 정수들(ex. 첫 번째 수를 x, 두 번째 수를 y라고 하겠다.)을 받아온 후 여러 가지 조건들을 만족하면 xor eax eax를 실행하여 1(??)을 리턴할 것이다.
1. 첫 번째 조건 : x는 0x2000보다 크고 y는 2000보다 작거나 같아야 한다. (x > 0x2000, y <= 0x2000)
2. 두 번째 조건 : x와 y를 곱한 값은 0x6AE9BC가 되어야 한다. (x * y == 0x6AE9BC)
3. 세 번째 조건 : x 나누기 y 한 값은 소숫점을 버리고 4가 되어야 한다. (x // y == 4)
4. 네 번째 조건 : x 와 y를 xor한 값이 0x12FC가 되어야 한다. (x^y == 0x12FC)
4. 조건 해결을 위한 python 프로그램
코드 설명 : 위 조건들을 가지고 순서대로 해결해 나아갔다.
'악성코드 분석' 카테고리의 다른 글
지역변수 출력 (리버싱 유형 - 1) (0) | 2021.03.17 |
---|---|
메모리 구조 (0) | 2021.02.25 |
abex' crackme #1 write-up (0) | 2021.02.06 |
x64dbg 사용법 (0) | 2021.01.30 |
리버스 엔지니어링 기초 (레지스터 및 명령어) (0) | 2021.01.28 |