티스토리 뷰

[정보] PHP 코드 암호화 (PHP screw 개선)

안녕하세요! 아이굿소프트입니다. 오늘은 PHP 코드 암호화에 대해서 소개를 합니다. 




php_screw를 수정해서 mod_screwim (PHP Screw Improved) 라고 fork를 했고요. 초점은 코드 암호화를 하여 배포를 하는 것 보다는, 설정 파일을 암호화 해서 사용하는데 초점을 맞추었습니다. 

그리고, 솔직히 성능 문제는 php screw가 zend compiler를 hooking 해서 처리하는 놈이기 때문에 opcache나 APC 같은 cache랑 같이 사용하면 거의 성능 손실은 체감하기 힘들기는 합니다만, 접속이 무지하게 많은 경우에는, cache가 갱신 되는 시점에서 race condition이 발생할 경우 리소스 손실을 발생시킬 수 있기 때문에 개선 작업을 하게 되었고요. 

대략적인 개선 사항은, 다음과 같습니다. 

1. temp flie을 생성하는 방식에서  PHP memstream을 이용한 방식으로 개선 
  - 개선 사항에 있던 memory leak 수정 
  - 반환값이 없을 경우 segfault 발생하는 문제 수정 
2. 전역 변수를 없애 thread safe하도록 수정 
3. memory reallocation 로직을 수정하여 사이즈가 큰 암호화된 파일을 decode 시에 성능 개선 
4. 암호화 SEED key 자동 random 생성 
5. screwim.enable ini 옵션이 enable 상태에서만 decodeing을 한다. (ini_set 이용 가능하며, magic key 검사 이슈) 
6. runtime encrypt/decrypt API 제공 (screwim_encrypt(), screwim_decrypt(), screwim_seed()) 
7. php_unscrew 방식의 복호화를 어렵게 수정 

Recent Comments