2012-04-25 10 views
9

Me he estado preguntando: ¿cómo se puede desmontar un binario auto modificante? Supongo que no puedes usar olly o IDA porque son desensambladores estáticos, ¿correcto? ¿Qué pasa con el desensamblador si saltas a la mitad de una instrucción? ¿Y cómo se analizan los motores metamórficos?Desmontar el código de auto-modificación

+0

Uno no desea criticar su pregunta demasiado duramente. Tal vez simplemente no lo entiendo! Sin embargo, puede que no sea el tipo de pregunta que uno puede responder en unos pocos párrafos. – thb

Respuesta

10

Tanto OllyDbg como IDA no son solo analizadores estáticos, sino que ambos también pueden ejecutar el código. IDA también puede ejecutar su código de forma remota y, hasta donde yo sé, incluso puede hacer depuración incorporada. Por supuesto, si "rompe" la ejecución del programa en algún momento, y echa un vistazo al desmontaje, reflejará (en ambos programas) el estado actual del programa, incluidas las modificaciones que haya realizado en sí mismo.

¿Qué sucede con el desensamblador si se salta al medio de una instrucción?

De acuerdo con mi experiencia, ambos desensambladores mencionados pueden manejar esta situación. Por ejemplo, ver aquí, ¿cómo OllyDbg lo administra, aquí es una captura de pantalla cuando EIP es 00892C0E:

OllyDbg before

Y cuando hago EIP = 00892C0F, que se encuentra en una mitad de una instrucción:

OllyDbg after

como ve, simplemente vuelve a desensamblar las instrucciones, por lo que es un código de operación diferente (pero aún válido).

¿Y cómo se analizan los motores metamórficos?

Al igual que cualquier otro código. Los trucos que mencionas (saltar a la mitad de una instrucción, modificarse a sí mismo) fueron principalmente populares hace un tiempo, cuando los desensambladores y el depurador no eran tan inteligentes como lo son ahora.

Por supuesto, el análisis estático puede ser muy difícil, pero por supuesto puede analizar binarios completamente fuera de línea y descifrar el "morphing" (en su mente) para hacerse una idea de lo que hará el código. Pero cuando puedes usar un depurador en vivo, entonces simplemente ves lo que el código está haciendo.

Por supuesto, todo esto es una carrera interminable entre las personas que escriben el código y las personas que lo analizan. Quién gana depende de quién se da por vencido antes.

+1

Solo quería citar esto, porque esto es muy cierto :) "Por supuesto, todo esto es una carrera interminable entre las personas que escriben el código y las personas que lo analizan. Quien gana depende de quién se rinda antes". –

1

Ollydbg se encargará de tales situaciones.

La funcionalidad que está buscando es 'Analizar'. Volverá a desarmar las nuevas instrucciones en la ubicación y actualizará la ventana de la CPU con el código actualizado.

Supongamos que las instrucciones de la dirección X harán algunos cambios de auto modificación. Después de ejecutar esa instrucción, puede ejecutar el comando 'Analizar'. Este es un código para volver a desensamblar alrededor de ese bloque básico y actualizar la CPU con las instrucciones actualizadas.

Para analizar, haga clic derecho en la ubicación deseada en la ventana de la CPU y haga clic en Análisis> Analizar Código. El atajo es Ctrl-A.

Cuestiones relacionadas