정보보안/리버싱 입문

리버싱에 익숙해지기

b1ackhand 2022. 2. 25. 16:57

abex' crackme 3번 예제를 이어서 공부해본다.

 

시작전에 detect it easy 프로그램을 이용하면 이 프로그램에 관한 정보를 얻을 수 있다.

 

함수 호출 규약 : 인자를 전달하는 방식이나, 함수 실행이 끝나고 스택을 정리하는 방식에대한 약속

-cdecl : 오른쪽->왼쪽 스택전달, 함수가 종료될때 호출자가 스택프레임 정리

-stdcall : 오른쪽->왼쪽 스택전달, 함수가 종료될때 피호출자가 스스로 스택프레임 정리

-fastcall : 오른쪽->왼쪽 레지스터전달, 레지스터를 사용해서 스택정리 x

 

시작 부분에서 모든 분기점을 한눈에 볼 수 있다.

CreateFileA에서 파일여부를 확인하고

GetFileSize에서 파일사이즈를 확인해서 통과시키는것같다.

CMP EAX,12 인걸 보니 사이즈 18byte인 파일이며

abex.l2c 라는 파일이 필요한것같다.

 

메모장에 18byte크기로 만들고 변경해준다.

 

바로 4번째 예제로 넘어가 보았다.

 

보시다시피 정답 serial을 입력하면 되는것같다.

 

비주얼베이직

- 그래픽 기반으로 화면을 구성하고 이벤트를 등록해 프로그램을 만듬

- 내부에서 호출되는 API가 MSVBVM60.DLL에 소속

- 인터프리터 방식으로 동작

 

All intermodular calls : 모듈에서 호출하는 API

 

위 검색으로 StrCmp를 사용하는 부분을 찾았다.

아래에는 JZ로 분기하는게 보인다.

 

TEST DI, DI 이후에서 ZeroFlag를 바꿔서 정답이나오게하자

잘 되는것을 보니 저 지점이 비교하는 부분이 맞는것 같다.

 

TEST DI 윗부분을 보면 EDI를 이용하여 여러 연산을 한다.

더 윗부분을 보면 StrCmp 결과가 EAX에 저장되고 이를 EDI에 넣는다

StrCmp가 실행되며 레지스터에 어떤값이 저장되는지를 보면 Serial을 추측할 수 있을 것이다.

 

답이 잘 나와 있다

 

이어서 5번째 예제 까지 본다.

마찬가지로 Serial을 찾는것이다.

이 프로그램은 Delphi로 만들어졌다.

 

윈도우 제공 기본함수 구조를 먼저 알아본다.

위 부분은 GetVolumeInformation() 함수를 사용하는 부분이다.

다음줄까지 실행이 되면

다음과 같이 바뀌게 된다.

이를보고 다양한 윈도우 API들을 입출력값이 어떻게 저장되는지를 인지해야 된다고 한다.

 

위 프로그램을 분석해보면

시스템정보, 볼륨정보를 가지고와서 문자열과 결합해 일련번호를 생성하는것 같다.

책에서는 이 문자열 생성과정을 직접 알려준다.

그리고 답은 다음과 같다.

 

'정보보안 > 리버싱 입문' 카테고리의 다른 글

리버싱의 어려운 문제들  (0) 2022.03.04
리버싱, 좀 더 깊숙이  (0) 2022.03.01
리버싱시작하기(2)  (0) 2022.02.22
리버싱 시작하기(1)  (0) 2022.02.21
리버싱을 위한 기초 지식  (0) 2022.02.15