C# 같은경우에 exe파일을 디컴파일하면 내부 소스가 그대로 보이는데 심지어 프로젝트로 export도 가능하더라구요
그래서 제가 확인을 해봤는데 코드 및 프로젝트 구조는 그대로 export되었는데 delegate는 따로 클래스로 빠지고 디자이너 코드는 못 내보내는 것 같았습니다. 아래같이 에러가 뜨더라구요
‘InitializeComponent’ 메서드를 구문 분석하지 못했습니다. 파서에서 다음 오류를 보고했습니다. ‘Invalid symbol kind: NamedType’. 작업 목록에 잠재적 오류가 있는지 확인하세요.
그래서 궁금한점은 만약 제가 winform으로 프로그램을 배포를 했는데, 이 프로그램에는 로그인을 해야 다음 동작을 진행 할 수 있다고 한다면
누군가가 디컴파일해서 로그인만 우회해서 다음 동작을 진행하게끔 할 수 있나요?? 로그인은 서버에서 진행을 합니다.
→ 만약 우회가 가능하다면, 이것을 막기위해서 어떻게 해야할까요??
기술적인 솔루션이 있을 수도 있지만, 저 개인적으로는 "지연"시키는 것에 초점이 있는 것이지, "차단"시키는 것은 불가능하다는 생각입니다. 그 점에 입각하여 아래 의견을 드려봅니다.
Windows Forms를 비롯한 닷넷 계열 코드는 IL 코드를 사용하도록 되어있어서, 디컴파일은 물론 tampering (변조)가 다른 기계어 코드보다 월등히 쉽습니다. 이를 완화할 목적으로, 모든 코드를 처음부터 기계어로 컴파일하는 AOT 처리나 난독 처리를 하는 경우도 있지만, 궁극적으로 디컴파일이나 변조를 유의미하게 "지연"시키는 것이고, "차단"하는 것이 아닙니다. 그리고 이는 C/C++로 빌드한 애플리케이션이라고 해도 다르지 않습니다.
또 다른 측면으로, 로그인 같이 네트워크 동작을 포함하는 부분은 굳이 EXE 파일을 위변조하려는 성의를 들일 필요 없이, 네트워크 패킷을 스니핑하고 역공학 작업을 거쳐서 프로토콜의 구조를 파악하여 손쉽게 서버로 위조되거나 훼손된 패킷을 보낼 수 있습니다. 이를 "막을 수 있는 방법"은 그래서 없다고 보는 것이 정확합니다.
그래서 제가 보기에 적정하다고 생각하는 대응 방법은 위의 두 측면을 나눠서 보면 각각 다음과 같다고 생각합니다.
EXE 파일이나 디지털 사본 측면: 프로그램 파일 내에 중요한 정보나 민감 정보, 민감 자산은 포함되지 않도록 설계해야 합니다. 궁극적으로 개발자의 손을 떠나는 디지털 사본은 언제든 "위변조된다"고 믿는 것이 안전하며, 흔히 zero-trust 보안 모델이 이런 의미를 내포합니다. 그래서 EXE 파일이 어떻게 쓰이는지 알수 있도록, 애널리틱스 로그를 수집할 수 있도록 하는 것이 도움이 될 수 있습니다. (물론 이 또한 궁극적으로는 애널리틱스 로그를 보내지 않도록 끌 여지는 있습니다.)
네트워크 측면: 배포된 클라이언트를 변조했든, 직접 프로토콜을 분석해서 대응되는 클라이언트를 창작했든, 어디서든 신뢰할 수 없는 패킷이나 메시지는 유입될 수 있다고 가정하는 것이 좋습니다. (마찬가지로 zero-trust 보안 모델에 따른 해석입니다.) 그래서 유입되는 패킷이나 메시지가 "정당한 요청"인지, 그리고 "신원 식별"이 이루어졌고, 6하 원칙에 따라 로그를 서버 측에 기록해두는 것이 좋습니다.
그래서 위의 두 가지 측면에서 "수집한 데이터"를 토대로, 분쟁이나 사건이 발생하면, 법적 판단을 위한 "증거 자료"로서 제출될 수 있도록 관리하는 것이 필요하다고 생각합니다.
일단 로그인 서버에서 client 의 위변조를 막는것 거의 불가능할것예요
웹의 경우 cors 라도 있지만 네이티브의 경우 그대로 정상 로그인으로 판단하죠
근데 제가 해커라면 굳이 프로그램을 디컴파일할것 같지는 않습니다.
그렇게 어렵게 하는니 단순히 통신 으로 들어가는 패킷 분석해서
위변조해서 통신으로 데이타를 얻겠습니다. 근데 이건 애초에 비번 이 털렸다는 얘기니
서버측에서 이상 신호에 대해서 모니터링 하면서 사람이 차단 관리하는 운영측면으로 풀어야겠죠
국내 내노라하는 온라인 게임도 그렇게 털려서 해적 서버 운영 되니까요
그리고 시큐어 코딩을 하면서 가이드만 충실하셔도 될것 같습니다.
C나 C++로 만들어도 어셈블리 수준에서 리버싱하면 안될게 없을겁니다.
특정기능은 서버에서 처리하는 수밖에 없습니다.
통상 리버싱을 방지하기 위해,
pe packer를 통해 실행파일 압축으로 리버싱이 어렵게하거나
pe protector를 통해 리버싱 방지를 하거나 합니다.
상용 protector중에 ASProtect, Themida를 사용합니다.
카카오톡 pc버전이 Themida를 이용하는 것으로 알고 있습니다.~