베지밀

[악성코드분석] find_random_number / find_number 본문

개인 공부/리버싱

[악성코드분석] find_random_number / find_number

vegimil 2024. 8. 9. 20:11

분석 툴 : x32dbg

 

crackme1_find_random_number.zip
0.02MB

 

입력값을 더하는 시스템

그러나 파일 이름에 맞게 random_number를 찾아야 한다.

 

ebp-8, ebp-C : 우리가 입력한 값

입력값이 401000의 인자로 들어간다.

 

call을 해서 401000함수로 진입

이때, 우리가 입력한 값이 ebp+8, ebp+C로 바뀌어있음

⇒ 이전 함수의 ebp 값을 스택에 저장해서 401000의 새로운 스택 프레임을 만들었기 때문에!!

 

add로 두 값을 더해서 return한다

다음 함수로 진입하면 다음과 같은 화면을 볼 수 있는데,

GetTickCount : cpu의 clock 타임을 가져온다 → 랜덤한 값을 가져올 때 많이 씀

eax에 01BE9EA7가 있고, idiv ecx를 하면

idiv를 통해 eax에 몫이, ecx에 나머지가 들어간다.

하위 연산을 통해 해당 함수의 최종 리턴값은 01이었고,

함수를 빠져나와 스택을 확인해보면 ebp-10의 위치에 01이 들어가있다.

ebp-4에 있는 계산된 값을 ebp-10과 동일하게 덮어씌웠다.

반복문을 잘 거쳐서 Good Job!이 출력되었다.

 

 

 


 

crackme2_find_number.zip
0.02MB

 

우선 printf와 scanf로 의심되는 함수에 레이블을 추가했다.

패스워드는 숫자로 이루어져 있다고 한다.

scanf 이후에 7F97E56C라는 값과 입력값을 비교한다.

패스워드는 2140661100임을 알 수 있다.

성공이요