본문 바로가기

리눅스

[draft] screwim을 사용하여 PHP 파일을 보호하고 이를 테스트하는 방법

728x90

screwim을 사용하여 PHP 파일을 보호하고 이를 테스트하는 방법

screwim 확장 모듈 확인

cd /usr/share/nginx/html
vim getModules.php
<?php
// 실행 환경 확인 (CLI인지 아닌지)
$is_cli = (php_sapi_name() == 'cli');

// 모든 로드된 PHP 모듈을 가져옴
$loaded_modules = get_loaded_extensions();

// 모듈 리스트 출력
if ($is_cli) {
    // CLI 환경일 경우
    echo "Loaded PHP Modules:\n";
    foreach ($loaded_modules as $module) {
        echo "- " . $module . "\n"; // CLI 환경 줄바꿈
    }
} else {
    // HTML 환경일 경우
    echo "Loaded PHP Modules:<br>";
    foreach ($loaded_modules as $module) {
        echo "- " . htmlspecialchars($module) . "<br>"; // HTML 환경 줄바꿈
    }
}
?>

로드된 PHP 모듈 확인

  • 웹 브라우저(HTML)
http://localhost/getModules.php
  • curl 명령
curl http://localhost/getModules.php

CLI

  • php 명령어
php getModules.php
php -m

head length와 key byte 확인

screwim -v
$ screwim -v
HEADER LENGTH : 14
KEY BYTE      : 6c2cf730d3f533dbc4118a03e
KEY STRING    : 24361, 56743, 3168, 30110, 75432
728x90

1. db_config.php

vim db_config.php
<?php 
$db_password = "FuBao"; 
?>

2. screwim으로 암호화

screwim db_config.php

PHP 원본 소스와 암호화된 소스를 비교

더보기

---

원본 PHP 코드(db_config.php)

hexdump -C db_config.php
00000000  3c 3f 70 68 70 20 24 64  62 5f 70 61 73 73 77 6f  |<?php $db_passwo|
00000010  72 64 3d 22 46 75 42 61  6f 22 3b 20 0a           |rd="FuBao"; .|
0000001d

암호화된 PHP 코드(db_config.php.screw)

hexdump -C db_config.php.screw
00000000  45 31 32 23 33 48 58 48  35 46 4c 53 24 39 e7 09  |E12#3HXH5FLS$9..|
00000010  20 ee 91 f7 49 cf 58 da  16 34 10 29 b3 26 bd 90  | ...I.X..4.).&..|
00000020  91 75 d0 ca 7a b8 2a f4  f3 36 2d 5e 73 5d be ab  |.u..z.*..6-^s]..|
00000030  d5 96 5b                                          |..[|
00000033

---

3. test.php

vim test.php
<?php
// ScrewIM 보호 설정을 켜고 끄는 함수 정의
function enable_screwim($enable = true) {
    ini_set("screwim.enable", $enable ? "1" : "0");
}

// ScrewIM을 활성화하여 암호화된 파일 포함
enable_screwim(true);
require_once("db_config.php.screw");
enable_screwim(false);

// 데이터베이스 비밀번호 확인
if (isset($db_password)) {
    echo "DB Password: " . htmlspecialchars($db_password, ENT_QUOTES, 'UTF-8') . "\n";
} else {
    echo "Error: DB password is not set.\n";
}
?>

웹 브라우저 확인

http://localhost/test.php

web

curl 명령으로 확인

$ curl http://localhost/test.php
DB Password: FuBao

 

728x90