es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

IDA Hex Rays no puede descompilar una función de manera automática.

Cuando invierto el binario con IDA gui, todas las funciones se descompilan sin problema.

Pero cuando ejecuto un script automático en IDA sin gui, siempre hay una misma función que se niega a descompilarse. (cuando abro el mismo IDB en el que funcionó el script de automatización, la función se descompila sin problema)

Estoy utilizando “bip” y usando “BipFunc.can_decompile” para verificar si una función se puede descompilar.

EDIT:

De acuerdo a una respuesta inferior, he intentado agregar lo siguiente:

if not func.can_decompile:
    print(f"no se puede descompilar la función 0x{func.ea:04x}, intentando de nuevo")
    decomp_all()
    if not func.can_decompile:
        print(f"no se puede descompilar la función 0x{func.ea:04x}, intentando de nuevo")
        decomp_all_twice_cacheclear()
        if not func.can_decompile:
            print(f"no se puede descompilar la función 0x{func.ea:04x}, omitiendo...")
            return

Lamentablemente, no funcionó, obtengo los 3 mensajes de impresión cada vez, incluso en binarios diferentes.

Parece que se ha solucionado en IDA Pro 7.6.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Como experto en tecnología de la información especializado en ingeniería inversa, análisis estático, descompilación y uso de bip, recomendaría intentar los siguientes pasos:

    1. Usa BipFunc.load_all() para asegurarte de que todas las funciones estén cargadas antes de intentar descompilar.
    2. Verifica BipFunc.can_decompile para la función problemática. Si devuelve False, entonces intenta descompilar la función usando BipFunc.decompile(). Si aún falla, pasa al paso 3.

    3. Si la función aún no se puede descompilar, intenta usar BipPlugin.decomp_all() para descompilar todas las funciones en el archivo binario. Después, verifica si ahora se puede descompilar la función problemática usando BipFunc.can_decompile. Si se puede, pasa al paso 4.

    4. Si la función aún no se puede descompilar, intenta usar BipPlugin.decomp_all_twice_cacheclear(). Esto descompilará todas las funciones dos veces y también eliminará la caché. Después, verifica si ahora se puede descompilar la función problemática usando BipFunc.can_decompile. Si aún no se puede descompilar, es posible que no sea posible descompilar esa función usando bip.

    También es importante tener en cuenta que algunas funciones pueden ser demasiado complejas o estar obfuscadas para descompilar con cualquier herramienta, incluyendo bip. En ese caso, puede ser necesario realizar ingeniería inversa manualmente analizando su código de ensamblador.

Comments are closed.