agencies

python을 이용한 C 소스코드 추상화 (최신본) 본문

Ⅰ. 프로그래밍

python을 이용한 C 소스코드 추상화 (최신본)

agencies 2024. 12. 4. 15:42

기호와 연산자를 제외한 모든 값들을 추상화합니다.

(사용 목적 : 소스코드의 변조 여부 확인)

 

소스코드에서

int a = 0; 이라는값이 있다고 가정해봅시다.

하지만 실제 사용되고 있는 코드는 int b = 0;과 같이 작성될 경우,

 

두 개의 값이 일치하지 않습니다.

즉 값이 1개만 달라져도 다르게 나올 수 있기에,

 

int a = 0; 대신 val val = val; 형식으로 추상화 함으로써

미묘하게 달라지는 것은 발견해 낼 수 있을 것 같습니다.

 

 

 

import re
import hashlib
import pandas as pd

# CSV 파일 읽기
file_path = "backward-db.csv"  # CSV 파일 경로
df = pd.read_csv(file_path)

# 추상화 함수
def abstract_code_simple(origin_code):
    # 데이터 타입을 'val'로 변경
    abstracted_code = re.sub(r'\b[a-zA-Z_][a-zA-Z0-9_]*\b', 'val', origin_code)
    # 변수명을 'val'로 변경
    abstracted_code = re.sub(r'\b[u]\b', 'val', abstracted_code)
    return abstracted_code

# 공백 제거 및 SHA256 해시 생성 함수
def generate_hash(code):
    # 공백 제거
    code_no_spaces = re.sub(r'\s+', '', code)
    # SHA256 해시 생성
    hash_object = hashlib.sha256(code_no_spaces.encode())
    return hash_object.hexdigest()

# 공백 제거된 추상화 코드 생성 및 해시 추가
df["abs_origin_code"] = df["origin"].apply(abstract_code_simple)
df["abs_origin_code_hash"] = df["abs_origin_code"].apply(lambda x: generate_hash(re.sub(r'\s+', '', x)))



# 결과를 저장
output_file_path = "abstracted_test_with_hash.csv"
df.to_csv(output_file_path, index=False)