PHP 인코더, 디코더 (소스코드 암호화) 해보기

2020. 12. 21. 20:23· PHP/Modern PHP

 

 

for( $re = 0; $re < 10; $re++ ) {
    $code = gzinflate(base64_decode($code));
}

PHP의 함수들을 이용해서 매우 간단한 소스 코드 암호화 인코더&디코더 작업을 해보겠습니다.

(해당 인코더는 맛보기 수준이므로, 로더가 필요 없는 대신 인코더의 장점인 PHP 실행 속도 향상은 있지 않으며 그저 소스코드를 보지 못하게 하는 용도)

 

1. 사용 함수

eval ( string $code ) 매개변수 $code를 php로 실행함.

* 매개변수로 주어진 값을 PHP로 실행시키는 것이기에 $_GET, $_POST 등에 관련된 부분에서 해당 함수는 보안에 취약하기에 쓰지 않는 것이 좋습니다.
gzdeflate ( 아무튼 많음 ) : string|false 문자열을 gz 압축하는 함수, 리턴 값을 압축한 값으로 반환하는데 이를 실패시 false 오류를 반환합니다.
gzinflate ( string $data [, int $max_length = 0 ] ) : string|false gz 압축된 값을 해제하는 함수, 압축되지 않았거나 오류 발생시 false를 반환.
base64_encode ( string $data ) : string 매개변수 $data를 base64 방식으로 인코딩합니다.

* base64 방식으로 인코딩은 데이터의 양은 늘어나나 그 대신 ASCII에 비해 안전한 데이터 전달이 가능해짐.
base64_decode ( string $data [, bool $strict = false ] ) : string|false 매개변수 $data를 base64 방식으로 디코딩합니다.

 

2. 사용법

 

우선 $code 변수를 gzdeflate로 압축해줍니다.

$code = "echo 'hello world';";
$code = gzdeflate($code);
echo $code;

위와 같이 $code를 gz로 압축을 하고 이를 출력함으로써 글이 깨진 것을 알 수 있습니다.

(gz : 초기 리눅스 시스템에서 등장한 압축 유틸리티)

 

$code를 이번엔 base64_encode로 인코딩해줍니다.

$code = "echo 'hello world';";
$code = gzdeflate($code);
$code = base64_encode($code);
echo $code;

그러면 위와 같은 base64로 인코딩 된 것을 알 수 있습니다. 

이렇게 암호화된 텍스트는 복호화 작업을 거치지 않을 경우 알아볼 수 없습니다.

 

다음 방법들로 복호화 작업을 할 수 있습니다.

 

base64인 값을 디코딩을 하면

$code = "echo 'hello world';";
$code = gzdeflate($code);
$code = base64_encode($code);

$code = base64_decode($code);
echo $code;

이전에 나온 gz 형식의 값이 나온 것을 알 수 있습니다.

 

gz 압축을 해제하면

$code = "echo 'hello world';";
$code = gzdeflate($code);
$code = base64_encode($code);

$code = gzinflate(base64_decode($code));
echo $code;

아래와 같이 $code의 값이 나온 것을 알 수 있습니다.

해당 값을 eval의 넣으면 아래와 같이 hello world가 출력됩니다.

$code = "echo 'hello world';";
$code = gzdeflate($code);
$code = base64_encode($code);

$code = gzinflate(base64_decode($code));
eval($code);


 

3. 활용

 

암호화 작업은 한 번만 하는 것이 아닌 여러 번 하는 것도 가능합니다.

$code = "echo 'hello world';";
for( $re = 0; $re < 10; $re++ ) {
    $code = base64_encode(gzdeflate($code));
}
BcHLdkQwAADQD7JI03guupAhGKaj8ZzZkRKq8RhOqK/vvZj539MQ7LbtcIyuNDsge1sOcvQV+IVr0SOn70IGkMICLfQV5UW3xEOOnw+NExIDztEcYV2+8H7ClMQQPUbgIe5bUDXrn8l4F0Bs/Wdbs0snXUriLVyqfDdHSXBnNO1KEn8SeYUhOBVJw9R5Hj0JlnwojmQZof1XivRBt2q+UwYTG7rtPfK+KL3oNDtvcg7UBotaupPH05JzTUV9VostBlrpqroJl5JBpxyellbsq2WJgnMWeW1dSh5Fsman7l2JC/jt4x8=

위 텍스트와 같이 암호화 작업을 반복할 경우 이전보다 보기 더 어렵게 변하는 것을 알 수 있습니다

하지만  텍스트가 차지하는 용량도 그만큼 늘어나게 됩니다.

 

위 함수를 복호화 하려면 암호화한 만큼 복호화를 하면 됩니다.

for( $re = 0; $re < 10; $re++ ) {
    $code = gzinflate(base64_decode($code));
}

 

반응형

'PHP > Modern PHP' 카테고리의 다른 글

[PHP] 게시판 만들기 with MVC - 3부 View(List & Create)  (1) 2023.12.27
[PHP] 게시판 만들기 with MVC - 2부 Routing  (0) 2023.12.26
[PHP] 게시판 만들기 with MVC - 1부 Migration  (1) 2023.12.26
[PHP] PHP 면접 질문 정리  (2) 2023.12.08
PHP 써야 할까?  (0) 2022.11.18
'PHP/Modern PHP' 카테고리의 다른 글
  • [PHP] 게시판 만들기 with MVC - 2부 Routing
  • [PHP] 게시판 만들기 with MVC - 1부 Migration
  • [PHP] PHP 면접 질문 정리
  • PHP 써야 할까?
DSeung
DSeung
DSeung
Dev log
DSeung
  • 분류 전체보기 (193)
    • PHP (62)
      • Laravel (31)
      • Error (5)
      • Setting (11)
      • Modern PHP (15)
    • Go Lang (51)
      • Study (30)
      • Algorithm (17)
      • Setting (1)
      • Error (3)
    • Java (11)
      • Spring (3)
      • JSP (0)
      • Error (2)
      • Setting (2)
      • 단축키 (2)
    • JavaScript (6)
      • Modern JavaScript (4)
      • Node (1)
    • Android Kotlin (5)
      • Study (4)
      • Error (1)
    • 컴퓨팅 기술 (12)
      • 데이터베이스시스템 (4)
      • Docker (2)
      • 크롤링 & 스크래핑 (1)
      • API (1)
      • 클라우드 (1)
      • 네트워크 (1)
    • MySQL (7)
    • AWS (1)
    • Git (5)
      • GItLab (1)
      • GitHub (4)
    • 도메인 (2)
      • 안과 (2)
    • 자격증 (7)
      • SQLD (1)
      • 정보처리기사 (6)
    • Mac os (1)
    • 나머지 (13)
      • tistory (1)
      • 기타 (9)
      • 일기 (3)
    • 독서 (10)

인기 글

최근 글

블로그 메뉴

  • 홈
  • 태그
전체
오늘
어제
hELLO · Designed By 정상우.v4.2.0
DSeung
PHP 인코더, 디코더 (소스코드 암호화) 해보기
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.