Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - ivancea96

#1
No sé si hay más casos, pero sé el caso de que las palabras _encriptar y _desencriptar son reemplazadas por cifrar y descifrar, cosa que vi debido al reciente tema que salió sobre estas palabras.

Varias cosas:
1. Las palabras se reemplazan sin avisar al usuario, cosa que llega a dar lugar a error en algún caso.
2. Desde que la palabra cifrar está aceptada, ¿sigue siendo correcto reemplazarla?
3. ¿Hay más palabras que sufran un intercambio por otra?

La verdad que me parece algo desagradable que se cambie el mensaje del usuario de este modo.
#2
Ingeniería Inversa / Modificando un binario
23 Julio 2015, 17:45 PM
En un binario, al modificar el byte que antes representaba por ejemplo un NOP (0x90), por un 0xEB, el olly Debugguer pasa de ese byte, y lo marca como DB.

¿Por qué? ¿Qué es lo que le indica que ese byte no es el comienzo de un opcode?
#3
Hola. Estoy con un Arduino UNO, y pienso controlar un motor mediante un transistor. El problema viene en que necesitaré más corriente que los 5 V que consigue Arduino por el USB.
La pregunta es: ¿Puedo conectar una pila 9V por el jack a la vez que tengo el USB conectado?

De ser así, ¿puedo luego conectar el motor a los pines 5V y GND para alimentarlo?

Mi problema es que obviamente no quiero quemar el Arduino, y no se si puede haber problemas con esto.

Como dato adicional, la conexión la haré mediante el motor+diodo y un NPN con base conectada a un pin de salida del arduino, colector conectado al motor y al diodo, y emisor conectado a toma de tierra del Arduino.

#4
El problema es ese, tengo un DataGridView, que carga datos de un archivo de Access.

El problema viene al guardar los datos.

Haciendo:
Código (csharp) [Seleccionar]
tableAdapter.Update(dataSet.tabla);

Me tira esa excepción (Si hay cambios en la tabla)

No consigo resolverlo, sólo me lo da con un campo (pero tal vez sea porque es el primer campo a actualizar, no sé)

El campo es double, sin más.

Si alguien tiene alguna idea de qué hacer, o qué comprobar, estoy atento :D

PD: Olvidé decir que el texto de la excepción es: "No se puede actualizar 'nombre_columna'; el campo no es actualizable."
#5
Tengo una duda:

En el apartado II.A.2.b de las reglas del foro, pone:
Citar(...) esta prohibido dar enlaces a sitios web de "referidos" (...)

¿Entran en el caso los links que, al registrarse, te agregan como su referido (común en juegos)?
¿De ser así, se puede agregar a la firma?

No es que lo vaya a hacer yo, al revés, siempre me pareció de muy mal gusto este tipo de enlaces, y mucho peor si se colocan en este foro.

Gracias.

PD: "está prohibido" :3
#6
.NET (C#, VB.NET, ASP) / Unas dudas sobre .NET
11 Noviembre 2014, 21:09 PM
Hola a todos, tengo unas preguntas sobre .NET (VisualStudio 2012, C#, formulario)


  • 1) Si un ordenador no tiene instalado .NET Framework, ¿Qué ocurrirá? ¿Se llegará a abrir el formulario?
  • 2) ¿Es posible que entre una versión del framework y otra, cambien las DLL? ¿Algún método de asegurarse de que un ordenador tiene instalada la versión adecuada?
  • 3) ¿Existe alguna manera de empaquetar librerías DLL externas en un ejecutable?

Gracias por las respuestas (si las hay e.e) :3
#7
Electrónica / [Aporte] "Intérprete" de Arduino
7 Noviembre 2014, 23:33 PM
Hola :D

Tras trastear con Arduino un tiempo, decidí hacer un sistema para controlar el Arduino desde el PC.
Esto no es una tarea complicada, pero puede llevar tiempo, y aquí os paso el código vía GitHub para quien quiera darle uso:

https://github.com/ivancea/Arduino-Interpreter

Dado el uso de la librería <windows.h>, este proyecto es sólo compilable en Windows. Si alguien quiere mudarlo a otro SO (o hacerlo portable), y quiere compartir el código, estaré encantado de agregarlo ^^

