Desarrollo de una aplicación en 2021

Sr_RoS

Buenas. tengo una duda para un proyecto.

En tiempos en los que el desarrollo web y móvil lo está copando todo.

Si os encargan una aplicaciones que se va a ejecutar en una maquina sin internet y la cual teneis que proteger el código. por qué tecnología os decantaríais

requisitos.
ejecutable compilado
conexión con una base de datos relacional da igual embedida o por conexión
preferiblemente para windows
sin internet aunque si con acceso a carpetas de red.

Existe algún framework de desarrollo rápido como laravel?

un saludo

B

.

Fyn4r

Por poder puedes montar una web igual y conectarte a localhost, pero vamos, si quieres app de escritorio tira por Java FX o algo de esto.

Yo la verdad solo hice un par con python y TK y espero que no sea siempre igual de coñazo xdd

1 respuesta
Sr_RoS

la idea sobretodo es compilar el código.

he pensado incluso crear una máquina virtual con un proyecto laravel. pero facilmente se podría acceder al código fuente accediendo a la unidad virtual

Sr_RoS

#3 tkinker tiene muy buena pinta. pero parece que se puede descompilar.
https://www.youtube.com/watch?v=jmC-FKNRdvk

Nucklear

Go o Rust no son opciones?

Cualquier lenguaje interpretado se va a poder decompilar de una u otra forma y vas a tener que tirar de ofuscación y guarradas para semiprotegerlo.

Nadie te quita que te venga un buen reverser y te saque el código pero desde mi experiencia Go es bastante complicado de reversear

1 respuesta
pineda

#6 go compilado sin ninguna ofuscación o virtualización extra es muy simple de hacer reversing

package main

import "fmt"

func main() {
	reverseFunction()
}

func reverseFunction() {
	fmt.Println("hello world")
}

#1 necesitas un lenguaje compilado, y buscar un ofuscador + virtualizador decente, como VMProtect o themida

2 respuestas
Soltrac

Devirtualizar no sabe hacerlo cualquiera, es la única solución para medio proteger un código de verdad. Pero creo que #1 se refiere a simplemente código compilado, nada de reversing.

bLaKnI

Pero y .NET?

1 respuesta
Traber

#9 decompilar .NET es casi tan fácil como decompilar Java, mírate dnSpy, JustDecompile o dotPeek y verás qué facil es sacar las vergüenzas de cosas compiladas con .NET xD

Nucklear

#7 Eso que estás viendo ahí es un programa sin strippear, si lo compilas strippeado y estaticamente linkeado el trabajo se complica x1000. Y no sólo eso, el ASM que sacas de Go no es el habitual que verías en un programa en C y el reverser tendría que ser muy especializado como para hacer algo con él.

PlayingDead

#7 Hola, por curiosidad, ¿cómo aprendéis estas cosas?

Tengo un amigo de toda la vida que se mete al raw de la ram y está como en casa, con temas de kernel de Windows igual.

Yo no sabría ni por dónde empezar, me interesa pero lo veo bastante complejo

Al OP: a mí se me ocurre C++. Creo que no hay huevos a descompilar un binario así

2 respuestas
pineda

#12 mucha lectura, mucha práctica y muchas búsquedas de windows internals

1
Soltrac

#12 Claro que hay huevos xDDD. Requiere paciencia, pero claro que se puede. Obviamente no vas a sacar el código original, pero bueno, buscar lo q te interesa se puede, si no, como crees que se crackean los programas o se hacen cheats?

1 respuesta
PlayingDead

#14 Pues claro que es posible pero no va a ser igual que descompilando algo en .NET o Java que lo hace hasta un mono... Si compilas en C++ ya requiere que el atacante sepa manejarse bien conociendo partes del sistema, sabiendo qué llamadas se hacen y demás...

Partimos de la base de que es clientside o sea que no hay una seguridad absoluta

1 respuesta
Ranthas

#15 A ver, el principal problema del decompiling en C++ es que a diferencia de C# o Java, en C++ la compilación es directa a lenguaje máquina, por lo que apenas hay código intermedio que refleje información (uso de reflexión).

En Java, el bytecode generado contiene un huevo de metainformación sobre el código fuente, por lo que el proceso de decompilado es muy sencillo.

Poder, se puede, claro que sí, pero en la práctica, es un dolor de muelas que no le deseo a nadie. Además, sumále mecanismos como el inlining, ejecuciones en tiempo de compilación...

B

¿Pero que tienes que desarrollar? ¿El núcleo de la bolsa?
Hace tiempo se predicaba que la seguridad no debe estar apoyada en la ofuscación... eso solo da una falsa sensación de seguridad y una entrada a problemas para hacer un mínimo debug.

Yo trataría de encauzarlo con el cliente o el que haya definido el proyecto... si no, lo que puedes hacer es que manejen el programa por una especie de VNC que solo sirva imagen y restringes que se pueda salir de la ejecución del mismo.

Me imagino que el tema de compilarlo viene por darle seguridad o pretender ocultar su funcionamiento... pero un servidor web local te da lo que quieres... no tiene porque salir a internet y el "backend" queda oculto al cliente.

2 respuestas
eondev

#17 no querrán ver ahí el php o el .py guarro y se habrán emparanoyado. Les presentas un jar o un exe y seguro que se quedan contentos xD

9 días después
B

Puedes probar Blazor, es un engendro de .net que se compila a webasembly

No es exactamente así pero es algo como:
programas back en .net y front tambien en .net
el front se acaba compilando a web asemmbly
tienes una web html que carga un javascript de 4Megas (que es lo que va a cargar lo necesario para ejecutar el programa en si) y un javascript de 500kb q es tu aplicación en webasembly

lo podrias meter en electron o tal para ser desktop pero no creo que te haga falta

11 días después
Sr_RoS

#17 el problema es que por exigencias del cliente tiene que poder ejecutarse en su ordenador de forma offline. y llevarse los datos en un disco duro externo. (si me resulta odioso)
he pensando crear una maquina virtual con una partición cifrada y que solo tenga abierto el 22 y el 80 y que se anuncie en la red por mDNS.

Usuarios habituales