TokigunStudio obfuscation collection

Text2PNG

입력받은 텍스트를 png 파일로 바꿔 주는 간단한 php 유틸리티입니다. libpng, zlib, 심지어 gd 라이브러리 등등의 외부 라이브러리 없이 순수 php만으로 구현되어 있습니다. (대신 압축 과정이 빠져 있기 때문에 최종 생성물은 조금 큽니다. -_-;) 한글도 구현하고 싶었지만 시간도 없고 소스가 너무 커져서 때려 쳤습니다.

내장된 글꼴은 Microsoft Windows XP에 포함되어 있는 Tahoma 글꼴 8포인트의 갈무리로, 이 글꼴의 저작권은 마이크로소프트에게 있습니다. 이 프로그램은 GNU LGPL을 따르며 마음대로 사용할 수 있습니다.

코드

php 자체 함수로 문법을 강조한 버전도 있습니다.

<?php error_reporting(0);extract($_GET);$B=split('-','--pJhD50QC4Qio-VFEYhhSqXEc
4Xzfc7j4Z4/z/z4e8Yx4nPHPH/hjEYx/IRBIBkLDCSA-VFPkiRScIMWRiaCAxiBQCgjIoRQghChlGPFF
FFFAkMYjGIYiUgGQEMJI-T+koSIaiFEgQqhAUYpBjAzlKMEMIQQoaRVpgxgxQJDGIqUKIoned7u/3l7e
d59fxjJjHySA-RSjIMoSCFEgjS94TopGP4YqSl6CH34P0OIq0wYwYnEhUqiKJEYIYxGMjG0yYxjHRIxk
qiJJGIA-RRwTSof/USED8MSReAgAAUpKUYIYQnhQ4iTLB9B8CSFSqIQkRfGI/kY3GTGMYzJFVUiixHJA
-X4oUxIRCiRARBiSIQDH8MlJ/jBDCEMKGkSZYMIMgSQqVSiIiMYxGEjG0yYxjGHIqqkUhJIw-CgokxoR
CSiSERRiiIkgxgJ9DFCKEEYUMogxooIogkhIRIkhCYxiMZGNlkxjGMGRIiUSCSA-SjwjOUhCUc77hOch
zEgKBEBD4/z8D4f0fgxnIHIfEeIRIk/CX+d7o+Njkxd585vIiiTySA-IkojwEhIWAUEkA-IZJAf/7qAU
Co-');$R='kMMOucMW?GM]MWu_?C?CgoMkCOcsQG?CMSMSMSMSMSMSMSMSMSMSMwA?Mk]KMkMQG?MU'.
'MSMUMUMSMSMUMUMOMQMSMQMWMUMWMS?_MUMSMSMUMSM[MSMSMS?CE_?CiGEQ}CM{M?MyM?M{K{ACM'.
'?MK?UM?KwO?M{M{ACACMwMyMOM{M{O?M{ACMy?E?C?E]K';function T($t,$d){return pack(N,
strlen($d)).$t.$d.pack(N,crc32($t.$d));}$A=$g=$o=$r=array();for($i=14;--$i;$j=0)
for($s=base64_decode($B[$i]);$j<strlen($s);$j++)$o[$i].=sprintf('%08b',ord($s{$j
}));for(;$i<190;$i+=2){$v=ord($R{$i})*16+ord($R{$i+1})/2-1039;$a=($v/10)%11+2;$h
=($v/110)%10+1;$q=array();$u=str_repeat(0,$l=$v%10+1);for($j=0;$j<14;$j++)if($j<
$a||13<$j+$h)$q[$j]=$u;else{$q[$j]=substr($o[$j],$g[$j],$l);$g[$j]+=$l;}$A[]=$q;
}$a=1;$i=$g=$h=$w=0;$d='';if(get_magic_quotes_gpc())$t=stripslashes($t);$t=strtr
($e!=base64?$e!=hex?$e!=rot13?$e!=reverse?$t:strrev($t):str_rot13($t):pack('H*',
$t):base64_decode($t),array("\r\n"=>"\n","\r"=>"\n"));while($i<strlen($t))if(($c
=ord($t{$i++}))==10)$h+=14;else for($j=0;$j<14;$j++)$r[$h+$j].=$A[$c-32]?$A[$c+-
32][$j].'0':sprintf('%08b',$j%11-1?$j%13?130:0:254);$h+=14;for($i=0;$i<$h;$w<($v
=strlen($r[$i++]))&&($w=$v));for($i=0;$i<$h;$i++,$d.=chr($c<<((~$j+1)&7)))for($c
=$j=0;$j<$w;$c=$c*2+$r[$i]{$j++})if($j%8<1){$d.=chr($c);$c=0;}$o=$r='';$l=strlen
($d);header('Content-Type:image/png');$b=$b?$b:'255,255,255';for($i=0;$i<$l;$r.=
'0000000'){$s=substr($d,$i,4096);$r.=($i+=4096)<$l?'010':110;for($j=0;$j<strlen(
$s);$j++){$g+=$a+=$c=ord($s{$j});$c+=$c<144?48:256;for($n=8|$c>>8;$n--;$r.=($c>>
$n)&1);}$a%=65521;$g%=65521;}$l=strlen($r);for($i=0;$i<$l;$o.=chr($c))for($c=$j=
0;$i<$l&&$j<8;$c|=$r{$i++}<<$j++);$b=split(',',"$b,0");$f=$f?$f:'0,0,0';$f=split
(',',"$f,255");echo"\x89PNG\r\n\x1a\n".T(IHDR,pack(NN,$w,$h)."\1\3\0\0\0").T(PL.
TE,pack(CCCCCC,$b[0],$b[1],$b[2],$f[0],$f[1],$f[2])).T(tRNS,pack(CC,$b[3],$f[3])
).T(IDAT,"\x78\1$o".pack(nn,$g,$a)).T(IEND,'')# by Kang Seonghoon (2005.1.12) ?>

