#n3ur0n4 c0rp | silicon cell into your mind

CAT | PHP

Mar/10

12

algoritmo_codificar_base64.php

Un cordial saludo a todos los programadores expertos y aficionados, hace un par de días encontré un artículo de CrashCool en un ahora extinto foro hackxcrack, trata de el algoritmo a seguir para pasar cualquier texto a base64.

Ya que muchos usamos funciones para codificar en tal base sin embargo muchos no se preocupan por el funcionamiento detrás de esas funciones. Así que tome como ejercicio de programación el base64_encode().

Publicado: Domingo, 26 Octubre 2003, 01:34 Título del mensaje: Codificando base64 (+Prog. en Java)

“Explicación del algoritmo

Partimos de que cada letra tiene su valor ASCII, un ejemplo que todos conoceréis es el símbolo ~ que equivale a 126, dicho esto prosigo.

Funcionamiento del algoritmo


-1º Se coge el valor ASCII de cada carácter de texto (en decimal) y lo pasamos a binario con 8 bits, formando así una cadena con el código binario de todas las letras del texto a codificar.


-2º Una vez obtenida dicha cadena ej. 10010100 00110100 11001010

se divide en cadenas de 6 bits (de izq. a derecha), con lo cual dividiremos la longitud de la cadena entre 6, como estarás pensando, la división no siempre saldrá exacta con lo cual rellenaremos con 0 el grupo de 6 bits de la derecha hasta completar 6.


-3º Una vez obtenidos los grupos de 6 bits, pasamos estos grupos de binario a decimal, con lo cual obtendremos un numero (obligatoriamente comprendido entre 0 y 64), ahora cogemos la tabla de caracteres de b64 comprendida entre [A-Z][a-z][0-9][+,/] y miramos en la tabla el número que le corresponde:

Valor Codificación Valor Cod. Valor Cod. Valor Cod.

0 A___ 17 R___ 34 i___ 51 z

1 B___ 18 S___ 35 j___ 52 0

2 C___ 19 T___ 36 k___ 53 1

3 D___ 20 U ___ 37 l___ 54 2

4 E___ 21 V___ 38 m___ 55 3

5 F___ 22 W___ 39 n___ 56 4

6 G___ 23 X___ 40 o___ 57 5

7 H___ 24 Y___ 41 p___ 58 6

8 I___ 25 Z___ 42 q___ 59 7

9 J___ 26 a___ 43 r___ 60 8

10 K___ 27 b___ 44 s___ 61 9

11 L___ 28 c___ 45 t ___ 62 +

12 M___ 29 d___ 46 u ___ 63 /

13 N___ 30 e___ 47 v___

14 O___ 31 f___ 48 w___ (relleno) =

15 P___ 32 g___ 49 x___

16 Q___ 33 h___ 50 y___

-4ºUna vez obtenida la cadena en b64 contamos los caracteres q la forman y comprobamos q el resto de dividirla entre 4 es 0, en caso contrario añadiremos tantos símbolos de relleno “=” como hagan falta para conseguir esta divisibilidad , imaginad q la cadena q nos sale es de 15 caracteres, en este caso le añadiríamos al final el carácter ‘=’ con lo cual la longitud ahora es 16 (divisible entre 4).”

Bueno eso es todo por parte de CrashCool después nos brinda el algoritmo de un codificador en java pero solo lo teórico es lo que nos importa por ahora ya que crearemos nuestro propio algoritmo.

Algoritmo

Todos los que usamos PHP como lenguaje de base para nuestras plataformas web conocemos la función base64_encode() que traduce a base64 cualquier string que le pasemos como parámetro. Sin embargo pocos sabemos nos damos a la tarea de saber que hay detrás de dicha función. Vamos por decirlo así: “que hay bajo la falda de la señorita base64_encode() XD.

Ahora después de conocer el algoritmo por el que se rige el base64 nos podemos dar a la tarea de lograr nuestra propia función base64_encode() a la cual llamare str_b64() y el lenguaje de desarrollo ustedes lo eligen, yo elegí PHP.

