IDApython utiliza la comunicación RPC para procesar por lotes la información del módulo

IDApython es muy poderoso, pero IDApython solo puede generar información sobre un módulo cada vez que se ejecuta. Si desea procesar la información de varios módulos al mismo tiempo, el RPC服务通信mecanismo de Python se puede utilizar como una buena opción.

Se trata principalmente de algunos problemas a los que se debe prestar atención cuando se usa la comunicación RPC para evitar que el personal inverso pise pozos como yo.

El código de implementación específico de la comunicación RPC puede hacer referencia a: https://blog.csdn.net/weixin_30955617/article/details/95011695
PYTHON3 puede leer esto: https://www.jianshu.com/p/9987913cf734 el
Inserte la descripción de la imagen aquí
host usa el servidor 1010 Monitoreo de puertos, idat64.exe usa el puerto 1010 para consultar al servidor la información necesaria y obtener los datos devueltos.
Pero cuando la comunicación se está ejecutando, el puerto relativo a la dirección externa del idat64.exe del servidor no se fija en 1010, sino que cambia todo el tiempo. Como se muestra abajo.
Inserte la descripción de la imagen aquí
Use netstat -ano para encontrar que la dirección externa (idat64.exe) ha estado cambiando (la segunda columna de la figura). El número de puerto máximo es 65535, como se muestra en la figura. Una vez que el número de puerto aumenta a 65534, el La dirección externa comienza directamente desde 1010. Aumente el número de puerto para la comunicación.

DEPURAR

1. Errores que ocurren fácilmente cuando IDApython está depurando:
ConnectionRefusedError: [WinError 10061] El servidor no está encendido (a veces no se informa ningún error IDA直接卡死没反应)

2. Durante el procesamiento por lotes IDA de algunos módulos, la comunicación RPC se detuvo repentinamente al comienzo de un determinado módulo y dejó de continuar, lo que provocó la suspensión del programa. 但是单独跑一个模块时,发现IDApython并没有出现任何问题。
No importa cuánto tiempo haya estado en comunicación el RPC, siempre que llegue al módulo, la comunicación definitivamente se suspenderá.
Después de un día de investigación y análisis, se descubrió que el programa sin interfaz idat64.exe agregó una oración de estructura print import_entry al llamar al módulo de salida para importar información de la tabla. Esta línea de código no afectará la ejecución en los módulos pequeños en general, pero causará de manera estable módulos atascados con más tablas de importación (más de 350).
Por lo tanto, IDApython de idat64.exe utilizado en el procesamiento por lotes no tiene declaraciones de impresión y no se puede anotar en chino.

3. Comunicación RPC en Python, este tipo de llamada a procedimiento remoto utiliza http como protocolo de transmisión y XML como formato de codificación para transmitir información. Algunos parámetros son mejores en forma de cadenas cuando se pasan parámetros en funciones del lado del servidor, y otros tipos como integer y str pueden causar errores.

info = searchheihei(1,'StorPortLogError','storport')
print info
ret = searchhaha('0','4104')                          
print ret

4. Lo más molesto en la línea de comandos de Windows es que hay espacios, cuando use Linux para portar IDApython, debe prestar atención a no tener espacios en el comando Wine. El directorio en la ruta de Python se puede encontrar con \ o /, pero en IDApython, solo puede usar la barra inclinada / izquierda como ruta; de lo contrario, no se puede encontrar la ruta.

5. Al imprimir una matriz relativamente grande en IDApython, es posible que se bloquee la comunicación RPC. Entonces IDApython es mejor no tener impresión.

Supongo que te gusta

Origin blog.csdn.net/qq_43312649/article/details/106857477
Recomendado
Clasificación