mssecsvc.exe 파일 대상으로 진행
socket 예제
import idautils
import idc
import re
import socket #도메인을 IP로 가져오기 위한 모듈 선언
def find_network_iocs():
"""
전체 바이너리에서 네트워크 관련 IOC를 찾아 출력합니다. 이에는 IP 주소와 도메인 이름이 포함됩니다.
"""
ip_pattern = re.compile(r'\b((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b') #IP관련 요소 추출 정규식 표현 패턴
domain_pattern = re.compile(r'\b(?:http?:\/\/)?(?:www\.)?([a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*\.(com|net|org|info|biz|gov|edu))\b')
#도메인 http:www.a-z.com혹은 net,org 추출인데 http, www 부분은 있으면 추출되고 없어도 뒤에 패턴으로 추출하는 것
print("네트워크 IOC 추출:")
for seg in idautils.Segments(): #세그먼트 전체 순회하기 위한 for 문
for head in idautils.Heads(idc.get_segm_start(seg), idc.get_segm_end(seg)): #첫 번째 부터 마지막까지 순회
disasm = idc.GetDisasm(head) #해당하는 명령어나 메모리 주소를 디스어셈블 결과를 disasm에 저장
ip_matches = ip_pattern.findall(disasm) # ip 패턴을 findall로 다 찾는다 disasm에서 그 결과를 ip_matches에 저장
domain_matches = [match[0] for match in domain_pattern.findall(disasm)]
#findall로 튜플형태로 반환하는데 전체 도메인 형식만을 추출하기 위해서 match[0]을 함
#반환 되는 값이 idnsajn.com, com 으로 반환 되기 때문이다.
if ip_matches or domain_matches: #도메인 이나 IP 가 있다면 for
print(f"명령어 주소: {hex(head)}")
if ip_matches:
print(f" IP 주소: {', '.join(ip_matches)}")
if domain_matches:
print(f" 도메인 주소: {', '.join(domain_matches)}")
for domain in domain_matches: # 도메인 인 경우에 IP를 가져오기 위한 반복
try:
ip_address = socket.gethostbyname(domain)
print(f" 도메인으로부터 얻은 IP 주소: {ip_address}")
except socket.gaierror:
print(f" 해당 도메인에는 IP주소가 존재하지 않습니다.: {domain}")
if __name__ == "__main__":
find_network_iocs()
socket 핵심은 gethostbyname함수로 해당 함수 내에 도메인 문자열을 넣어주면 IP주소로 반환해줍니다.
이 코드 예제에서는 domain에 해당하는 도메인 주소가 담겨있기 때문에 domain을 넣어주었습니다.
자세한 코드 분석은 코드에 달아두었습니다.
실행 결과는 다음과 같습니다.
해당 도메인에 대응되는 IP 주소를 획득할 수 있습니다.
whois 모듈
socket 예제에서 다음과 같이 수정 해주면 됩니다.
try:
domain_info = whois.whois(domain)
print(f" 도메인 WHOIS 정보: {domain_info}")
except Exception as e:
print(f" WHOIS 조회 실패: {e}")
다음과 같이 결과를 확인할 수 있습니다.
whois 사이트는 다음과 같습니다.
https://whois.domaintools.com/
Whois Lookup, Domain Availability & IP Search - DomainTools
whois.domaintools.com
참조 :
08-2 정규 표현식 시작하기
정규 표현식에서는 메타 문자(meta characters)를 사용한다. 먼저 메타 문자가 무엇인지 알아보자. [TOC] ## 정규 표현식의 기초, 메타 문자 메타 문자란 원…
wikidocs.net
https://hotel-iu.tistory.com/321
파이썬 python 정규표현식 (정규식) 문자열 추출 예제 정리
파이썬 python 정규표현식 (정규식) 문자열 추출 예제 정리 Python에서 정규 표현식은 re 모듈에서 지원됩니다. 파이썬에서 정규 표현식을 사용하려면 먼저 import re를 사용하여 re 모듈을 가져와야 합
hotel-iu.tistory.com
https://whois.domaintools.com/
Whois Lookup, Domain Availability & IP Search - DomainTools
whois.domaintools.com
'악성코드 분석' 카테고리의 다른 글
IDA Pro 7.6, Python 3.9, Npcap, scapy 런타임 오류 (0) | 2024.06.05 |
---|---|
IDA pro 7.6 - Python(3.9) api 실제 사용 간단 예제 모음 2024ver (0) | 2024.05.15 |
IDA Python API 모듈 정리 + 사용법 (python 3.9 ver) (0) | 2024.05.12 |
IDA Pro 7.6 플러그인 설치 방법 - Python3.9(IDA Python) (0) | 2024.05.06 |
Androxgh0st 악성코드와 관련된 알려진 침해 지표 보고서(2024.01.16) -요약 및 정리- (0) | 2024.05.03 |