연산 루틴 리버싱 - 시리얼 추출 방법
F-Secure Reverse Engineering (FSC)
2007년 F-Secure 해외 백신 회사에서 개최한 리버스 엔지니어링 대회 문제들이다
문제의 스타일은 일반적인 시리얼 연산 루틴이 주를 이루고 있다
※ 공부 목적으로 문제를 풀기 때문에 최대한 분석하고 여러 방법으로 푸는 것을 목적으로 했습니다
FSC Level 1
00. FSC_Level1.exe를 실행
정답을 입력하지 않을 경우 Sorry, this key is not valid! 라는 문구가 나오는 것을 확인했다
01. PE 분석하기
분석 도구 : PEview, PEiD
분석 순서 : 패킹 여부 확인 -> PE 구조 파악 -> Import 함수 확인
[1] 패킹 여부 확인
컴파일러 부분에 Noting found * 이 출력된 것을 확인 할 수있다 이런 경우 PEiD에서 캐치하지 못했을 경우가 있어 패킹이 되었다 확정 지을 수 없다
확인 할 수 있는 것은 Entrypoint 0x111E, EP Section : .text, Subsystem : Win32 console 인것을 확인 할 수있고
[2] PE 구조 파악하기
[2-1] PEiD를 이용하여 파악하기
가장 중요하다고 생각드는 ImageBase : 0x69000000, BaseOfCode : 0x1000, EntryPoint : 0x111E 인것을 확인했다
코드가 시작되는 위치는 0x69001000(ImageBase + BaseOfCode)인것을 여기서 파악할 수 있다
[2-2] PEview를 이용하여 파악하기
PEview도 PEiD에서 확인 한것과 같은 것을 파악했다
[3] Import 함수 확인
[3-1] PEiD
Import 함수에서 printf, fgetc, scanf, sprintf, _stricmp 함수들을 확인할 수 있다
이 함수들을 통해 입력 받은 값을 비교하는 것을 알 수 있다
[3-2] PEview
PEview도 PEiD에서 확인 한것과 같은 것을 파악했다
02. 코드 분석하기
분석 도구 : x32dbg
[1] 코드 분석하고 풀기
0x6900106D 부분부터 0x690010A9를 확인하면 CER70msA라는 문자열을 확인할 수 있지만
이 것을 역으로 저장되는 것을 생각하면 Asm07REC라는 문자열이 나오는 것을 확인할 수 있다
그리고 0x690010C9에 브레이크 포인트를 걸어두고 실행시킨다음 아무 값을 넣으면 메모리와 0x69003310에 대한 값이 Asm07REC라는 것을 확인할 수 있다
[1-1] 결과 입력하기
[2] 코드 변조하기
[2-1] JMP문을 수정하기
0x690010C9의 JNE문을 JE로 바꿔서 정답이 아닌 값을 이동시킨다
JNE문을 JMP로 바꿔도 바로 Congratulatuons!를 띄울 수 있다
[2-2] NOP을 이용하여 프리 패스하기
NOP을 사용해서 무시하고 바로 결과를 출력시킨다
'개인 공부 > 리버싱' 카테고리의 다른 글
Reversing Lena1 (0) | 2023.05.24 |
---|---|
Reverse Engineering-12(FSC_Level2) (0) | 2023.05.18 |
Reverse Engineering-10 (MFC) (1) | 2023.05.08 |
Reverse Engineering-009(strcat ~ strlwr) (1) | 2023.04.27 |
Reverse Engineering-008(strcpy) (0) | 2023.04.23 |