코드난독화 :: 해커를 엿먹여보자#
얼마전 에셋스토어에 AntiCheat Tool Kit 이 세일을 하길래 냅다 질러봤습니다.
해커들을 막는 보안솔루션이라고 거창하게 광고를 하길래 호기심에 지름신 강림!
어떤 기능들이 있는지 둘러봤다.
Assembly-Csharp.dll 이 잘 뽑혔는데 당췌 코드를 분석할수 없는 사태에 빠지게 된다면..??
그보다 더 허탈한 일은 없을것이다.
위 스샷을 보면.... result 문이 실행면 카드뽑기 가 실행된다는것을 알수있다.
해커들이 위 코드를 해킹하게되면 .. 대충 아래와 같은 스샷으로 해커들에게 보여지게 된다.
아래 스샷은 난독화 1차 적용을 하였지만 ..메소드명 및 클래스명정도만 가려져 코드추출 후 인자 추적을 하면 해킹이 불가능한 수준은 아니라는것을 알 수 있다.
넥슨에 계셨던 지인이 이정도 난독레벨을 적용 후 출시한 게임을 본인이 해킹 성공하기까지 5시간정도 걸렸었다.. 불가능한게 아니란걸 시간과 몸으로 때워 증명했다 (ㄷㄷㄷ개노가다)
결론: 이정도 코드 난독화 수준으로는 해커의 노가다와 집중력에 의해 충분히 코드의 실행순서 및 경로 유추가 가능하다는것. 재밌는점은 코드 extract 후 난독이 된 상태의 코드를 노트패드++에 올려 string 검색을 하면 해당 string이 검색이 된다는점.(난독이 걸려있는상태지만 신기하게 해당 string을 가르키더라)
난독화 레벨을 좀더 올려보도록 하자.
메소드명과 실행 구문들 사이 사이에 외계어처리를 하여 당최 뭔말인지 알아먹기 힘들수준이 되어가고있다.
코드를 짠 본인조차 이게 뭔말이여?? 하는 수준이 되가고 있다.
중간에 FAKE CODE 를 삽입하여 실행구문과 관계 없는 해커를 혼동 시키기위한 지뢰까지 심어보았다.
아래 스샷을 보면 이미 코딩이아니라 ET가 짠 외계어 내지 고대 이집트 상형문자(?!)수준이 되버렸다. 이쯤되면 슬슬 해커는 마우스를 집어던지고싶은 충동을 느끼기 시작한다.
확.인.사.살. 마무리!
난독화를 모든 메소드 및 실행구문에있어서 할수있는 만큼 최대로 적용해 보았다.
해커에게 보여지는 클래스, 메소드명부터 실행구문까지 코드를 알아볼수 없을정도로 박살내고 뭉개놓는다.
코드 실행에는 아무 지장이 없으며 해커짱은 게임을 힘들게 디컴파일에 성공해도 해킹시도시점에서 이미 좌절하고 덮게 될 것이다. 그러나 볼륨이 큰 게임일수록 위의 방법은 알수없는 오류와 충돌이 생길수있다고하니 현업에서 자주쓰이는방법은 아닌거같다
(실제로 위 방법이 적용된게임을 본게 한손에 꼽을정도..그것도 전체 적용이 아닌 중요 클래스와 메소드에만 부분적용을 시켰더라..)
아래 스샷에 맨 처음 스샷에 Rename 해둔 SecuredResult 로 표시 되는것을 볼 수 있다.
(코드 내부적으로는 Result 로 실행이 된다)
그나마 우리가 알아보기위해 SecuredResult 로 정해둔거지 좌측처럼 [][][][][][][][][][][]() 난독화 후 통상 이런식의 메소드명으로 보이게 해뒀다.
특수문자 아스키코드 영/숫자 무작위 배치등 .. 어느것이든 좋지만 본인은 개인적으로 [][][[[[]]]] 이런식의 깔끔해보이는 배치가 보기좋더라 ㅎㅎ
하단의 읽을수 있는 한글 부분의 String 난독도 가능하지만 어차피 로그찍는부분이라.. 코드상에서 지워도되는 무방한 부분이므로 이해를 돕기위해 냅뒀다
이정도까지 변태적으로 코드난독화가 적용된 게임은 아직 본적이 없지만
-이렇게까지 하는 보안 변태가 있을까싶지만;
이렇게 출시된 게임이 나타난다면... 나라면 조용히 덮겠다 ㅎㅎ;