포럼

Conory 님의 사이트에서 상당히 흥미로운 기능을 발견했었습니다.

PHP 소스 코드를 암호화하는 PHP 인코더 (http://www.conory.com/box/phpencoder.php) 기능을 제공하시더라구요~

알고 보니까, Conory 님의 모듈의 라이센스 관련 부분도 수정할 수 없도록 본 프로그램으로 인코딩이 되있더군요.

 

<?php eval(gzinflate(base64_decode('DZc1ssUIDgCPszPlwEy...

이런식으로 PHP 코드가 난독화(암호화?) 됩니다.

 

하여간, 여러가지 암호화 해보면서 가지고 놀다가, 인코더만 존재하고, 디코더가 없길래 직접 한번 제작해봤습니다.

본 디코더는 개인의 공부 목적으로 개발해본것이며,

디코더가 배포될 경우 인코더를 사용하시는 분들에게 피해가 생길 가능성이 존재하므로,

본 디코더는 외부에 공개하거나 배포되지 않습니다. 디코더 관련 문의는 정중히 사양하겠습니다.

 

 

1.png

우선 저는, .NET 프로그래밍해서 프로그램으로 제작하였습니다.

암호화된 소스 코드를 넣고서 DECODE ENC4PHP NOW! 버튼을 눌러주면~

 

2.png

이렇게 다시 원본 소스 코드로 복호화되게 됩니다.

테스트에 사용된 소스는 BNU 님의 알림센터 소스입니다.

 

마지막으로,

VB.NET 으로 코딩하면서, PHP 의 GZInflate / GZDeflate 가 무엇을 하는 함수인지 궁금했는데요...

 

다음과 같이, Inflate 및 Deflate 함수를 VB.NET에서 구현을 해봤습니다.

Public Function GZInflateBASE64(ByVal Input As String) As String
	Dim InputByte As Byte() = Convert.FromBase64String(Input)
	Using inputStream As New MemoryStream(InputByte)
		Using gzip As New DeflateStream(inputStream, CompressionMode.Decompress)
			Using reader As New StreamReader(gzip, UTF8Encoding.UTF8)
				Return reader.ReadToEnd()
			End Using
		End Using
	End Using
End Function



Public Function GZDeflateBASE64(ByVal Input As String)
	Dim sIn As Byte() = UTF8Encoding.UTF8.GetBytes(Input)
	Dim rawDataStream As New MemoryStream()
	Dim gzipOut As New DeflateStream(rawDataStream, CompressionMode.Compress)

	gzipOut.Write(sIn, 0, sIn.Length)
	gzipOut.Close()

	Dim compressed As Byte() = rawDataStream.ToArray()
	Return Convert.ToBase64String(compressed)
End Function

 

참고로, 위의 함수를 C# 으로 코딩하면 다음과 같습니다.

public string GZInflateBASE64(string Input)
{
	byte[] InputByte = Convert.FromBase64String(Input);
	using (MemoryStream inputStream = new MemoryStream(InputByte)) {
		using (DeflateStream gzip = new DeflateStream(inputStream, CompressionMode.Decompress)) {
			using (StreamReader reader = new StreamReader(gzip, UTF8Encoding.UTF8)) {
				return reader.ReadToEnd();
			}
		}
	}
}

public object GZDeflateBASE64(string Input)
{
	byte[] sIn = UTF8Encoding.UTF8.GetBytes(Input);
	MemoryStream rawDataStream = new MemoryStream();
	DeflateStream gzipOut = new DeflateStream(rawDataStream, CompressionMode.Compress);

	gzipOut.Write(sIn, 0, sIn.Length);
	gzipOut.Close();

	byte[] compressed = rawDataStream.ToArray();
	return Convert.ToBase64String(compressed);
}

 

String 형식으로 받기 위해서 Byte 를 BASE64 해서 보여주도록 만들었습니다.

테스트 해본 결과 잘 작동을 하더군요. 물론 어딘가에 문제가 있을지도... 모르겠습니다. ㅇㅅㅇ

 

오늘 이렇게 잉여로운 개발을 해보면서 느낀 점은,

PHP 소스의 경우 이온 큐브 등과 같이 별도 프로그램을 사용해서 서버단에서 암호화를 해제하는 구조가 아닌 이상에는 100% 소스 코드의 수정이 가능하다는 것이며, 반대로 개발자분들은, Conory 님의 PHP 인코더 정도만 사용해도 소스의 무단 수정을 어느 정도 방어할 수 있다는 것입니다. 실제로 XE 마켓이나 기타 등등에서 모듈을 구매하시는 분들 중, 관련 지식이 풍부한 개발자가 아닌 이상에는, 암호화를 해독할 수 있는 능력을 가진 분들은 거의 없을거라고 생각합니다. ^^;

글쓴이 제목 최종 글
W.O flat 디자인이 갑자기 왜 뜨게 된 걸까요 [18] 2014.04.19 by Garon
StyleRoot Conory 님의 PHP 인코더의 디코더를 만들어봤습니다. [3] file 2014.04.19 by 마끼아또
희망규짱 캘린더.. 기능? [1] 2014.04.19 by 키스투엑스이
휘즈 정체성 [6] 2014.04.19 by 또별
DynamicLaser 게시판 스킨은 지금것만 만들고 더이상 안만들어야겠어요 @_@ [12] 2014.04.19 by 또별
루팡쿠팡 sk,kt,lg 브로드밴드에서 오는 아이피 처리 어떻게 하시나요? [2] 2014.04.20 by 루팡쿠팡
EnterTM 1.7.x 에서 데이터 들여오기가 제대로 동작을 안하는거 같은데.. [6] 2014.04.20 by ForHanbi
마야 Html문서 공백제거는 하는 것이 좋을까요...? [5] file 2014.04.21 by 마야
라미아스튜디오 1.7.4 업데이트 하실분들.. 안쓰는 에디터 컴포넌트 삭제하고 업데이트 하세요. [3] 2014.04.21 by 독도2005
CTN XE버전별 가장 적합한(?) PHP버전은 어떤거라고 말하기는 어려운가요? [11] 2014.04.21 by 독도2005
W.O 다음 메이저 업데이트때 바라는 사항을 적어봅시다 [4] 2014.04.22 by 휘즈
ToFinder xe에 바랬던 사항이었는데... [5] 2014.04.22 by 라미아스튜디오
socialskyo 스케치북 게시판/이모티콘 컴포넌트 업데이트 되었습니다. [4] 2014.04.22 by 라미아스튜디오
친절뺀질이 document 객체에 대해 토의하고자 합니다. [1] 2014.04.22 by sejin7940
xe_마니 서버운영에 필요한 좋은 정보가 필요합니다. [10] 2014.04.22 by xe_마니
GG xe 자료실 자료들을 자신의 사이트에서 재배포 하시는 분들 [3] 2014.04.22 by LI-NA
mAKEkr 게시판 스킨 1달만에 다만들고 올렸네요. [12] 2014.04.22 by mAKEkr
루팡쿠팡 트래픽을 조금이라도 절감 하는 방법 어떤것들이 있을까요? [6] 2014.04.22 by 루팡쿠팡
treasurej CSS 파일에도 템플릿 문법사용이 불가능한가요? [3] 2020.03.14 by BJ람보
숭숭군 자료를 내려야 하는건지.. 요즘 많은 생각이 듭니다. [32] 2014.04.23 by 아기나옹이