반응형

abex' crackme4.exe
0.02MB

 

 

Serial을 입력하라는 창이 뜬다.

 

Registered 버튼을 클릭해야 할 것 같은데 비활성화 되어 있어서 클릭할 수 없다.

 

보통은 시리얼 값을 입력한 뒤 OK 버튼을 누르면 맞았는지 틀렸는지에 대한 메시지 박스가 출력되지만, 이 문제는 Registered 버튼이 비활성화 되어 있으므로 다른 문제들과는 조금 다르게 풀어야 하나보다

 


 

crackme 4의 EP 부분이다.

 

ThunRTMain이 있는 걸로 봐서 Visual Basic으로 만들어진 프로그램이다.

 

 

위의 40121A, 401220, 401225 주소 이 3개의 코드가 VB 파일의 Startup 코드이다.

 

40121A의 jmp 명령에 의해 VB 엔진의 메인 함수인 ThunRTMain() 함수가 간접 호출된다.

(이전에 스택에 입력한 4013E4값은 ThunRTMain() 함수의 파라미터로 RT_MainStruct 구조체이다. )

 

 

이 곳은 ThunRTMain() 함수의 코드이며, MSVBVM60.dll 모듈의 주소 영역이다.

 

VB 프로그램은 Windows 운영체제의 Event Driven 방식으로 동작하기에 main() 혹은 WinMain()에 사용자 코드(디버깅을 원하는 코드)가 존재하는 것이 아니라, 각 Event Handler에 사용자 코드가 존재한다.

 

즉, ThunRTMain() 함수의 코드 부분은 VB 엔진의 코드이므로 딱히 분석할 필요 없다.

 

 

x32dbg의 문자열 찾기 기능을 이용한다.

 

문자열 찾기 기능을 이용하면 위의 사진과 같이 문자열들이 있는데 “Well done!”과 “Very good, you got it!” 문자열이 있다.

 

 

“Well done!” 문자열 부분으로 간다.

 

“Very good, you got it!”, “Mail Me how you did it”, “abex2000@gmx.net” 문자열이 있는 걸로 봐서 시리얼 값을 입력하고 Registered 버튼을 눌렀을 때 출력되는 부분인 것 같다.

 

즉, 아직 시리얼 값을 못 찾은 상태에서는 Registered 버튼을 누를 일이 없기 때문에 이 부분은 넘어간다.

 

 

어떠한 값을 입력했을 때 성공 메세지 창이 뜰려면 입력한 값과 지정된 시리얼 값이 일치해야 한다.

 

이때 strcmp와 같은 함수를 사용하여 입력한 값과 시리얼 값을 비교할 것이기에 x32dbg 위의 메뉴 중 “기호” 메뉴에서 문자열을 비교하는 함수인 strcmp를 찾는다.

 

Visual Basic에서 함수의 이름에는 vba가 앞에 붙기 때문에 vbastrcmp를 찾으면 된다.

 

주소를 보니 401048에서 vbaStrCmp 함수를 호출한다.

 

 

401048 주소로 이동(ctrl + g)하여 BP(F2)를 설정한다.

 

명령어를 보니 loop 명령어이다.

 

즉, cx의 값이 0일 될 때까지 401022 주소로 분기한다는 것이다.

 

위의 레지스터들의 상태와 스택은 401048 주소에 BP를 설정하고 아직 F9 키를 눌러 실행하기 전의 상태이다.

401048 주소에 BP를 설정했으면 바로 F9를 눌러 실행한다.

(ctrl+F2를 눌러 프로그램을 재실행하면 401048 주소에 설정한 BP가 비활성화 되므로 재실행하지 않고 바로 실행한다.)

 

 

창에 ‘s’를 입력했더니 레지스터들의 값이 위와 같이 바뀌었다.

그리고 스택의 값도 바뀌었다.

 

 

‘s’가 입력된 상태에서 어셈블리어를 보면 ecx에 “2244420”이라는 문자열이 담겨있는데 이 값을 eax에 옮기고 eax가 0인지 test 명령어로 검사한 뒤 0이 아니라면 vbaStrCmp의 인자로 넘겨져 비교 대상이 된다.

 

즉, 입력한 값과 “2244420”이라는 값을 vbaStrCmp로 비교한다.

 

 

시리얼 값으로 2244420을 입력했더니 Registered 버튼이 활성화 되었고, 버튼을 누르니 성공 메세지 창이 떴다.

 

반응형

'전쟁 > crackme' 카테고리의 다른 글

crackme #6(ReWrit's Crackme#1)  (0) 2022.06.21
abex' crackme #5  (0) 2022.06.14
abex' crackme #3  (0) 2022.06.14
abex' crackme #2  (0) 2022.06.05
abex' crackme #1  (0) 2022.06.05

+ Recent posts