Además de crear un 'protocolo' mediante el cual el Arduino se puede conectar fácilmente con otras aplicaciones, con este sistema, se puede usar el Arduino como un simple periférico de entrada/salida electrónica. Yo nunca he visto tal, y aquí una sencilla forma de hacerlo. Suele ser difícil, que yo sepa, utilizar un PC con fines electrónicos. En este caso, se ha de disponer de un Arduino, pero bueno.






Datos técnicos

El intérprete cuenta 7 comandos, que son los básicos (entrada y salida con los pines), pero sois libres de ampliarlos: he intentado hacer el código lo más modificable posible.

El intérprete también cuenta con un comando "help", para ver los comandos.



Pues ala, espero que alguien le de buen uso (o malo, me da igual :P)
#8
Hola :D

¿Qué veis mejor? ¿Pasar parámetros a funciones en la pila, o en registros?

Yo veo más sencillo pasar parámetros con un registro, así asegurarse de que la pila no cambia. Pero no se que es lo más "normal".

Por ejemplo, ¿al pasar parámetros a funciones con la pila, esas funciones van a leer la pila y dejarla como está, o van a quitar los valores de la pila?

Algunas dudillas que me quedaron al programar ASM xD
#9
Holas :D

Aquí dejo un código, más que nada curioso, que va guardando números primos en un archivo.

Información:

  • Tras cerrar el programa, retoma el último primo que generó
  • Funcionalidad para medir el tiempo que tarda (véase que con números altos empieza a tardar mucho más)
  • Se usa sólo la librería estándar

Código (cpp) [Seleccionar]
#include <iostream>
#include <fstream>
#include <ctime>
#include <cmath>

using namespace std;

inline bool primo(uint64_t n){
   if(n%2==0) return false;
   uint64_t i=3;
   uint64_t sq = sqrt(n);
   for (;n%i!=0; i+=2){
       if(i>sq){
           i=n;
           break;
       }
   }
   return i==n;
}

int main () {
   while(true){
       uint64_t u=2, g=0, h=0;
       string t;
       cout << "Numero de primos a conseguir (0 para ver ultimo primo): ";
       getline(cin,t);
       g = strtoull(t.c_str(),NULL,0);
       ifstream leer("primos.txt", ios::ate);
       char n='0';
       if(leer){
           while(n!='\n'){
               leer.unget();
               n = leer.get();
               leer.unget();
           }
           leer.get();
           leer >> u;
       }
       leer.close();
       if(g==0){
           cout << "Ultimo primo conseguido: " << u << endl << endl;
           continue;
       }
       ofstream escribir("primos.txt", ios::app);
       if(u==2){
           escribir << u--;
       }
       clock_t timer = clock();
       while(h<g){
           u+=2;
           if(primo(u)){
               escribir << endl << u;
               ++h;
           }
       }
       cout << endl << "Conseguidos " << h << " primos en " << ((clock()-timer)*1000)/CLOCKS_PER_SEC << " milisegundos." << endl << endl;
   }
}


El código creo yo que es fácil de entender. Se usa fstream para manejar el archivo de primos.

Quien le quiera mejorar el algoritmo para detectar los primos, está en su derecho, por supuesto.
Quien quiera guardar los primos en binario (8 bytes para uint64_t), puede hacer fácilmente la modificación.
Y hasta quien quiera, que le ponga una barra de carga jaja

Bueno, espero que a alguien le ayude.

Byes :3
#10
Holass.

Como muchos por aquí habréis visto, y algunos moderadores habrán sufrido, en algunos hilos, varios programadores compiten por poner el mejor código, casi siempre fuera de la pregunta o petición del que lo abrió. Para evitar este tipo de problemas, propongo:

Hacer un hilo para concursos entre nosotros, e intentar ganar, por ejemplo, en tiempos de ejecución. La idea podría ser poner una clase o función, Ej."uint64_t fibonacci(uint8_t n);", y tener que crear esa función o clase. Bueno, que os voy a contar, es obvio xD

¿Qué decíis, alguiens e apunta?

El caso es que habría que trabajar todos en el mismo lenguaje, C o C++, porque lso tiempos de ejecución sin duda cambiarán, y bueno, no hay clases en C.

Yo propongo C++, es más, C++11, ya que da más opciones para trabajar multithread y cosillas así.

Venga venga, comentad qué os parece xD
#11
Hola a todos. Hace mucho que no hago alguna aportación por aquí, y por cutre que sea, voy a poner un selector de opciones, en el que no hay que elegir el número de la opción, sinó hay que mover el marcador con W y S. Bueno, aquí va:

Código (cpp) [Seleccionar]
#include <iostream>
#include <vector>
#include <conio.h>
using namespace std;

class options{
    vector<string> _options;
    string _title;

    void coutTitle()const{
        if(_title.size()==0) return;
        vector<string> v;
        string t = _title;
        while(t.size()>80){
            v.push_back(t.substr(0,80));
            t.erase(0,80);
        }
        v.push_back(t);
        while(v.size()>1){
            cout << v[0];
            v.erase(v.begin());
        }
        cout << string((80-v[0].size())/2,' ') << v[0] << endl << endl;
    }

public:
    options(){}
    options(string title):_title(title){}
    options(const options& o):_options(o.getOptions()),_title(o.getTitle()){}
    void setTitle(string title){
        _title = title;
    }
    string getTitle()const{
        return _title;
    }
    vector<string> getOptions()const{
        return _options;
    }
    string getOption(size_t i)const{
        if(i<_options.size()) return _options[i];
        return "";
    }
    void addOption(string option){
        _options.push_back(option);
    }
    void addOptions(const vector<string>& v){
        for(int i=0; i<v.size(); i++)
            _options.push_back(v[i]);
    }
    void setOptions(const vector<string>& v){
        _options = v;
    }
    int show()const{
        int index = 0;
        char c = 0;
        while(c!='\r' && c!='\n'){
            system("cls");
            coutTitle();
            for(int i=0; i<_options.size(); i++){
                cout << '[' << (i==index?'X':' ') << "] " << _options[i] << endl;
            }
            c = getch();
            if((c=='w' || c=='W') && index>0)
                --index;
            if((c=='s' || c=='S') && index<_options.size()-1)
                ++index;
        }
        return index;
    }
};

int main(){
    options op;
    op.setTitle("Que querrias ser en otra vida?");
    op.addOption("Un Dios.");
    op.addOption("Un gobernador.");
    op.addOption("Un pensador.");
    op.addOption("Un trabajador.");
    op.addOption("Un esclavo.");
    cout << endl << endl << op.show();
}


Se le pone un titulo, se le agregan las opciones, y se invoca .show(). Show retorna el índice de la opcion elegida.


Utilizo la función system("cls") y getch(). Quién las quiera cambiar por otras, es libre de hacerlo, este código no tiene copyright xD

Usé getch() de conio.h porque es la más rápida y sencilla.

Jeje esto lo hice hace unos 4 años, pero lo hice a lo cutre con 2 solas opciones (y me costó). Ahora, años después, he visto lo terriblemente sencilo que es jaja.

"Una vez más, la experiencia marca la aptitud."

Saludos, espero que a alguien le sea útil :p
#12
Programación General / Concurso Tuenti
29 Abril 2014, 00:45 AM
Hoy sobre las 13:00 ha comenzado el concurso de programación de Tuenti.
http://contest.tuenti.net
Avisi, para quién no lo haya visto y quiera participar ;D

Enviado desde mi ST21i mediante Tapatalk
#13
ASM / Obtener argumentos pasados al programa
29 Marzo 2014, 14:13 PM
Hola, tengo la duda de cómo conseguir los argumentos pasados al programa.
La cantidad de argumentos, seguido de la ruta del programa y de las demás cadenas.
Tenía entendido que se almacenaban en el stack, pero ahí no los ví, así que pregunto por aquí :3

PD: Uso FASM
#14
Hola, tenía la duda de si se puede en C++, (sin la biblioteca Windows.h), hacer capturas de pantalla, y guardarlas de la forma que sea.

¿Alguien sabe algo?

Como dato, estoy trabajando con SFML, pero creo que este no tiene nada para ello.

Si alguien sabe que diga, gracias :D
#15
Hola, tengo un problemilla.

Código (cpp) [Seleccionar]
fstream a("asd.dat");
a << "hola";


En general, es eso. El problema es que si el archivos está vacío, no escribe nada.

¿Sabéis algo al respecto?
#16
Holas, hoy me dió por colgar una clase, que simula la pila de ASM. Se suele hacer mucho, pero la voy a postear:

Código (cpp) [Seleccionar]
class pila{
private:
   int data;
   int length;
   pila *next;
   void nullNext(){next = nullptr;}

public:
   pila(){data = -1; length = 0; next = nullptr;}
   pila(pila *p){data = p->data; length = p->length; next = p->next;}
   ~pila(){while(next != nullptr) pop();}
   int getData(){return data;}
   int getLength(){return length;}
   pila *getNext(){return next;}
   bool pop(){
       if(next != nullptr){
           data = next->data;
           --length;
           pila *temp = next;
           next = next->next;
           temp->nullNext();
           delete temp;
           return true;
       }
       return false;
   }
   void push(int d = 0){
       next = new pila(this);
       ++length;
       data = d;
   }
};