데모

다음은 이 프로그램을 직접 시험해 볼 수 있는 폼입니다. 예를 들어서 제 메일 주소는 tokigun, 골뱅이, gmail, 마침표, com입니다.

일러두기: 색깔은 "빨강,초록,파랑,투명값" 순서로 입력해 주세요. 모든 값은 0부터 255까지이며 투명값은 255가 불투명, 0은 투명입니다. 투명값은 생략할 수 있습니다.


암호화 방법:
글자 색깔:
배경 색깔:

사용법

이 프로그램을 사용하기 위해서는 php 4.0.0 이상이 필요합니다. 단, rot13 인코딩은 str_rot13 함수를 사용하기 때문에 php 4.2.0 이상이 필요합니다. 이 프로그램은 register_global이 Off일 때도 잘 작동합니다. :)

이 프로그램은 항상 GET method로만 값을 넘겨 받으며, 지원하는 필드는 다음과 같습니다:

이 프로그램에서 출력해 내는 png 파일은 indexed color를 사용하며, 단 두 가지 색깔만 출력 가능합니다. (물론 프로그램을 고치면 여러 색깔로도 출력할 수 있습니다) 내부적으로 deflate 알고리즘을 구현하지만, 실제로는 압축을 하지 않고 실제 데이터를 형식에 맞게 고쳐서 그냥 출력합니다. 평균 압축률은 -5.5%입니다. -_-;;;

관련 파일


지금은 글을 남길 수 없고 이미 남겨진 걸 볼 수만 있습니다.

5551 2005/10/04 00:09:18

1511 2005/10/04 00:09:12

ㄱㄱㄱㄱ 2005/08/09 09:22:24

Copyright © 2004-2005, Kang Seonghoon (Tokigun). All Rights Reserved.
Permanent Link: http://page.tokigun.net/obfuscation/_/text2png.php
Last updated on January 12, 2005. Valid XHTML 1.1 Valid CSS 2