Revisar datos desde app android a api

Gran_Maestre

Copuchento
Se incorporó
1 Octubre 2005
Mensajes
1.235
Buenas, tengo una situacion (aun no es problema) en la cual necesito de una orientacion, tengo un sistema de inventario el cual tiene una app android, esta app utiliza una api para conectarse a la base de datos y mostrar la informacion, esa api es privada y el proveedor nos estaba cobrando un ojo de la cara simplemente por usarla, asi que decidimos darlo de baja (por temas $$) e implementar una api que haga lo mismo, basandome en las respuestas que arrojaba la api (antes de bajarla) pude hacer una que responda los json bien asi que la app funciona para consultar la info y que la app la muestre sin probemas, pero tiene una funcionalidad que permite sacar una foto y subirla al servidor, el detalles es que nose como envia la informacion del json la app para recibirla correctamente en la api asi que no he podido lograr que la informacion llegue y se grabe (lo unico que se es el nombre con el cual quedaria el archivo jpg y que viene codificada en base64) ... existe o alguien conoce alguna tecnica que me permita ver el paquete, informacion, conexion que envia la app a la api?, solamente tengo los registros de apache, adicionalmente hice una funcion que recibe desde un json el nombre de la imagen y el codigo base64 y este lo decodifica quedando el archivo en el servidor, esto probado con postman funciona bien pero algo me dice que la app pasa otras variables u otros nombres de estas y por eso me responde con codigo 400

"POST /api/upload HTTP/1.1" 400 (no pasa los datos en la url)

codigo api

Código:
public function uploadImage(Request $request)
{
    $codigo = $request->input('codigo');
    $imageBase64 = $request->input('image');

    if (empty($codigo) || empty($imageBase64)) {
        return response()->json([
            'status' => 400,
            'success' => false,
            'message' => 'Faltan parámetros obligatorios: codigo o image'
        ], 400);
    }

    // Decodificar la imagen
    $imageData = base64_decode($imageBase64);

    $filePath = public_path('IMAGENES/' . $codigo . '.jpg');

    // Guardar la imagen
    $saved = file_put_contents($filePath, $imageData);

    if ($saved === false) {
        return response()->json([
            'status' => 500,
            'success' => false,
            'message' => 'No se pudo guardar la imagen'
        ], 500);
    }

json postman

JSON:
"codInterno": "COMPUTADOR0137",
    "image": "CODIGO64IMAGEN"

El sistema lo tengo aun en desarrollo por lo que puedo hacerle ajustes pero dependo de la app y que esta funcione bien (a futuro podria hacer una app movil nueva que funcione como yo quiera pero mientras tengo que hacer funcionar esta)
 

sebaestrada

Miembro Regular
Se incorporó
1 Septiembre 2021
Mensajes
48
Según lo que me dijo ChatGPT pasándole tu problema:

Necesitas ver la petición real que la app está haciendo al backend.
Opciones:


  • MitM con un proxy tipo mitmproxy, Charles Proxy o Fiddler:
    • Los instalas en tu PC.
    • Pones tu celular Android a usar el proxy (en la configuración WiFi → Proxy manual).
    • En el proxy instalas el certificado CA para desencriptar si la app usa HTTPS (si no usa certificate pinning, la vas a poder ver).
    • Con eso verás el cuerpo de la request exacto: si es JSON, multipart/form-data, nombres de campos, etc.
  • tcpdump + Wireshark (más técnico, pero sirve si no logras configurar proxy):
    • Capturas el tráfico desde tu servidor o router.
    • Filtras por la IP del celular.
    • Desencriptar HTTPS es más engorroso, por eso recomiendo mitmproxy.

Si tienes forma de ver la petición que se hace desde la app hacia el backend, ya tienes el 90% de la solución, sólo bastaría emularlo en tu nuevo backend.
 
Upvote 0

Gran_Maestre

Copuchento
Se incorporó
1 Octubre 2005
Mensajes
1.235
al final chatgpt me dio otra solucion que me funciono, recibir todo el request y tirarlo al log y ver que datos llegan y asi armar algunas partes de la api, le cambiaba el nombre de la funcion con la de la api que necesitaba
Código:
public function revisar(Request $request)
    {
        // Captura todo el JSON recibido
        Log::info('Payload recibido en editAsset', $request->all());

        // También puedes obtener el JSON crudo
        Log::debug('JSON crudo:', ['raw' => $request->getContent()]);

        // Tu lógica normal
        return response()->json(['status' => 'ok']);
    }

tambien encontre una aplicacion que permite decompilar las apk y ver en el codigo que este dentro, ya con eso pude ver las funciones y que datos y como los enviaba la app https://sourceforge.net/projects/jadx.mirror/
 
Upvote 0
Subir