Si a alguien le gusta, que la use. Si alguien le ve algún bug/error/inconveniente, que lo diga.

La pila, guarda 3 valores: La direccion de la siguiente de la pila (*next); el dato de ese segmento (dato); la cantidad o longitud de la pila (length).

Ciao :3
#17
Mi pregunta es más que nada por curiosidad. El operador "+" de enteros por ejemplo, ¿cómo está definido de raiz? ¿O es una función ya a bajo nivel?
Por ejemplo, el operador * podría ser un bucle for, sumando "a" veces "b".
¿Pero el "+"?
#18
Afirmación: Solo es posible divertirse con un juego que tú mismo has creado, si en ese juego hay componentes aleatorio. Por ejemplo, en uno de lucha, ataque aleatorio. O pensamiento de IA algo aleatorio.

¿Que opinais de eso?

Comentad lo que veais oportuno.
Yo me he divertido con un juego que hice, pero ese juego contiene "rand()" en su código, y varios.
#19
Según dicen los diccionarios, y en concreto este de aquí:
Cita de: Diccionario http://es.thefreedictionary.com/vida
1   Propiedad de los seres orgánicos por la cual crecen, se reproducen y responden a estímulos: los minerales no tienen vida.

Ahora supongamos que tenemos una máquina, que trabaja en una fábrica. Que ella sola hace máquinas iguales a ella. Suelda, monta, etc. Ademas, (y esto es algo absurdo), se suelda cada rato un trozo de metal a si mismo.

1)Podríamos decir que crece, ya que aumenta su tamaño gracias al metal.
2)Se reproduce, pues crea otras máquinas como ella.
3)Responde a estímulos, porque tiene sensores de movimiento, de calor, etc.

Me gustaría que alguien me desmienta esta afirmación: Esta máquina es un ser vivo.

PD: Claramente no soy tonto, sé que no es un ser vivo xD pero me parece interesante, ya que si no se desmiente, estaríamos diciendo que los diccionarios están mal redactados (?)
#20
Programación C/C++ / Duda sobre portabilidad
2 Julio 2013, 01:44 AM
Yo programo C++ en Windows 7. Programo en consola, principalmente porque no se mucho visual ni de API's xD

La duda es...
Si, programando en consola, cambio los -system("cls");- y -system("pause");- (supongo que una mala costumbre mía), y pongo comandos de la librería estandar, ¿sería portable a otros Windows, Unix, Apple, y diversos sistemas?

EDITO: Busco la forma de borrar la pantalla de consola sin usar system("cls"), clrscr(), ni escribir 100 saltos de linea.
#21
Tengo una duda. Acerca de internet y redes, nunca supe nunca mucho, digamos que es la materia que me falta xD

¿Podría colgar mi web en mi propio ordenados, hostearla ahí, y que la gente pueda entrar poniendo mi IP?
Y la pregunta más ovbio: ¿Cómo? xD

Un link o un resumen me vale, luego ya me encargo yo de buscar por ahí :p
#22
Tengo una duda. A lo mejor soy yo, que no lo se utilizar.

Deberían hacer, que el botón Buscar de el foro, permitiese buscar cadenas concretas, poniendo, por ejemplo, "hola que tal". Yo puse así, y me busca las palabras por separado, igual que si pusiera hola que tal, sin las comillas.
¿Es que yo no se hacerlo bien, o es que no está implementada esa funcionalidad?

Gracias de todos modos :D
#23
¿Cual de estos dos conjuntos de comandos usais más en C++?

-Cout, Cin y derivados.

-Printf, Scanf y derivados.

¿Cual preferís para entrada y salida de consola o de archivos?
¿Cual creéis que es más útil, más portable, más "necesario",...?

Esto es para dar vuestra opinión, o si creéis rotundamente que uno es mejor, decid porqué :D
#24
Hola
Quería preguntar, si alguien sabe el funcionamiento interno de la codificación SHA-1. ¿Cómo se codifica una cadena a SHA-1?
Antes de nada, decir que no pido un comando que codifique SHA-1.
Pido, si alguien sabe, cómo se codifica una cadena a SHA-1. El algoritmo.
Si alguien sabe, se lo agradeceré mucho :D (Una web o enlace también me serviría, he buscado y no he encontrado nada)

