c# 코드를 원하는 부분만 난독화 가능할까요?

안녕하세요, c# 코드 난독화 관련해서 질문드립니다.

GPT에 물어보거나 구글링 했을 때 난독화는 대부분 프로젝트 전부를 한다고 나오는데요…

아예 부분 난독화는 불가능할까요?

예를 들어 특정 문자열 변수만 난독화를 하고 싶습니다… 해당 문자열은 api 호출에 필요한 api key 값을 담고 있습니다

2 Likes

정석인지는 모르겠지만 서버가 따로 있고 걱정이 되신다면 서버에서 받아오면 되지 않을까요?
예전에 호출에 필요한 키, 해독키는 서버에서 받아서 사용했는데 평문으로 받아온건 아니고 암호화 해서 받아왔는데 기본키, 리프레시키로 나누고 기본키는 앱 내에 고정되어 있지만 리프레시키는 주기적으로 갱신시키면서 실제 해독에 사용되는 키를 바꾸는 식으로 사용했었습니다. 리프레시키 생성은 특정 데이터 조합 + 생성시간을 난수화한 랜덤값으로 만들었구요.

https면 믿어도 된다는 분들도 계셨지만 저는 불안해서 이래저래 꼬아서 암호화 해서 주고 받았는데 이 정도면 키가 유출될 걱정은 적지 않을까 싶습니다.

키 값을 난독화하면 되지 않나요?

실제값 : “1234567890” ← 키매니저 → 파일저장본: “3451209876”

class KeyManager
{
   void string Shuffle(string unshuffled)
   {
      // 셔플링.
   }
   publc string Unshuffle(string shuffled)
   {
      // 복원
   }
  }

셔플과 언셔플 로직은 개발자만 알 수 있을 것입니다.
그리고, 두 값의 관계는 1:1 이기 때문에, 향 후 코드 업데이트 시에 이점을 고려해야 합니다.

참고로, 확정된 Api 키 값으로 앱을 빌드해야 하는 경우, KeyManager.exe 를 별도로 만들고, Api 키를 셔플한 값을 저정한 파일을 배포폴더에 넣어 두거나, 빌드 Task로 지정하면 될 것 같습니다.

그런데, 키를 난독화해놓고, 복원된 키값을 파라미터 매개 변수로 그대로 노출하는 실수를 범하면 안되겠죠?

라이센스 처리 부분만 난독화 하고 싶다면
메소드 난독화를 쓰시면 됩니다.

우선 라이센스 레지스트 함수를
호출하는 메소드에서
키값을 하드코딩 하고
해당 메소드만 난독화 하는게 가능 한걸로 알고 있습니다

1 Like

해당로직만 aot빌드 해서 dll 참조할수있게 구성해보져

질문 작성자입니다!! 답변으로 달아주신 내용들 참고해서 해보겠습니다! 감사합니다