실제 회원제로 운영되고 있고 판매하고 있는 프로그램인듯..

 

 

우선 로직은 엄청 복잡하게 짜놓았다.

 

파일 목록

 

 

 

C++로 제작 되어 있고 MFC UI로 제작되었다.

 

PE info

 

 

 

 

 

 

정상적으로 아무 ID/PW 입력을하고 로그인을 했고 메세지 박스가 출력된다.

 

 

 

단순 API BP만으로 쉽게 찾을수 있을거 같았지만 dummy code가 너무 많았다.

 

 

 

IDA로 확인을 했지만 동적 호출이 너무 많았고, back trace 과정에서 직접 디버깅을 해서 봐야했다.

 

ida1
ida2

 

 

 

 

서버측에 ID 존재 유무를 질의를 한 후 계정에 유무를 확인한다.

 

 

 

전체 로직에서 검증하는 과정이 2개가 존재 했으며 2개 전부 복잡한 로직 수행 뒤 값 검증을 했다.  

Check1: [ESI+2] 값을 통해 test 명령 뒤 분기를 하는데 1값이 아니면 에러 메세지를 뱉었다.

Check2: [EBP+8] 값이 3인지에 대한 여부를 검사한다. 단, 로그인 성공시 에는 1값이여야 정상 로직을 수행했다.

Check1

 

Check2

 

 

 

로직의 흐름은 전부 파악 했고 패치 작업을 해줘야 한다. Code Section은 W권한이 없기때문에 패치가 안된다. VirtualProtect 함수를 이용해 권한 할당을 해줘도 되지만 간단하게 W권한이 있는 DS 영역에 패치를 해줬다.

memorymap
.data
jmp to ds
Code Cave

Code Cave 방식을 택했으며 다른 방식은 값을 변경하기 애매한 디스어셈블들이 많았다.

 

 

최근에 게시글을 많이 못썼는데 앞으로는 자주 올릴예정....ㅠ

 

 

크랙킹 영상도 첨부했습니다.

 

'Crack' 카테고리의 다른 글

CodeEngn Advance RCE L08  (0) 2021.04.09
CodeEngn Advance RCE L09  (0) 2021.04.09
CodeEngn Advance RCE L02  (0) 2021.04.05

문제: Key 값이 5D88-53B4-52A87D27-1D0D-5B09 일때 Name은 무엇인가
힌트 : Name은 두자리인데.. 알파벳일수도 있고 숫자일수도 있고..

 

 

 

1. Name과 Key 입력 창이 나온다. 문제대로 Key값에는 5D88-53B4-52A87D27-1D0D-5B09을 넣고 Name은 아무값을 입력한다.

 


 

2. cmp eax, 2 부분은 패치를 한 파일을 분석을 하는거지만 기존에는 cmp eax, 3으로 되어 있다. Name 입력값이 3자리 이하이면 종료시키는 분기점이다.

 

 


 

3. Tracing을 하다보면 0x45B850 주소에서 시리얼 값이 Return이 된다.

 

 


4. 해당 주소로 이동을 하게 되면 연산과정이 여러개 나온다. 4-4-8-4-4 의 Serial key를 제작하는 로직이다. 그 중 첫번째 자리 연산 과정을 살펴보면 name에 입력했던 11값을 1byte씩 연산을 하고 첫번째 byte 결과값을 두번째 byte와 더해 edx에 넣어둔다.

 

 

 


 

5. Serial key 첫번쨰 자리 결과가 나오게 되는데 총 4byte이며 0x4086c8 주소에서 word 값으로 분리시켜 Return한다.


 

6. 입력했던 name에 11 값으로 5번의 연산을 통해 Serial key를 만든다.

 


 

7. 연산과정을 전부 다 아는건 시간이 오래 소요 되므로 간단한 코드를 짜서 0x0~0x7F 까지의 값을 무작위 대입해 2개의 배열에서 연산을 통해 값을 찾아낸다.

 

 

 