Gracias :D
#25
Hola, tengo una duda:
He leído acerca de rootear un Android, ser Superadministrador, y etc. Hay programas que te lo hacen, pero mi pregunta es:

Si el Superadministrador ya existe, significa que de alguna forma "legal" se puede usar ¿no? ¿Qué forma, o quienes lo pueden rootear?

¿Alguien sabe si hay un proceso "manual" para rootear?(Sin programas de terceros: cambiando archivos directamente, o algo así)

Gracias. Toda información que me pudieséis dar, sería útil. Si no, si me podéis dar la dirección de una página que cuente algo acerca de esto, igual bien :D
#26
ASM / Pregunta acerca de MessageBox
25 Mayo 2013, 22:01 PM
Hola, soy relativamente nuevo en ASM, y tengo una duda sobre el MessageBox.


.data
 titulo db "Hola"
 cuerpo db "¿Cómo te llamas?"

.code
 push 0
 push titulo
 push cuerpo
 push 0
 call [MessageBoxA]

Bueno, eso es un Messagebox, como veis.
Mis dudas son estas:

  • "MessageBoxA": ¿Porqué es ese A? ¿Hay varias clases de MessageBox?
  • ¿Qué son los 0 que se ponen a la pila?¿Qué funcionamiento tienen dentro del MessageBox?

Gracias adelantadas a todos :D

EDITO: ¿Y qué diferencia hay con el invoke MessageBox?
#27
Hola a todos.
Vengo a explicarles lo básico de Batch. Además, pongo un código "autodidacta", que se explica por si solo.

Importante: Recomiendo leer el post entero antes de empezar a actuar.

¿Qué es el "BATCH"?
-El batch (archivo de procesamiento por lotes), es un archivo de texto plano, (es decir, sin tamaños de letra, colores, fuentes). Un archivo batch es un archivo con texto. Ese texto son Comandos de "cmd", de "consola de Windows", de "Símbolo del sistema", que, al iniciar el batch (como si fuera un ejecutable), irá "procesando", "ejecutando" esos comandos, en el orden en el que están. Más adelante veréis a que me refiero con más calma.
-Estos comandos, son los mismos que en el Símbolo del sistema. Éste se puede abrir, llendo a Inicio -> Ejecutar, y ahí escribir: cmd. (Solo en Windows)

¿Cómo hago programas en batch?
-Para ello, necesitaremos un editor de texto sencillo, como es el "Wordpad", o el más sencillo a mi parecer, el "Bloc de notas".
-Vamos a cualquier lugar (Escritorio, carpetas...) y creamos un archivo "*.txt" ("*" se pone cuando ahí cabe cualquier palabra, carácter, etc).
-En él, escribiremos el código, más adelante, y le cambiaremos la extensión a "*.bat".
Si no veis las extensiones, al final del post, diré como ponerlas.
-Una vez que se llama "*.bat" (Ej. Hola.bat), habremos hecho que se convierta en el "ejecutable" (no es realmente un ejecutable) que buscamos.

¿Bueno, supongo que queréis empezar no? Pues a ello, que la práctica es más instructiva

Empezemos con el típico "Hola mundo". Lo más fácil que podeis encontrar.
Escribid en el archivo.txt: (También, si se llama "*.bat", le podeis dar a "editar", en vez de a "abrir", y lo abrireis como si fuera un "*.txt")

echo Hola mundo
pause


Lo más sencillo que podeis encontraros. Probadlo. Extensión .bat, y le dais a abrir. ¿Está? Pues ya sabeis que hace la primitiva "echo", y la "pause".
Lo metemos un par de cosas, que creo que fácilmente entenderéis, tras probarlo:

@echo off
echo Hola mundo
pause > nul


El "@echo off" hace que no se muestre toda la línea de dirección, ni los comandos.
Ahora os pongo algo parecido, pero que solo funciona en algunos Windows. ¿Porqué? La línea de comandos, al ir quedando en desusos, se le fueron quitando algunas primitivas y funciones.

@echo off
msg * Hola a todos


Si no os funciona, revisadlo siempre. Pero en este caso, es muy probable que no funciona. En mi Windows 7, por ejemplo, no tenía esta primitiva. (Se pueden descargar e nstalar, pero no viene al caso)

