본문 바로가기

리눅스

[draft] PHP에서 ScrewIM 확장 모듈을 설치하는 방법

728x90

PHP에서 ScrewIM(screwim) 확장 모듈을 설치하는 방법

ScrewIM 모듈이란?

ScrewIM은 PHP 코드를 암호화하여 소스 코드 유출을 방지하고 불법 복제를 어렵게 만드는 확장 모듈입니다. PHP 애플리케이션의 보안을 강화하는 데 효과적입니다.

테스트 환경

$ lsb_release -d
Description:	Ubuntu 22.04.2 LTS
$ php --version
PHP 8.1.2-1ubuntu2.13 (cli) (built: Jun 28 2023 14:01:49) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.2, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.2-1ubuntu2.13, Copyright (c), by Zend Technologies

필수 패키지 설치

sudo apt-get install -y build-essential autotools-dev zlib1g-dev
sudo apt-get install -y php-devel php-pear

Screw(screwim) 확장 모듈 설치

소스 코드 다운로드

cd /usr/local/src/
git clone https://github.com/OOPS-ORG-PHP/mod_screwim.git
cd mod_screwim

매직 키(Magic key) 수정

  • #define SCREWIM "\tSCREWIM DATA\t"
vim php_screwim.h
 34 #ifndef PHP_SCREWIM_H
 35 #define PHP_SCREWIM_H
 36 
 37 #define SCREWIM     "\tSCREWIM DATA\t"
 38 #define SCREWIM_LEN 14
 39 
 40 /* If build PHP module {{{
 41  */
 42 #ifndef NO_PHP_MOD

Screwim 컴파일 및 설치

컴파일

phpize
./configure --with-php-config=/usr/bin/php-config

시드 키(Seed Key) 변경

  • #define SCREWIM_ENC_DATA 14740, 18008, 5850, 3720, 19113, 5486, 19825, 22165, 4432
vim config.h
 58 /* define to support ScrewIm decrypt api */
 59 /* #undef SCREWIM_DECRYPT */
 60 
 61 /* Define to ScrewIm encrypt SEED key */
 62 #define SCREWIM_ENC_DATA 14740, 18008, 5850, 3720, 19113, 5486, 19825, 22165, 4432
 63 
 64 /* Define to ScrewIm Name */
 65 #define SCREWIM_NAME "ScrewIm"

설치

sudo make install

PHP에 Screwim 확장 모듈 로드

  • Screwim 확장 모듈을 로드하도록 설정합니다.
echo "screwim.enable = 1" | sudo tee /etc/php/8.1/mods-available/screwim.ini
echo "extension=screwim.so" | sudo tee -a /etc/php/8.1/mods-available/screwim.ini
sudo ln -s /etc/php/8.1/mods-available/screwim.ini /etc/php/8.1/fpm/conf.d/91-screwim.ini
sudo ln -s /etc/php/8.1/mods-available/screwim.ini /etc/php/8.1/cli/conf.d/91-screwim.ini

또는

echo "extension=screwim.so" | sudo tee /etc/php/$(php -r 'echo PHP_MAJOR_VERSION . "." . PHP_MINOR_VERSION;')/mods-available/screwim.ini
sudo phpenmod screwim
728x90

Screwim 모듈 설치 확인

  • php -m 명령을 사용하여 Screwim이 PHP에 올바르게 설치되었는지 확인할 수 있습니다.
php -m | grep screwim
$ php -m | grep screwim
screwim

웹 서버 및 PHP-FPM 재시작

웹 서버와 PHP-FPM을 재시작

sudo systemctl restart nginx php-fpm

명령행 암화화 도구(screwim 명령어 설치하는 방법)

cd tools
./autogen.sh
./configure
sudo make install

 

which screwim
$ which screwim
/usr/local/bin/screwim

 

$ screwim -h
screwim 1.0.6 : encode or decode php file
Usage: screwim [OPTION] PHP_FILE
   -c VAL, --convert=VAL convert key byte to digits
   -d,     --decode   decrypt encrypted php script
   -h,     --help     this help messages
   -H VAL, --hlen=VAL length of magic key(SCREWIM_LEN or PM9SCREW_LEN).
                      use -d mode
   -k VAL, --key=VAL  key bytes. use with -d mode
   -v,     --view     print head length and key byte of this file

screwim 명령어를 사용하여 파일 암호화하는 방법

암호화할 파일 생성

echo "AAA3" > zz.txt
$ cat zz.txt
AAA3

 

$ file zz.txt
zz.txt: ASCII text

파일 암호화

screwim zz.txt
$ screwim zz.txt
Success Crypting(zz.txt.screw)

 

$ file zz.txt.screw
zz.txt.screw: data

 

$ cat zz.txt.screw
	SCREWIM DATA	l�qC���p��

파일 복호화

screwim --decode zz.txt.screw
$ screwim --decode zz.txt.screw
Success Decrypting(zz.txt.screw.discrew)

 

$ file zz.txt.screw.discrew
zz.txt.screw.discrew: ASCII text

 

$ cat zz.txt.screw.discrew
AAA3

 

참고URL

- PHP Screw Improved(ScrewIm) 확장 모듈 : https://github.com/OOPS-ORG-PHP/mod_screwim/blob/master/README.ko.md

 

728x90