Skip to content

carabedo/apis

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

69 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Guia completa de APIS

Hackeando APKS (android apps)

Hackeando apps de android podemos obtener los endopoints de algunas apis privadas. Primero necesitamos bajar el apk de la aplicacion, luego debemos modificar la applicacion para poder interceptar y decofidicar los requests que realiza.

ejemplo

instalar apktool

https://ibotpeaches.github.io/Apktool/install/

  • Descomprimimos el archivo apk (bajar el apk de la aplicacion de pureapk.com):
apktool d app.apk

Esto va a generar una carpeta con todos los archivos de la app.

  • Tenemos que modificar el archivo AndroidManifest.xml vamos a agregar : android:networkSecurityConfig="@xml/network_security_config" como un atributo en el tag application. Los tags del archivo xml son como los tags de un archivo HTML.

  • Luego creamos un archivo en la siguiente ruta: /res/xml/ que se llame network_security_config.xml y agregamos las siguientes lineas:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config>
        <trust-anchors>
            <certificates src="system" />
            <certificates src="user" />
        </trust-anchors>
    </base-config>
</network-security-config>
  • Por ultimo reconstruimos el apk:
apktool b app -o app_patched.apk

Errores posibles:

* Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
    ```
    Increase the java heap size like:
    java -Xmx4096m -jar apktool.jar
    java -Xmx4g -jar apktool.jar
    ```
* error `Resource is not public` see https://github.com/iBotPeaches/Apktool/issues/810
* If you see error 'android:localeConfig in Manifest' see https://github.com/iBotPeaches/Apktool/issues/2756#issuecomment-1059370741
* If you see followint error try running `java -jar /home/expert/work/tools/apktool.jar empty-framework-dir --force` or run `b` command with parameter `--use-aapt2`
  • Use: java -jar uber-apk-signer.jar --apks /path/to/apks from here
W: invalid resource directory name: /home/expert/Downloads/Zzzzzz/Zzzzzz_v0.0.0/res navigation
brut.androlib.AndrolibException: brut.common.BrutException: could not exec (exit code = 1): [/tmp/brut_util_Jar_5815054990385134498.tmp, p, --forced-package-id, 127, --min-sdk-version, 23, --target-sdk-version, 29, --version-code, 226000400, --version-name, 226.000.0, --no-version-vectors, -F, /tmp/APKTOOL14466004687895005947.tmp, -e, /tmp/APKTOOL4388243966604401097.tmp, -0, arsc, -I, /home/expert/.local/share/apktool/framework/1.apk, -S, /home/expert/Downloads/Zzzzzz/Zzzzzz_v0.0.0/res, -M, /home/expert/Downloads/Zzzzzz/Zzzzzz_v0.0.0/AndroidManifest.xml]
* ~~Generate keys to sign apk: `keytool -genkey -alias keys -keystore keys -keyalg RSA -keysize 2048 -validity 10000 # password`~~
* ~~Sign apk file: `jarsigner -verbose -keystore keys /home/expert/Downloads/lancet/flixster_patched.apk keys`~~
* Old method of signing with jarsigner produces apk that new version of Android refuses to install.
Please.
* If necessary convert apk to jar for further analysis: `d2j-dex2jar.sh net.flixster.android-9.1.3@APK4Fun.com.apk`
* To find what cyphers suites are supported by remote server calls: `nmap --script ssl-enum-ciphers -p 443 youtubei.googleapis.com` or `sslscan youtubei.googleapis.com`
* To check what cypher suites your client supports query https://www.howsmyssl.com/a/check

Luego de tener la version parcheada y firmada, la instalamos en nuetro celular

PCAPdroid

Usaremos esta aplicacion de android para interceptar los pedidos, con esto podremos encontrar los endpoints de los recursos que nos interesan y el metodo de autentificacion si es que lo tiene.

Crear una API

Luego de tener los endpoints de la api, vamos crear nuestra propia API para. Una manera sencilla es usar AWS lambdas

AWS lambdas (python)

Creemos nuestra primera lambda:

  • nombre: testAPI
  • runtime: python3.10
  • arq: x86_64
  • crear nuevo rol: ✔️
  • habilitar URL de la función: ✔️
  • autorizacion: NONE
  • habilitar CORS: ✔️

Si hacemos un requests GET o entramos con el navegador a la url de la funcion, deberiamos ver el siguiente mensaje:

'Hello from Lambda!'

En la solapa codigo, podemos modificar el comportamiento de nuestra lambda

import json

def lambda_handler(event, context):
    # TODO implement
    return {
        'statusCode': 200,
        'body': json.dumps('Hola ya cree y modifique una lambda!')
    }

Layers

Cuando queremos usar alguna libreria para nuestra lambda, vamos a ver que no esta instalada, para instalarlas debemos usar Layers

Agregamos la ARN que coincida con la version de python y la arquitectura, para la libreria que necesitamos.

Por ejemplo, buscamos en esta lista, la ARN para requests, notamos que en este caso mi lambda esta en us-east-1.

CloudWatch

AWS ofrece un sistema para centralizar todos los logs, nos conviene setear nuestra lambda para poder visualizar logs. Para esto vamos a permisos y creamos un nuevo rol (ponemos un nombre como rolMILAMBDA para no olvidarnos). Luego debemos asignarle permisos full cloudwatch logs.

Ahora cuando probemos o ejecutemos nuestra lambda, quedaran guardado nuestros logs.

DynamoDB

Podemos usar esta base de datos para alamanacenar data scrapeada

Cron jobs

Queremos que este requests y update de la tabla se realice de manera automatica cada 15 minutos. Para esto vamos a usar un trigger (un disparador), vamos al dashboard de nuestra lambda y vamos a + add trigger.

Seleccionamos:

EventBridge (CloudWatch Events)

Y luego configuramos Create a new rule y le asignamos un nombre:

  • Rule name: ELNOMBREQUEQUIERASPARAELTRIGGER

Y por ultimo definimos cada cuanto se va a ejecutar nuestra lambda, como ejemplo uso 15 minutos:

  • Schedule expression: rate(15 minutes)

Ejemplos de apis:

Comparativa precios (Dia% , Carrefour, ChangoMas)

https://7pyngmccwa.execute-api.us-east-1.amazonaws.com/default/apitest?q=chocolate

Trenes

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published