Ahora os pongo 2 comandos nuevos. Nota: Podéis probar los comandos en el "cmd", así no teneis que cambiar constantemente el .txt. De hecho, si ponéis el comando + "/?" (Quedaría Echo /?), os mostrará la ayuda de el comando, y sus parámetros.

@echo off
goto segundo
echo Hola
pause
exit
:segundo
echo Adios ;)
pause
exit



@echo off
echo Hola
pause>nul
cls
echo Hola otra vez :O!
pause>nul


"Cls" borra la pantalla, y "goto nombre" va a una "etiqueta" (:nombre)

Bueno, ahora os pongo el código, que explica un par de cosas más. Os recomiendo poner "help" en el cmd para ver muchos más comandos.


@echo off
:: esto sirve para que no se muestren las lineas de comando en la ventana del ms-dos.
:: los :: sirven para anotar algo que no quieres que se muestre, como por ejemplo, estas explicaciones que estoy dejando. Se puede poner :: o rem.
echo Hola!!
:: echo ??? sirve para poner un mensaje que se mostrara en la ventana.
echo.
:: echo. sirve para dejar una linea en blanco.
pause
:: al poner pause, el usuario deberá pulsar una tecla para continuar con los comandos, y aparecerá el mensaje que pongas delante (pause el-mensaje) o, por defecto, pulse una tecla para continuar. También se puede poner pause &gt;nul, para que no muestre ningún mensaje (el problema es que el usuario no va a saber que hacer, a no ser que lo especifiques antes, con echo;, por ejemplo.
:1
:: al poner :-algo- (-algo- en este caso es 1) creas una zona, de tal modo que si en algún momento del código, antes o despues de esa zona, pones goto -algo;, el comando volverá a esa zona, repitiendo, o saltando parte del código.
cls
:: el comando cls deja en blanco todo lo que había en la ventana, mensajes, etz.
echo elige que deseas hacer: (pon el número)
echo 1) Apagar, reiniciar.
echo 2) Salir.
echo.
echo.
echo.
set /p numero=Numero que hallas elejido:
:: el comando set; con el parámetro ;/p; crea una variable, donde "numero"; es el nombre de la variable (lo que va después de /p). Lo que hay despues del = es un mensaje, delante del cual el usuario escribirá lo que desée que sea la variable.
if %numero%==1 goto 2
if %numero%==2 goto salir
:: los comandos if %variable%== sirven para decir: si la variable %variable% (siempre entre %x%) es igual a X, iniciar X comando, goto, en este caso.
cls
echo Por favor, poner 1 o 2, según lo que desé.
pause pulse una tecla para volver al menu inicial.
goto 1
:: aquí el comando goto que nos enviará a la &quot;zona&quot; llamada 1.
:salir
exit
:: el comando exit cierra la ventana.
:2
:: otra zona más.
cls
echo apagar (a) o reiniciar (r)?
set /p ar=Letra:
if %ar%==a goto apagar
if %ar%==r goto reiniciar
cls
echo por favor, elija &quot;a&quot; o &quot;r&quot;.
pause
goto 2
:: por supuesto, pueden ser colocados todos los goto que se quieran para ir a la misma zona.
:apagar
cls
echo quiere apagar en X tiempo (t) o directamente (d)?
set /p apagar2=Letra:
if %apagar2%==t goto apagart
if %apagar2%==d goto apagard
cls
echo Por favor, elija una de las opciones.
pause
goto apagar
:apagart
cls
echo bien, especifique el tiempo en segundos en que quiera apagar (máx. 600 min. 1) y prepárese.
set /p tiempoapagar=Tiempo:
shutdown -s -t %tiempoapagar%
:: shutdown sirve para apagar (-s), reiniciar (-r), hibernar, etz. tambien se puede poner variables en partes de los comandos. Si ponemos -t # podremos especificar el tiempo en segundos en que se apagará/reiniciará/etz.
exit
:apagard
echo preparese.
pause pulse una tecla para apagar.
shutdown -s -t 1
:: aunque pongo directamente, pongo -t 1 porque hay versiones de sistemas operativos que, si no pones tiempo o hora (también se puede poner la hora a la que hacer shutdown), pone 30 segundos.
exit
:reiniciar
cls
echo quiere reiniciar en X tiempo (t) o directamente (d)?
set /p reiniciar2=Letra:
if %reiniciar2%==t goto reiniciart
if %reiniciar2%==d goto reiniciard
cls
echo Por favor, elija una de las opciones.
pause
goto reiniciar
:reiniciart
cls
echo bien, especifique el tiempo en segundos en que quiera reiniciar (máx. 600 min. 1) y prepárese.
set /p tiemporeiniciar=Tiempo:
shutdown -r -t %tiemporeiniciar%
exit
:reiniciard
echo preparese.
pause pulse una tecla para reiniciar.
shutdown -r -t 1
exit