Sin más jerga les dejo mi código espero les ayude a comprender el algoritmo antes citado por CrashCool.

  1. <?
  2. /*===============================================
  3. * function str_b64 ($text):
  4. * by: Lestat de Lioncourt
  5. * to: http://n3ur0n4.org
  6. * reply to: lestat[at]n3ur0n4[dot]org
  7. * algoritmo para la generacion de una cadena en
  8. * base64 a partir de un texto dado por la llamada
  9. * a dicha funcion.
  10. * algoritmo de la funcion base64_encode()
  11. ===============================================*/
  12. $cadena = "str_b64 by Lestat de Lioncourt to n3ur0n4.org.";
  13. echo str_b64($cadena);
  14. echo "<br />".base64_encode($cadena);
  15. function str_b64 ($text) {
  16. /*===============================================
  17. * declaramos el array de caracteres de base 64
  18. * consta de 64 caracteres 0 -- 63.
  19. =================================================*/
  20. $b64chr = array ('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P',
  21. 'Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f',
  22. 'g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v',
  23. 'w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/');
  24. /*===============================================*/
  25. /*===============================================
  26. * paso 1: convertimos a binario cada caracter de la
  27. * cadena y lo guardamos en una cadena auxiliar
  28. * llamada $binstring (cadena en binario).
  29. =================================================*/
  30. for ($x = 0; $x < strlen($text); $x++) {
  31. $binstring .= atob ($text[$x]);
  32. }
  33. /*=================fin paso 1====================*/
  34. /*===============================================
  35. * paso 2: una vez obtenido el binario del texto
  36. * a convertir, generamos sexetos del binario
  37. * no siempre tendremos sexetos enteros al final
  38. * es desir "000000" en caso de lo contrario se
  39. * rellenara con "0" el ultimo sexeto hasta completarlo
  40. * los sexetos obtenidos los guardamos en un arreglo
  41. * para su mejor manipulacion en el sig. paso.
  42. =================================================*/
  43. $i = 0;
  44. while ($i < strlen($binstring)) {
  45. if (strlen(substr($binstring,$i,6)) == 6) {
  46. # obtenemos nuesto sexeto y lo guardamos en el arreglo $sexetos[]
  47. $sexetos[] = substr($binstring,$i,6);
  48. } else {
  49. /* si el sexeto no es entero rellenamos por obiedad esto siempre pasa en el ultimo sexeto */
  50. $sexeto = substr($binstring,$i,6);
  51. while (strlen($sexeto) < 6) {
  52. $sexeto .= "0";
  53. }
  54. $sexetos[] = $sexeto;
  55. }
  56. $i+=6;
  57. }
  58. /*=================fin paso 2====================*/
  59. /*===============================================
  60. * paso 3: una vez obtenidos los sexetos los
  61. * convertimos a su respectivo desimal, obteniendo
  62. * asi nuemenos que van de [0-63] para compararlos
  63. * uno a uno contra la tabla de caracteres base64
  64. =================================================*/
  65. foreach ($sexetos as $pr) {
  66. $b64string .= $b64chr[btod($pr)];
  67. }
  68. /*=================fin paso 3====================*/
  69. /*===============================================
  70. * paso 4: la divicion de la longitud de la cadena
  71. * entre cuaatro deve dar como resultado un modulo
  72. * igual a 0 (cero) de lo contrario se añadira un
  73. * caracter de relleno (=) al final de la cadena
  74. * hasta lograr un modulo igual a 0.
  75. =================================================*/
  76. while((strlen($b64string)%4) != 0) {
  77. $b64string .= "=";
  78. }
  79. /*=================fin paso 4====================*/
  80. return $b64string;
  81. }
  82. /*===============================================*/
  83. ###################################################
  84. # funciones auxiliares
  85. ###################################################
  86. /*===============================================
  87. * atob (alphabetic to binary):
  88. * dado un caracter alfanumerico generamos su
  89. * correspondiente octeto en binario
  90. =================================================*/
  91. function atob ($chr) {
  92. $num = ord($chr);
  93. $i = 0;
  94. // el metodo para la convercion de desimal a binario dicta si hay resto entonces da un alto "1" si no hay resto un bajo "0"
  95. while ($num > 0){
  96. if ($num%2==1) {
  97. $bin[$i++] = $num % 2;
  98. $num = ($num -- 1) / 2;
  99. } else {
  100. $bin[$i++] = $num % 2;
  101. $num = $num / 2;
  102. }
  103. }
  104. // completamos los 8 bits
  105. if ($i < 8) {
  106. do {
  107. $bin[$i++] = 0;
  108. } while ($i < 8);
  109. }
  110. // todos los que saben convertir a binario sabemos que despues de realizar
  111. // nuestras operaciones para determinar los 0 y 1 del nuemero en cuestion
  112. // devemos leer de manera inversa los resultados (de deracha a izquierda,
  113. // de abajo hacia arriba, etc). asi que invertimos nuestro arreglo $bin
  114. // y lo concatenamos en una cadena de ocho caracteres que retornaremos.
  115. while ($i >= 0){
  116. $cadena .= $bin[$i--];
  117. }
  118. return $cadena;
  119. }
  120. /*===============================================*/
  121. /*===============================================
  122. * btod (binary to decimal):
  123. * el octeto en bonario lo convertimos a desimal
  124. * bajo el metodo de posicion, es desir, nuestro bit
  125. * binario multiplicado por la base 2 elevada a la
  126. * potencia de su pocicion y sumadas entre si.
  127. * ejemplo: 1011
  128. * (1*2^3)+(0*2^2)+(1*2^1)+(1*2^0) = 8 + 0 + 2 + 1 = 11
  129. =================================================*/
  130. function btod ($sbin) {
  131. $i = strlen($sbin)-1;
  132. $des = 0;
  133. $j = 0;
  134. while ($i >= 0) {
  135. $des += $sbin[$i--]*(pow(2,$j++));
  136. }
  137. return $des;
  138. }
  139. /*===============================================*/
  140. ?>

