SDN
2k
2019-12-21 12:45:54
6
528

C#으로 윈도우 프로그램을 만들면 디컴파일로 코드 다 털릴까요?


안녕하세요 코린이 입니다.

요즘 부쩍 윈도우 소프트웨어를 만들고 싶어져서 

조금씩이라도 시간을 투자해서 배워볼까 합니다.


다만, pyinstaller로 exe파일 만들면서 알게된 사실은 리버스 엔지니얼이 ( 디컴파일 ) 입니다.

pyinstaller로 만든 exe파일은 현재 통신을 하고 있지는 않지만, 

나중에 만들어볼까 하는건 통신을 할 예정입니다. 

그렇다면 코드가 털리는건 둘째 치고, mysql 아이디나 비밀번호 ( 저는 초보라서 그대로 코드안에 넣어서 씁니다. ) 가 털릴 가능성이 있다는게 찝찝합니다.


현재 C#을 배워볼까 , 디컴파일해도 코드 보기가 어렵다는 C++로 해볼까 고민중입니다.

======================================



궁금증

1. C#으로 만든 소프트웨어는 디컴파일 해서 코드 까보는게 쉬운가요?

2. C++은 어떠한 흑마법?으로 인해 디컴파일해도 코드가 암호화 된다고 커뮤니티 글을 봤습니다.

정말로 그럴까요?


3. 윈도우 프로그램 만들때 언어 선택 추천 좀 부탁드립니다~


0
1
  • 답변 6

  • StringBuilder덕후
    899
    2019-12-21 13:08:57

    네 98% 이상 다 털립니다.

    그래서 중요엔진이나 코어는 C++로 Interop하는 방식으로 해여

    0
  • 아범테크
    519
    2019-12-21 13:24:27 작성 2019-12-21 13:50:31 수정됨

    C++가 암호화 되는거 완전히 틀린 이야기입니다.

    C++은 암호화 되는게 아니라 그냥 읽기 비교적 힘든겁니다. 그래서 IDA Pro 같은 전용 리버스 엔지니어링 툴 쓰면 다 나와요.


    파이썬이나 C#은 중간 컴파일되는 바이트코드가 기계어에 비해 추상화가 잘 되어있으니깐 디컴파일러하기 쉬운거고요. C++은 바로 기계어로 컴파일되니 비교적 보기 힘든겁니다. 다시말하면 디컴파일 불가능한게 아니에요.


    예로 들면 하드 코딩된 "mysql 아이디나 비밀번호"의 경우, 굳이 전문적인 리버스 엔지니어링 툴이 아니더라도 아주 간단한 커맨드 (strings 라는 커맨드가 대표적입니다.) 딱 한 줄만 치면 다 나와요. 정말 쉽게 나와요.


    또한 실행파일 디컴파일 당해서 하드코딩된 "mysql 아이디나 비밀번호"를 까볼 수 있다는 거는요...이미 님 컴퓨터가 완전히 해킹당했다는 뜻입니다. 이미 디컴파일 당하는 상황따위나 걱정할 상황이 아니라는 뜻입니다. 설마 하드코딩된 비밀번호를 exe로 인터넷 상에서 배포하시진 않으실거고...


    그리고 음 ;; 털릴거 걱정한다고 C++쓴다고는 생각이 안드는데요...성능이나 사용중인 라이브러리 때문이라면 모를까요.

    애초에 코드 디컴파일 당하는걸 왜 걱정해야하는건지 모르겠네요. 보안상 중요한거면 모를까요.

    정말 털리는거 방지가 중요한거는 코드 난독화 같은 전용 보안 솔루션 등을 쓰지 C++썼다고 그냥 뚝딱 해결되는게 절대 아닙니다.

    1
  • 곰개발자
    2k
    2019-12-21 13:49:30

    일단 중요한 비밀번호와 같은 정도는 어떤 언어를 쓰더라도 절대로 바이너리 내에 포함하지 않습니다. 보안상으로 아주 위험하고 해서는 안됩니다. 

    Connection string의 경우는 app.config를 encrypt 하는 방법이 있지만, Authentication을 구현한 Backend를 통해서 Client를 구현하는 것이 가장 Secure합니다.

    클라이언트 프로그램은 뭐든 항상 모든 코드가 오픈되어 있다고 생각하면 되고, 오직 Presentation할 수 있는 기능만 포함시키는게 일반 적입니다.



    0
  • 온디맨드
    204
    2019-12-21 14:47:33

    C#은 리펙터로 리버스가 가능해서 connection string 같은 중요정보는 소스내 포함하시면 안되고 그래서 DB에 연결 하려면 WCF나 WS로 3티어 WAS로 처리하는것이 일반적입니다.

    0
  • flyso2
    409
    2019-12-21 17:01:52

    디컴파일하면 털리는거는 모든 언어가 마찬가지 입니다..

    안털릴려면 난독화를 합니다.

    obfuscator 라고 합니다.

    연결문자열 등 중요 정보는 코드 내부 말고 다른 곳, 예를 들어 설정파일 등 에 위치시키는 게 일반적입니다.



    0
  • mirheeoj
    9k
    2019-12-23 10:09:57

    일렉트론처럼 웹기술로 데스크탑 앱을 만드는 기법들이 꽤 대중화되었으니 그쪽을 알아보시는 게 좋을 것 같습니다. 꼭 윈도에 종속적인 앱을 만들어야 하는 상황이 아니라면 말이죠 

    0
  • 로그인을 하시면 답변을 등록할 수 있습니다.