2º código:


Siempre al principio de un programa mejor:


@echo off
:iniciocontraseña
:: como este código será para poner una contraseña al principio de un código batch, el nombre de esta etiqueta deberá ser algo complejo, para evitar futuros contratiempos
echo Por favor, ponga la contraseña:
echo.
set /p contraseñaprincipio=Contraseña:
:: y el nombre de la variable más complejo aun.
if %contraseñaprincipio%==lacontraseñaquetuquieras goto inicio
cls
echo CONTRASEÑA INCORRECTA
echo vuelva a intentarlo
pausa
goto iniciocontraseña
:inicio
cls
::código cualquiera



Bueno, decir que estos 2 códigos los tengo desde hace mucho, y no los cambié demasiado, por lo que quizás use una terminología diferente en cada uno. No problema. Si lo entendéis, bien. Si no, decidme que no entendéis, o que os gustaría saber, y os contaré.

Aviso: No voy a dar códigos. Os enseñaré a hacerlos si pidiéseis, pero nada más.

Cabe decir, que el Batch NO es un lenguaje de programación. No confundir.
A mi me sirvió mucho el batch para entender las bases de laq programación. Pero mi consejo es que no os estanquéis en el Batch los que queráis progresar en la programación.

Suerte a todos los que estéis con ello :D
#28
Hola a todos, este es mi primer post, y voy a decir algo que no encontré mucho por internet.

-Hackear el World of Warcraft con Cheat Engine
Para empezar, decir que usar estos hacks puede ser detectado, asi que no lo recomiendo usar para un uso "serio" del WoW, sinó para aprender, y etc. IMPORTANTE: Esto funciona en la versión del WoW "3.3.5 (12345)".

----------------Recomiendo leer el post entero antes de empezar a trabajar----------------

Para empezar, ovbiamente, necesitamos el cheat engine. Yo uso el 6.1, pero supongo que vale practicamente cualquiera.
Recordad primero abrir el WoW, antes que el Cheat Engine, pues el WoW os mostrará un mensaje de error, "Alerta, Cheat Engine detectado". Si lo iniciamos después, ya no dará ningún problema.
Aquí no os daré hacks de oro, ni de niveles. Solo he conseguido hacks de "movimiento": volar, levitar, coordenadas, etc.
Bueno, para empezar, iniciar el personaje en el WoW, y elegir el proceso "WoW.exe" en el Cheat Engine.

ATENCIÓN: No me pararé a explicar como usar el Cheat Engine (CE de ahora en adelante). Quién no sepa usarlo, que busque un tutorial y/o que haga el tutorial que el CE incluye.

