목록보안/악성코드 (103)

Name이 한자리라 했는데 프로그램에 입력하면 문자열 길이가 모자르다고 나온다. 해당 문자열의 위치를 찾았다. 문자열의 길이를 체크하는 조건문을 패치해주기로 한다. 길이를 1로 만들었다. 그 후 성공루틴으로 가는 분기문을 찾았다. 해당 함수에서 Name에 따른 key값이 생성되는것을 알수있었다. 암호 생성 루틴인데 Name 한자리이기 때문에 해당 부분만 분석을 진행하면된다. Name을 A로 입력할시 생성되는 키값은 0x0051bffe374f0이다. 여기서 ffe3값을 문자열로 변환해 키값의 앞자리가 되는 방식이다. 파이썬으로 코드를 짜서 Name값을 찾기로 했다. beda가 속한 키값이 존재한다. Name은 0x46으로 F이다.

c++로 작성된 프로그램이다. 콘솔형 프로그램이다. 정답 루틴으로 갈리는 분기문을 찾았다. [EBP-3C]에는 0xE4C60D97 이라는 값이 있다. 이를 EAX와 같게 만들어주어야 한다. EAX에는 무슨 값이 들어가나 확인을 했다. 4321을 입력했을 때 0x10E1이 들어있었다. 0x10E1을 십진수로 바꾸면 4321이 그대로 나온다. 즉 0xE4C60D97을 십진수로 바꾸어 입력하면 정답이다.

L14번과 비슷한 문제이다. 아이디 패스워드를 맞추는 프로그램이다. 델파이로 작성된 프로그램이다. 먼저 분기문을 찾아주었다. EAX와 0x45B844의 데이터를 비교한다. 0x45B844에는 0x6160의 데이터가 들어가있다. 0x407774에 비밀번호를 설정하는 루틴이 존재하는것을 알 수 있다. ret값을 0x6160으로 만들어주면 된다. 비밀번호를 설정하는 핵심 코드이다. 해당 부분을 파이썬 코드로 만들어 브루트포싱으로 비밀번호를 찾아준다. for b in range(0,10): for i in range(0,10): for j in range(0,10): for k in range(0,10): for m in range(0,10): temp = b temp = temp + temp * 4 temp ..

아이디를 준지 모르고 풀었다. 아이디와 비번을 입력하는 간단한 프로그램이다. UPX를 수통 언패킹 해주었다. PUSHAD를 찾고 ESP 트릭을 해준다. 하드웨어 BP를 걸어준다. OEP 진입 후 DUMP뜨고 IAT설정을 해준다. 이후 DUMP파일을 다시 올려준다. Run to user code로 문자열을 찾아주었다. 비번은 해당 함수의 리턴값과 esi값을 비교한다. esi는 CodeEngn입력시 0x129a1 고정이다. 그런 비번을 작업하는 함수가 어떤 루틴이 있는지 보았다. 12345입력시 1 * 0xA^4 + 2 * 0xA^3 + 3 * 0xA^2 + 4 * 0XA + 5 의 연산작업을 걸친다. 이값이 0x129a1과 같아야 한다. 브루트 포싱으로 답을 찾기로 했다. 비번이 76193이 나왔다.

서비스 보면 여러 이름들이 있는데 등록된 서비스를 실행시켜준다. services.msc로 등록된 서비스들을 확인할 수 있다. svchost.exe에 등록되어있는 서비스 중 하나를 확인했다. 실행 파일 경로는 svchost.exe -k netsvcs를 실행한다. 올리디버거로 과정을 파악한다. oep로 bp를 걸고 이동해준다. resource 관련 루틴으로 가기 위해 403a2c로 이동해주었다. bp를 걸어준다. 함수 내부로 진입해준다. 문자열을 합치는 작업을 하고 있다. 분기문이 나오는데 eax값의 따라 분기문이 나뉜다. 이는 403100함수의 반환 값이다. 해당 함수는 reg 관련된 함수들이 나오며 netsvcs가 가능하면 64to32를 세팅하는 듯하다. 이게 되냐 안 되냐에 따라 달라지는 것 같다. 해..

Resource 관련된 함수를 Import에서 추적해 따라왔다. 해당 함수를 참조하는 곳을 찾기 위해 그래프를 출력해준다. 4032f0에서 403050을 호출하니 4032f0을 탐색한다. OpenSCManagerA가 보인다. 해당 포인트에 서비스 등록 로직이 있다는 것을 추측했다. 진행하면 분기문이 나온다. 왼쪽은 service를 만드는 작업을 하는듯 했다. 64to32라는 문자열도 볼 수 있다. 중간에 0x401230이라는 함수가 계속 보이는데 이는 레지스트리 관련된 함수들이 존재했다. 알아보기 쉽게 함수 이름을 바꾸어주었다. 그 아래 분기문이 나뉘고 아래 포인트를 확인하면 우리가 참조해서 올라왔던 함수 0x403050이 있었다. 0x4032a0에는 OpenService와 StartService가 있었..

이어서 기초동적분석을 진행했다. xp환경과 다르게 win7에서는 악성코드가 잘 실행되지 않아 제대로 분석을 진행할 수 없었다. sysAnalyzer을 이용했다. 하나의 프로세스가 진행된다. svchost.exe의 파일이 실행되는것을 알 수있다. Service이름은 64to32이다. 5408의 pid가 4개의 포트를 열었다. 원래는 dll파일이 실행되어야 하는데 win7에서는 dll 프로세스를 죽여버려 확인할수가 없다. 저번에 추출했던 dll이 svchost.exe에 올라와 실행되는 구조이다. 레지스트리 변경 사항이 있다. value값이 64to32이다. 만들어진 파일을 보면 64to32가 있다. size가 비교적 큰것을 알수가있다. service또한 64to32로 등록되어있다. 통신을 위해 pipe에도 ..

간단한 기초 정적분석을 진행했다. 게임핵으로 나온다. c++로 컴파일 되어있다.. 패킹은 되어있지 않다. 컴파일 시간은 2013년도이다. pestudio로 확인해보았다. 레지스트리 수정, 프로세스 열거, 악성 string 및 funcitons 참조 등 여러 악성 행위가 탐지된다. dll파일 하나가 있는데 추출을 진행했다. Resource Hacker를 통해 dll파일 추출을 진행했다. dll파일을 다시 pestudio로 올린 결과이다. ServiceMain이라는 api를 발견할 수 있는데 서비스형 파일이 어떻게 동작하는지 다음에 분석하기로 한다.