CAT | scripts
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().
“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.
- <?
- /*===============================================
- * function str_b64 ($text):
- * by: Lestat de Lioncourt
- * to: http://n3ur0n4.org
- * reply to: lestat[at]n3ur0n4[dot]org
- * algoritmo para la generacion de una cadena en
- * base64 a partir de un texto dado por la llamada
- * a dicha funcion.
- * algoritmo de la funcion base64_encode()
- ===============================================*/
- $cadena = "str_b64 by Lestat de Lioncourt to n3ur0n4.org.";
- echo str_b64($cadena);
- function str_b64 ($text) {
- /*===============================================
- * declaramos el array de caracteres de base 64
- * consta de 64 caracteres 0 -- 63.
- =================================================*/
- 'Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f',
- 'g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v',
- 'w','x','y','z','0','1','2','3','4','5','6','7','8','9','+','/');
- /*===============================================*/
- /*===============================================
- * paso 1: convertimos a binario cada caracter de la
- * cadena y lo guardamos en una cadena auxiliar
- * llamada $binstring (cadena en binario).
- =================================================*/
- $binstring .= atob ($text[$x]);
- }
- /*=================fin paso 1====================*/
- /*===============================================
- * paso 2: una vez obtenido el binario del texto
- * a convertir, generamos sexetos del binario
- * no siempre tendremos sexetos enteros al final
- * es desir "000000" en caso de lo contrario se
- * rellenara con "0" el ultimo sexeto hasta completarlo
- * los sexetos obtenidos los guardamos en un arreglo
- * para su mejor manipulacion en el sig. paso.
- =================================================*/
- $i = 0;
- # obtenemos nuesto sexeto y lo guardamos en el arreglo $sexetos[]
- } else {
- /* si el sexeto no es entero rellenamos por obiedad esto siempre pasa en el ultimo sexeto */
- $sexeto .= "0";
- }
- $sexetos[] = $sexeto;
- }
- $i+=6;
- }
- /*=================fin paso 2====================*/
- /*===============================================
- * paso 3: una vez obtenidos los sexetos los
- * convertimos a su respectivo desimal, obteniendo
- * asi nuemenos que van de [0-63] para compararlos
- * uno a uno contra la tabla de caracteres base64
- =================================================*/
- foreach ($sexetos as $pr) {
- $b64string .= $b64chr[btod($pr)];
- }
- /*=================fin paso 3====================*/
- /*===============================================
- * paso 4: la divicion de la longitud de la cadena
- * entre cuaatro deve dar como resultado un modulo
- * igual a 0 (cero) de lo contrario se añadira un
- * caracter de relleno (=) al final de la cadena
- * hasta lograr un modulo igual a 0.
- =================================================*/
- $b64string .= "=";
- }
- /*=================fin paso 4====================*/
- return $b64string;
- }
- /*===============================================*/
- ###################################################
- # funciones auxiliares
- ###################################################
- /*===============================================
- * atob (alphabetic to binary):
- * dado un caracter alfanumerico generamos su
- * correspondiente octeto en binario
- =================================================*/
- function atob ($chr) {
- $i = 0;
- // 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"
- while ($num > 0){
- if ($num%2==1) {
- $bin[$i++] = $num % 2;
- $num = ($num -- 1) / 2;
- } else {
- $bin[$i++] = $num % 2;
- $num = $num / 2;
- }
- }
- // completamos los 8 bits
- if ($i < 8) {
- do {
- $bin[$i++] = 0;
- } while ($i < 8);
- }
- // todos los que saben convertir a binario sabemos que despues de realizar
- // nuestras operaciones para determinar los 0 y 1 del nuemero en cuestion
- // devemos leer de manera inversa los resultados (de deracha a izquierda,
- // de abajo hacia arriba, etc). asi que invertimos nuestro arreglo $bin
- // y lo concatenamos en una cadena de ocho caracteres que retornaremos.
- while ($i >= 0){
- $cadena .= $bin[$i--];
- }
- return $cadena;
- }
- /*===============================================*/
- /*===============================================
- * btod (binary to decimal):
- * el octeto en bonario lo convertimos a desimal
- * bajo el metodo de posicion, es desir, nuestro bit
- * binario multiplicado por la base 2 elevada a la
- * potencia de su pocicion y sumadas entre si.
- * ejemplo: 1011
- * (1*2^3)+(0*2^2)+(1*2^1)+(1*2^0) = 8 + 0 + 2 + 1 = 11
- =================================================*/
- function btod ($sbin) {
- $des = 0;
- $j = 0;
- while ($i >= 0) {
- }
- return $des;
- }
- /*===============================================*/
- ?>
23
Traductor Ook! a Brainfuck by z3r0.und3r
0 Comments | Posted by @135747 in Codex, PHP, scripts
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>
|
10
Sh: Actualizar mi estado en Twitter desde consola Linux
0 Comments | Posted by @135747 in Codex, scripts
Todo se ve mejor en la consola de comandos, así que aquí les dejo un simple sh script para poder twittear desde la consola, solo necesitamos cURL instalado, sin mas preámbulos les dejo el código de una sola linea para lograr nuestro objetivo.
El uso del script para Linux es:
lestat@matrix:~$> sh tweet.sh “Actualizando estado en twitter desde consola”
tendrán que poner su nuevo estado entrecomillado ya que de lo contrario solo twittearan la primer palabra (variable $1 véase algún tutoríal de programación shell).
21
Habilitar/Deshabilitar el Firewall de Windows
2 Comments | Posted by @135747 in Codex, scripts
==================================
By: z3r0.und3r
To: #n3ur0n4
Url: http://n3ur0n4.org
Reply to: z3r0.und3r@n3ur0n4.org
==================================
==================================
Habilitar/Deshabilitar el Firewall de Windows
==================================
Este pequeño batch script no tiene nada de ciencia solo pretende dar a conocer la forma en que se puede deshabilitar el firewall de Windows desde la consola. El comando usado no ha sido probado en otro sistema operativo mas que en Windows XP, pero no hace falta decir que el probar en otros no esta permitido XD.
CODE Fire.bat
==============================
@echo off
rem Firewall switch by z3r0.und3r
rem http://n3ur0n4.org
if %1 == on netsh firewall set opmode mode = enable
if %1 == off netsh firewall set opmode mode = disable
==============================
Bien como pueden ver usamos el comando NETSH lo demás es solo intuición.
El uso del comando es “Fire on/off” claro sin comillas ;) donde Fire es el nombre con el que hayan guardado el .bat, en mi caso lo llame Fire.bat