Bueno, para empezar, vamos a ver la memoria, al desensamblador, y vamos a la instrucción ""WoW.exe"+F4476".
Vemos la instrucción "mov edx,[ecx]". También estaría bien que conocierais algo de ensamblador. Aprobecho a decir, que esto es informativo, quién quiera aprender, se tomará el tiempo de ver lo básico de ASM, quien solo lo quiera para ganar ventaja en el WoW, lo siento mucho por él.
Como iva diciendo, la instrucción "mov edx,[ecx]". Nos interesa ecx, que es la dirección de memoria donde está la BASE de todos los datos que gestionan el movimiento de nuestro personaje. hacemos breackpoint, y, añadiendo la dirección manualmente, metemos el valor de ECX, como float. Veremos un número, que será la coordenada "Norte-Sur". Para verificar que sea esa, cambiamos en 1 o 2 puntos el valor. Si veis que el personaje se ha movido, es que hemos dado con la adecuada. Es posible que no se nos mueva. Eso es porque a veces ECX es la dirección que no es. No pasa nada, volvemos a hacer breakpoint, hasta que el valor cambie. Entonces volvemos a probar. Por cierto, tras hacer cada breakpoint, recordad quitarlo y volver a correr el programa. Es posible que si lo dejais mucho tiempo parado, os tire el servidor.
Bueno, ¿parece fácil no? Ahora viene lo interesante. Copiad la dirección de "Norte-Sur". <Consejo: Id dandole nombres a las direcciones, en la descripción de estas, para no liarnos, ya que vamos a encontrar muchos datos.>
Ahora vamos con la coordenada "Oeste-Este". Añadimos la dirección: "BASE + 4", donde BASE es la dirección de Norte-Sur, que deberíamos tener copiada. IMPORTANTE: Excepto alguna que yo mismo os diré, todas las direcciónes serán FLOAT.
Ahora para la altura, o coordenada Y, pondremos "BASE + 8".
¿Sencillo no? Pues ahora os pondré aquí todos los Offsets (el número que se le suma a la base): "BASE + Offset".
Es muy posible que haya más que yo desconozco. Asi que os propongo que busquéis, y os diviertais haciéndolo. ¿Quién encontrará la dirección que cambia el "No-Clip" (atravesar paredes)? Pero os recuerdo, excepto el movimiento, lo demás está del lado del server. El dinero, los objetos, todo lo demás.

  • N-S --- BASE
  • O-E --- BASE + 4
  • Altura --- BASE + 8
  • Rotación del personaje --- BASE + 10
  • Velocidad andando --- BASE + 80
  • Velocidad corriendo --- BASE + 84
  • Velocidad hacia atras --- BASE + 88
  • Velocidad de nado --- BASE + 8C
  • Velocidad de nado hacia atras --- BASE + 90
  • Velocidad de vuelo --- BASE + 94
  • Velocidad de vuelo hacia atras --- BASE + 98
  • Velocidad de giro --- BASE + 9C
  • Subir montañas --- BASE + C0
  • Movimiento y volar --- BASE + 34 --- Es importante que esta la mostreis como HEXADECIMAL, no como un número.
  • Buscar en el minimapa --- "Wow.exe"+7EBA64 --- Es importante que esta la mostreis como HEXADECIMAL, no como un número.

Ahora os explicaré las 2 últimas: "Movimiento y volar" y "Buscar en el minimapa".

-Movimiento y volar: esta es la más interesante. Lo más importante son los primeros 2 dígitos: 00000000.
El segundo, si es 1, será "andando, pero con la posibilidad de volar", si es 2, será "volando siempre", y si es 3, es como el 1, pero en el aire. Lo mejor es que lo probéis, y os quitais dudas. Cabe decir, que volar significa nadar en el aire.
El primero, es muy interesante, y lo mejor es que probeis todos los valores del 0 al F. El 8 es el normal. El 9 es andar sobre el agua. El 7 es levitar (igual que el C). Probadlos.
Hablando en general sobre esta dirección, aquí se ve cuando saltas, cuando giras, andas, nadas, etc. Todo se guarda aquí. Tened cuidado con lo que cambiais. Si 00000000 es igual a 1, será caminar. Si cambiais algo y no os podeis mover, o algo así, lo mejor es que pongais todo igual a 0 (00000000).

-Buscar en el minimapa: Esta es más compleja. No cambieis valores al azar, pues os dará error, y se os cerrará el WoW. Os recomiendo que probeis, y apunteis con un block de notas, o algo así, los valores que va tomando al cambiar el rastreo. Por ejemplo, cuando buscas "tabernero", tomará un valor. Escribidlo, o guardadlo, y así con los demás. Esto no es realmente útil, ya que lo puedes hacer sin necesidad de hack, pero todo sea información.

-------------------------

Bueno, acabo el tutorial aquí. Un par de cosas: Cuando reinicias el WoW, cambias de continente dentro de este, entras en mazmorras o algo así, la "BASE" cambia, así que habría que volver a cambiar cada valor. Por esta razón, formulo esta pregunta, o reto:
-Me gustaría, que si alguien consigue la dirección de un puntero estático (de varios niveles supongo) que apunte a la BASE, que lo dijese, ya que he estado buscando, y no vi nada.
Para acabar, decir que estos datos los he encontrado por mi cuenta, simplemente escaneando valores con el cheat engine, algo muy sencillo.
Suerte a quien intente encontrar el puntero base ^^.

Gracias a todos los que me hallan leído.

Edito: Si alguien lo ha echo y no le funciona, que diga que le pasa, o que no le funciona. Yo esto solo lo probé en mi PC. Además, si alguien que lo hizo, le funcionó todo, que diga, se lo agradecería. Todo sea aprender vosotros y yo.