, , , ,

Dec/09

2

#n3ur0n4′5 r57 shell

sin tener nada que hacer comencé a modificar el estilo de la php r57 shell para adaptarlo al puro estilo de n3ur0n4 c0rp les dejo un screen de la apariencia final, la he provado y es funcional a menos que el estilo de tanto cambiar por aquí y por allá se haya alterado el código esencial, si pasa lo segundo favor de hacérmelo saber :D

  1. r57 n3ur0n4 shell.rar <– r57 shell modificada estilo n3ur0n4
  2. shell r57.rar <– Shell Original
r57-shell

, , , , , , , ,

Tratando de resolver el reto de yashira llamado Nº195 – Zero Zero Killed! y buscando un interprete de lenguaje Ook! funcional, me tope con la triste realidad de no encontrar nada, quizás busque mal, después de un rato me baje un interprete de brainfuck otro lenguaje esotérico.

después de codear un instante, me logre este traductor funcional de Ook! a brainfuck, cuya traducción es interpretada a la perfección el compilador brianfuck_machine que esta en la sección de XFiles en esta pagina. sin mas les dejo el código del php que he creado. esperando les sea útil el aporte…

Saludos n3ur0n1705…
Lestat de Lioncourt

PD: Aca les dejo el code ya en funcionamiento: http://n3ur0n4.byethost9.com/ook_to_bf.php

Traductor Ook! a Brainfuck:

<div align="center">

<?

if ($_POST[f]!=NULL){
	$ook=$_POST[f];
	for ($x=0;$x<strlen($ook);$x++){
		$as=ord(substr($ook,$x,1));
		if ($as!=13) {
			$_ook=$_ook.chr($as);
		}
	}	

	echo "Conversor Ook! to Brainfuck By Lestat de Lioncourt<br>#n3ur0n4.org<br><br>Ook! Codex:<form action=\"\" method=\"POST\">
		<textarea name=\"f\" style=\"width:495px; height:250px; scroll:auto;\">".$_ook."</textarea>
		<br><input type=\"submit\" value=\"send\">
	      </form><br><br>";

	echo "Brainfuck codex:<form action=\"\">
		<textarea name=\"x\" style=\"width:495px; height:250px; scroll:auto;\">";

	$x=0;
	while ($x<strlen($_ook)){
		if (substr($_ook,$x,9)=="Ook. Ook?"){
			echo ">";
		} else if (substr($_ook,$x,9)=="Ook? Ook."){
			echo "<";
		} else if (substr($_ook,$x,9)=="Ook. Ook."){
			echo "+";
		} else if (substr($_ook,$x,9)=="Ook! Ook!"){
			echo "-";
		} else if (substr($_ook,$x,9)=="Ook! Ook."){
			echo ".";
		} else if (substr($_ook,$x,9)=="Ook. Ook!"){
			echo ",";
		} else if (substr($_ook,$x,9)=="Ook! Ook?"){
			echo "[";
		} else if (substr($_ook,$x,9)=="Ook? Ook!"){
			echo "]";
		}
		$x+=10;
	}
	echo "</textarea>
	      </form>";
} else {
	echo "Conversor Ook! to Brainfuck By Lestat de Lioncourt<br>#n3ur0n4.org<br><br>Ook! Codex:<form action=\"\" method=\"POST\">
		<textarea name=\"f\" style=\"width:495px; height:250px; scroll:auto;\"></textarea>
		<br><input type=\"submit\" value=\"send\">
	</form>";
}
?>

</div>

, , , , , ,

n3ur0n4

#n3ur0n4 Corporation
Live Free & Die Free