일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 회고
- SQL
- 공부일지
- 알고리즘
- 백준알고리즘
- 정보처리산업기사
- java
- 코딩교육봉사
- 코딩봉사
- 파이썬
- softeer
- 프로그래머스
- 자바
- 문제풀이
- 소프티어
- 1과목
- kotlin
- MYSQL
- CJ UNIT
- python
- 시나공
- programmers
- 코틀린
- BFS
- SW봉사
- 백준
- C++
- 데이터베이스
- 스프링
- 백준 알고리즘
- Today
- Total
JIE0025
[악성코드분석] CodeEngn 코드엔진 Basic RCE L03 + 추가 분석 본문
######## 작성자가 진행한 실습 그대로의 과정을 담았습니다. ########
오늘의 챌린지는 비주얼베이직에서의 스트링 비교함수 이름을 찾는 것이다.
추가적으로 스트링 비교함수 내부가 어떻게 돌아가는지를 분석해보았다.
--------------------------------------------------------------------------------------
올리디버거로 실행시켜보았더니 시스템에러가 났다.
The program can't start because MSVBVM50.DLL is missing from your computer. Try reinstalling the program to fix this problem
MSVBVM50.DLL 이 없어서 생긴 문제인 듯 했다.
해결법을 찾아보았는데 사람들이 알려주는 주소에서는 파일 이름이 다르고 해서
그냥 이 블로그에서 첨부파일을 다운받아 설치하였다.
https://m.blog.naver.com/93immm/220194312371
------------------------------------------------
이제 본격적으로 분석을 해보자.
F9을 눌러서 실행시켜보았다.
대충 보아하니 regcode를 작성하여서 refistrieren버튼을 누르면 그 코드가 옳은 코드인지 비교하여서 메세지 박스를 보여주는 시스템인 것 같다.
메세지string을 검색해보면, 그 위에 입력한 string과 실제 code를 비교하는 함수를 호출할 것이라고 예상할 수 있다.
마우스 우클릭 > searchfor> all referencced strings
전체 string이 나왔다.
여기서 우리는 방금 나왔던 error ! das passwort ist falsch! 라는 string을 찾을 수 있다.
더블클릭해서 들어가보자.
f2를 눌러서 break point를 설정해주었다.
현재 line이 들어있는 함수의 시작부분을 찾아서 그 부분도 break point 설정을 해주었다.
분명 이 함수 안에 두 값을 비교하는 함수가 호출될 것이라고 생각했기 때문이다.
이제 ctrl+f2를 누르고 f9를 다시 눌러서 break point까지 간 후에
f8과 f7을 클릭해가며 한줄한줄 분석을 해보겠다.
regcode는 아무거나 작성하고 실행한다.
나는 aaaa를 입력하였다 (분석할 때 연속된 문자가 있으면 어디있는지 한눈에 볼 수 있는 것 같다)
쭉 실행해보다보니까 우리가 C언어에서도 자주 사용했던 strcmp함수가 눈에 보였다.
C언어에서 strcmp는 두 문자열을 비교하는 함수였다.
우리가 이 실행파일을 분석하는 목적은 "비주얼베이직"에서 스트링 비교 함수의 이름은? 이었기 떄문에
vbaStrCmp 이것이 아마 정답이 될 것같다.
함수 호출 전에 push를 통해 파라미터를 넣어주는데, 두개의 값이 내가 입력한 aaaa와 다른 string이었다.
아마도 arg1로 들어간 이 문자열 2G83G35Hs2 이것이 진짜 password값이 아닐까 예상해본다.
두 값을 인자값으로 넣어주어서 함수 내부에서 비교한 후 리턴해 줄 것 같다.
정답
비주얼베이직에서 스트링 비교함수의 이름 : vbaStrCmp
regcode : 2G83G35Hs2
정답인지의 여부는 글 마지막에 확인하겠다.
-------------------------------------------------------
좀 더 깊게 분석을 해보았다.
f7을 눌러서 vbaStrCmp에 들어가 보자.
jmp명령어가 있는것을 보아하니 한번 더 이동하는 듯 하다.
jmp명령어를 통해 이동한 곳에는 call __vbaStrComp가 있었다. 마지막으로 다시 들어가 보아야 할 듯하다.
다시 들어간 곳에는 비교할 두 문자열을 push한후에 다시 어떤 함수가 호출되는 것을 볼 수 있었다.
위의 것을 분석이라고 해보았지만 두 명령어를 비교하는 것 같지는 않다.
바로 여기가 두 문자열을 비교하는 함수 내부라고 생각이 든다.
esi와 edi가 복사 및 비교를 할 떄 source와 destination의 주소를 갖고 있는 index register라고 알고 있는데,
740CD9EC에서, edi에 arg.2인 real code number를 복사하였고
740CD9F0에서, esi에 arg.1인 aaaa를 복사하였다
그 후 740CD9FA 에서 repe cmps word ptr ds:[esi]. word ptr es:[edi]를 실행하는데,
repe는 같으면 반복하라는 의미이며, cmp로 esi 와 edi 를 비교한다.
---------------------------------------------------------------------------
이제 마지막으로 정답인지 체크를 해보겠다.
ctrl + f2 로 초기화 후, f9을 눌러서 code를 다시 입력해보자
메세지 박스에서
Danke, das passwort ist richtig! 가 나오는 것을 통해 옳은 코드임을 확인하였다.
비주얼베이직에서 문자열 비교 함수의 이름 역시 정답인지 체크해보았다.
역시 성공적이다.
'기타 학습 > 보안' 카테고리의 다른 글
DLL(Dynamic Linked Library) 이란? (0) | 2020.06.07 |
---|---|
[악성코드분석] CodeEngn 코드엔진 Basic RCE L05 (0) | 2020.04.19 |
[악성코드분석] CodeEngn 코드엔진 Basic RCE L04 + 정상 띄우기 (0) | 2020.04.17 |
[악성코드분석] CodeEngn 코드엔진 Basic RCE L02 (0) | 2020.04.11 |
[악성코드분석] 문자열 패치 실습 (0) | 2020.03.30 |