游戏类App开发完成后试运行阶段,发现存在反编译漏洞,被建议可使用代码混淆、代码虚拟化进行一下代码保护,想了解下这个过程是怎么实现的,需要提供源代码么?
天蓬老师2017-04-17 17:36:49
1.1 코드 가상화란?
우리는 프로그램 실행이 사양을 준수하는 명령어 세트의 CPU 구문 분석 및 처리에 달려 있다는 것을 알고 있습니다. 원래 명령어 세트가 사용자 지정 사양을 통해 변환되어 새로운 명령어 세트(가상 명령어 세트라고 함)를 생성하는 경우 CPU는 가상 명령어를 인식할 수 없습니다. 이때 가상 명령어 세트를 파싱할 수 있는 인터프리터(가상머신이라고 함)와 협력하면 CPU를 통해서가 아니라 가상머신을 통해서 가상 명령어를 실행할 수 있다. 이 프로세스를 코드 가상화라고 합니다.
ARM 플랫폼 코드 보호 가상화
1.2 코드를 가상화하는 이유는 무엇입니까?
앱 리소스 도난, 네트워크 프로토콜 크래킹, 플러그인으로 인한 게임 파괴를 방지하기 위해 점점 더 많은 개발자가 코드 보안 문제를 고려하는 데 더 많은 시간과 에너지를 투자해야 합니다. 그러나 모바일 플랫폼에서는 공격과 방어가 동등하지 않습니다. 공격자는 방어자보다 높은 수준의 권한을 갖는 경우가 많습니다. 기술 자료의 대중화로 인해 모바일 플랫폼의 역분석이 쉬워졌고 많은 보안 전문가들이 패커 제품을 많이 출시했습니다. 패커는 정적 분석에 좋은 효과가 있지만 실행 후에는 원본 내용이 메모리 코드에 노출됩니다. , 공격자가 창 덤프 메모리를 점유하고 필요한 수리를 수행한 다음 IDA에서 읽고 분석할 수 있습니다. 코드를 가상화한 후에는 덤프하더라도 프로그램 실행 시 가상 명령어 세트가 네이티브 명령어 세트로 복원되지 않으므로 IDA는 가상화된 코드를 읽을 수 없습니다. 따라서 공격자는 논리적 복잡성이 매우 높은 가상 머신만 분석할 수 있습니다. 이는 코드 분석에 필요한 난이도와 시간을 크게 증가시킵니다. 난독화 및 기타 수단과 결합하면 대부분의 공격자가 저지될 것이라고 생각합니다.
물론 상대적인 안전을 위해서는 상대적인 손실도 감수해야 합니다. 가상 명령어 세트의 실행 효율성은 기본 명령어 세트의 실행 효율성보다 약간 낮으므로 가상화로 보호되는 코드가 가장 중요하고 핵심적인 부분인 경우가 많습니다.
1.3 코드를 가상화하는 방법은 무엇입니까?
위 이론을 바탕으로 우리는 가장 중요한 두 부분이 필요하다는 것을 알았습니다. 하나는 새로운 명령어 세트이고 다른 하나는 가상 머신입니다. 새로운 명령어 세트의 경우 opcode를 사용하여 일부 명령어를 일시적으로 변환할 수 있으며 생성된 데이터를 원본 파일에 직접 백필할 수 있습니다. 파일을 IDA로 드래그한 후에 지침이 혼란스러워서 정적 분석에 저항하려는 목적을 달성했다는 것을 알게 될 것입니다. 이때 프로그램을 실행하면 가상머신이 아직 없어 크래시가 발생하게 됩니다. 왜 가상 머신이라고 불리는가? 레지스터, 스택 등 현재 코드를 실행하는 데 필요한 환경을 시뮬레이션해야 하기 때문입니다. 필요한 가상 환경을 초기화한 후 장면 보호 및 복원에 주의하면서 가상 명령을 구문 분석하고 실행합니다.
1.4 관련 강화 기술은 어떻게 활용하나요?
Tencent Royal Security와 같은 기존 강화 제품은 ARM 플랫폼의 코드 가상화 보호 기능을 구현하고 Android 암호화 압축 셸, Android APK 코드 난독화 등과 같은 주류 기능을 통합했으며 상대적으로 우수한 동적 및 정적 분석 기능. 강력한 방어 능력. 동시에 애플리케이션 보안 강화 서비스는 전적으로 바이너리 파일 작업을 기반으로 하며 모바일 애플리케이션 개발자가 소스 코드를 제공할 필요가 없습니다. 비교적 안정적인 기술을 갖춘 타사 보안 서비스 제공업체가 개발자에게 사용을 권장할 수 있습니다.