8. 작성 했던 코드를 돌려보면 문제에 나와있던 Serial key 첫번째 값 0x5D88과 일치하는 값들이 1개 출력이 된다. 첫번째 값 0x43, 두번째 값 0x36

 

9. hex to ascii를 해보면 C6 두자리 수가 나온다. 이 값을 입력을 해보면 성공인걸 알 수 있다.

'Crack' 카테고리의 다른 글

로스트아크 오토핫키 프로그램 crack  (3) 2021.07.20
CodeEngn Advance RCE L09  (0) 2021.04.09
CodeEngn Advance RCE L02  (0) 2021.04.05

# 너무 쉬운문제는 풀기만하고 기억에 남는 문제만 작성합니다.

 

문제: Password는 무엇인가

 

 

1. 파일 실행시 Username, Password를 입력해야 하며 틀리면 에러 문구가 나온다.

 


 

2. Tracing을 하다보면 Username을 비교하는 로직이 나온다. ecx 포인터 값과 0x6E(n) 을 1byte 비교한다. 

하지만 이상한 부분이 ecx값 안에는 0x00(null)값이다.

 


 

3. 다음 분기로 진행하기 위해 ecx 값과 같은 0x00으로 변경 해준다.


 

4. sete bl 어셈블리는 ZF 1 이면 bl 값을 1로 변경해준다. 차후 분기문에서 영향을 준다. cmp 어셈블리 명령에서 Password 부분을 매칭을 하게 되는데 기존 dump에 저장되어 있는 0x88228F(8921743) 값과 비교한다.

 

 

5. 입력했던 값은 decimal 123이며 hex로는 7B가 된다.

 


 

6. 마지막 Username에 대한 매칭을 한번 더 이루어진다. 글쓴이는 name으로 입력을 했는데 DonaldDuck과 비교한다. 

 

 

 


7.  정상적으로 로직을 통과하게 되면 이전에 sete bl으로 설정했두었던 bl 값을 test연산을 통해 분기를 나눈다.

    최종적으로 Username에서 맨 앞 1byte는 null 이여야 하며 Username은 DonaldDuck이고 Password는 8921743이다.

 

 

'Crack' 카테고리의 다른 글

로스트아크 오토핫키 프로그램 crack  (3) 2021.07.20
CodeEngn Advance RCE L08  (0) 2021.04.09
CodeEngn Advance RCE L02  (0) 2021.04.05

문제: 정답은 무엇인가

 

 

1. 파일을 실행시키면 Access_Violation 에러가 난다. 포인터 주소에서 잘못 된 값을 읽어와 이러한 현상이 일어난다.


 

2. 해당 주소로 이동을 하면 덤프영역에 저장되어 있는 DLL 이름을 가져와 API들을 호출시킨다.

 


3. [eax+18] 포인터 주소에 00 null 값이 존재한다.

에러 부분


4. ax에는 105E값이 존재하는데 Imagebase 주소를 없앤 RVA 값이다. 1171값을 비교해 프로세스를 종료 시킨다.

RVA 비교
RVA


5. RVA 1171값은 나올수가 없으므로 105E값으로 수정 후 패치해준다.

Patch


6. 패치한 파일을 다시 실행 시켜보면 정상적으로 작동을 한다. Password 입력란에 아무값이나 입력해본다.

 

 


7. Password 매칭하는 로직이며 1byte씩 비교를 시킨다.

  - 0x43,0x52,0x41,0x41,0x41,0x43,0x4B,0x45,0x44,0x21

Password


8. Unicode table을 참조하면 Password를 찾을수 있다.

   - CRAAACKED!

 

 

reference: www.tamasoft.co.jp/en/general-info/unicode.html

'Crack' 카테고리의 다른 글

로스트아크 오토핫키 프로그램 crack  (3) 2021.07.20
CodeEngn Advance RCE L08  (0) 2021.04.09
CodeEngn Advance RCE L09  (0) 2021.04.09

+ Recent posts