정보보안

리버싱 - Crack(코드우회)과 키값찾기

Sweetft 2022. 4. 13. 11:57

어셈블리어명령어

https://yejprogramming.tistory.com/44

 

레지스터, 스택과 어셈블리어 명령어

레지스터 레지스터 : cpu 내부 존재하는 다목적 저장 공간, CPU가 고속으로 데이터를 처리하는 것을 가능하게 한다. 메모리스택 : 중앙 처리 장치와 붙어 있는 RAM의 일부분 CPU(마이크로 프로세서)

yejprogramming.tistory.com

 

오늘 실습한 리버싱은 우회리버싱과 키 값 찾는 리버싱이었다.

 

우회리버싱은 코드 수정을 해야하지만 키값 찾기는 코드수정이 필요없다.

 

ollygdb에서 crackme 파일 오픈

 

 

[F9]으로 실행을 하여 이렇게 Error 창이 나오는 것을 확인.

 

[Ctrl + F2] 재시작

 

F2로 40100C에 BP(Break Point)를 걸어줌. (시작메시지 박스가 나오기 직전)

 

[F8]로 해당부분까지 실행 - 시작 메시지 박스 출력

 

[Spacebar]를 눌러 명령을 수정

JE -> JMP

 

코드창에서 마우스오른쪽버튼->Copy to executable -> All modifications->Copy all

해당 창에서 다시 오른쪽 마우스로 Save

파일 저장

만든 파일 실행

아까 Error창이 나온 것과는 다르게 이번에는 YEAH! 우회 성공!

 

 

======================================

 

다른 크랙 실습 파일을 오픈

 

MessageBox(출력함수) 찾아서 성공메시지(Success!), 실패메시지(Failed...ㅠㅠ) 확인

 

출력함수의 윗 부분(해당 스크린샷의 맨 윗부분)에서 CMP와 JMP 명령을 찾음

 

CMP 명령 밑에 있는 JLE 확인

JLE : 점프 명령어로, 앞의 값이 뒤의 값 보다 작거나 클 때 실행됨.

즉, 이 JLE 명령어가 실행되지 않는 경우 바로 밑에 있는 성공메시지가 출력될 것이라는 것을 확인할 수 있음.

 

 

저장 후 실행~

해주면 Success!

 

 

=============================

 

abexcm 파일 오픈

 

messagebox 찾아주기

 

이번에도 CMP, JMP 명령 찾음

call 명령어에서 BP설정 

 

F9으로 실행 후 원하는 값 입력

 

push 명령어의 오른쪽 부분에서 입력값(000407)을 확인 가능하고,

그 밑에 있는 값은 입력값과 비교를 하는 값이므로 시리얼 값이라고 추측. 확인이 필요함

 

입력값은 00402324에, 시리얼값은 00402000 주소에 PUSH됨.

 

 

 

[ctrl+G]로 해당 주소로 가서 확인해보자.

 

시리얼 넘버 확인 가능

 

 

<<<캡쳐본 실종>>>

프로그램 실행 후 확인된 시리얼 넘버를 다시 제대로 입력하면

키값 찾기 성공!


=====================================

 

search for-all referenced strings에서 you failed 문자열 찾아서 더블클릭

 

 

 

 

 

키값찾기

'정보보안' 카테고리의 다른 글

인증 쿠키값 속이기 & 코드 품질  (1) 2022.05.25
[정보보안]웹해킹  (2) 2022.05.04
레지스터, 스택과 어셈블리어 명령어  (3) 2022.04.06