포럼

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 마켓이나 기타 등등에서 모듈을 구매하시는 분들 중, 관련 지식이 풍부한 개발자가 아닌 이상에는, 암호화를 해독할 수 있는 능력을 가진 분들은 거의 없을거라고 생각합니다. ^^;

글쓴이 제목 최종 글
EnterTM 1.7.x 에서 데이터 들여오기가 제대로 동작을 안하는거 같은데.. [6] 2014.04.20 by ForHanbi
루팡쿠팡 sk,kt,lg 브로드밴드에서 오는 아이피 처리 어떻게 하시나요? [2] 2014.04.20 by 루팡쿠팡
DynamicLaser 게시판 스킨은 지금것만 만들고 더이상 안만들어야겠어요 @_@ [12] 2014.04.19 by 또별
휘즈 정체성 [6] 2014.04.19 by 또별
희망규짱 캘린더.. 기능? [1] 2014.04.19 by 키스투엑스이
StyleRoot Conory 님의 PHP 인코더의 디코더를 만들어봤습니다. [3] file 2014.04.19 by 마끼아또
W.O flat 디자인이 갑자기 왜 뜨게 된 걸까요 [18] 2014.04.19 by Garon
우리아기 위젯 스킨을 만들어 보려 하는데요 [2] 2014.04.19 by 숭숭군
애니즌 그룹아이콘 삭제 방법이 없네요 [2] file 2014.04.18 by 애니즌
XE XEHUB 오픈오피스 데이! 애드온 개발 강좌 2차 시작했습니다~ [11] file 2014.04.18 by 애니즌
nado0124 어제 무슨 일 있었나요? [14] 2014.04.18 by ForHanbi
마야 사이트 속도측정, 분석사이트와 각 기기(사이즈)별로 해상도 확인하기 [1] 2014.04.18 by JinkPark
XE힘들당휴 XE를 제로보드처럼 쉽게 보고 접근했는데요 [8] 2014.04.18 by XE힘들당휴
StyleRoot 사이트 디자인 지적좀 해주세요~ [11] file 2014.04.19 by ForHanbi
도라미 우분투 14.04 LTS [19] file 2014.04.13 by 도라미
업글 더미 글에는 역시 아이유 뮤직비디오. +_+ [4] file 2014.04.11 by 업글
숭숭군 xe폴더 어떻게 처리 하시는지요? [7] 2014.04.17 by 국가정보보안
애니즌 예전 제로보드 사용할 때 쓰던 zerocounter db를 xe_counter로 이전했습니다. [4] file 2014.04.17 by 애니즌
루팡쿠팡 문득 든 생각인데요... [1] 2014.04.17 by 애니즌
업글 XE ROUTE기능은 언제쯤 적용될까요? [5] 2014.04.17 by LI-NA