PatoAventura: Dacito en la batalla contra las referencias mal referenciadas! del Win 7

Hola de nuevo, esta es una cortita, la pongo en caliente, pq sino luego se va a la cola y ya no sale…:

bueno, tengo que aceptar que quizá este post tenga algo de bilis, espero que sea en su mínima expresión.

Antecedentes

esta pato aventura empezó, por que tuve que lanzar un proceso de análisis –automatizado- de una app el cual iba a demorar un par de horas, así que me  puse a ver como me entretenía, como había platicado con Eber via twt sobre cuales apps eran mas inseguras las de win32 o las de .net – eso es otro tema… – se me ocurrió probar el hacer el análisis de un archivo obfuscado con un desensamblador tradicional y en un editor hexadecimal.. Vs un archivo la versión original de ese archivo, en este caso era una app win que había echo días atrás, y para esto utilice el OllyDbg 1.1 y tbm el notepad++ con el plugin de fuente hexadecimal..  – si, ya se existe el WinDbg, pero no puedo dejarlos a un lado –..

Y que paso???

Me puse a analizar el código en ensamblador que mostraba, entonces… se me ocurrió ver que cadenas ASCII y las UNICODE – use el plugin “Ultra String Reference” del OllyDbg .. este pluging ademas de mostrarme las referencias del archivo, tbm me mostro las referencias string, de los archivos referenciados y dependientes … y en eso pude ver esto….

fuentewin7

cuando vi esto…. recordé unas experiencias previas con win 2k3..

si ven en la parte izquierda, esto viene de “ntdll.dll” una libreria de win7, y esta referenciando a una  ruta “ e:win7rcminikerneltheranpoolntdllwaiter.c” – oh win 7 lo hicieron en C xD!”- pero que es esto?  simple, parte del codigo de la dll esta referenciando, al archivo fuente, el cual lógicamente no tengo, y además, que esta en otra partición – la cual no necesariamente podría existir en mi pc-, y esto pa que o que? en algunos casos cuando ocurre algun error, o en determinada situación Windows intenta buscar el archivo fuente – para lanzar su depurador – pero “oh sorpresa” el archivo no existe….  como ya deben de saber, el buscar archivos es algo costoso – en procesamiento –  y mas aun si no existen, pq pueden lanzar excepciones y ps una excepción provocada por otra excepción pues es doblemente costosa… o me equivoco?.

se que mas de uno ya estara pensando en responder al post con un “es beta”, y justo por eso muestro esto :

fuentewin2k3

es la misma dll “ntdll.dll”, con la diferencia que es del Windows 2003 R2..versión final … escogí la imagen al hazar,  y la dll tbm, ya que no son las únicas con este “detalle”, si se fijan en este caso los archivos con “.CPP” ósea que al windows 2003 r2 lo programaron en… ? xD!, pero bueno, no nos salgamos del punto….

Cual es el punto?

el punto es que los programadores de Microsoft, dejan referencias a rutas absolutas de  archivos “fuente” dentro de sus dlls, las cuales luego son llamadas por X o y motivos…  y estas al no estar presente lanzan a su vez otra excepción, que conseguimos con esto? simple… que nuestros win respondan de modo mas lento, ya que todas las excepciones no controladas son muy costosas – asi como las novias que son “pedilonas xD” –

creo que cualquier administrador de server decente -y especifico decente, pq el echo de meter el disco y darle next a todo no los hace un administrador de server..-  y cualquier otra persona que sea muy fan de ver el visor de eventos, a visto alguna vez en su vida, un error marcado casi sin motivo al parecer alguno en el visor de eventos, donde el mensaje dice “no se encuentra el archivo d:ntbasentdll……”  y uno nomas dice “juat!??” , esto muy común en Windows 2003  – ojo, win 2003 me parece un muy buen sistema operativo, pero de todas maneras no se escapa de esto –.

Personalmente aun no entiendo el por que los programadores de Microsoft hacen esto, para una app que usaran personas que no tienen el fuente a la mano…, ya que habrían otras formas de ubicar la fuente del error, sin tener que hacer llamadas a esos archivos.. la verdad no les entiendo, ya que evitando esto, podrían hacer que windows sea un poco mas estable…, la verdad cada vez los entiendo menos….

se que hubiera cerrado con broche de oro, mostrar una imagen del filemon donde sale la llamada a ese archivo o el visor de eventos, donde se hace una llamada a esos archivos, pero no e podido sacar aun una serie de pasos repetibles sobre como hacer k aparezcan estas llamadas y ando con mucha chamba … – las cuales ya me han pasado varias veces – ,  y aunque este tipo de “situaciones”  no se ejecuten todos los días, pueden hacer que un día X cuando estemos con alguna aplicación critica, truene algún proceso y este a otro y esta bolita de nieve se vuelva una avalancha y sea algo mas fuerte  – ya me paso… –, si mas adelante me sale uno, lo agregare a este post….- un screen shot –

que podemos hacer nosotros en estos casos ? … lamentablemente nada… y solo rezar por que no nos pase… y  tbm rezar pq ms deje de hacer esto en las apps de producción …

por situaciones como esta, es que recomiendo siempre que al listado de pruebas por hacer, se haga una revisión al archivo desensamblado, para ver que posibles detalles se podrían encontrar por allí…, lamentablemente no muchos lo hacen.. 🙁

 postdata: las imagenes que puse alli son al hazhar… si quieren verlo por sus propios ojos, las cientos – si es que no miles – de llamadas… pueden buscarlo uds mismos .. 😉 ….

Salu2

Ddaz

6 comentarios sobre “PatoAventura: Dacito en la batalla contra las referencias mal referenciadas! del Win 7”

  1. en muchos (la mayoria de los?) casos esta informacion *no significa nada*, al menos para el usuario o el performance de la aplicacion, simplemente que los compiladores y enlazadores incluyen esta informacion en el ejecutable, pero no quiere decir que esta sea usada por el ejecutable en si, sino mas bien informacion para los debuggeadores

  2. pero e visto cuando debugueaba procesos, con el filemon -lamentablemente no lo pude replicar ahorita – que si hacen esas llamadas…, y salta la excepcion de archivo no encontrado, y si, estoy concienteque algunas pueden ser solo texto, pero no todas, ya que me a tocado errores – muchos en win 2003 – sobre esto…

    logico, el usuario normal no lo nota, y en muchos casos en los server no se ven, a menos que uno marque que muestre todo tipo de errores en el log de eventos, en algunos casos no afecta y en otros si 😉

    Salu2

    Ddaz

    salu2

    Ddaz

  3. Worales!! Yo pensaba que este tipo de cosas se limitaban a las aplicaciones pequeñas hechas por desarrolladores pequeños, porque a quien no le ha pasado cuando instalas algún pequeñito programita, que hace referencia a algún source inexistente, y ya no hay manera de avanzar. Peor cuando por culpa de esto uno se atora con un error muy grave.

    Pero no me imginaba que las misma cosas estuvieran sucediendo también en el mundo de Redmont jejejeje qué buen aporte Ddaz!!

  4. A ver… esa información es la información del código fuente para uso en depuración en ningun caso ntdll.dll te va a pedir un archivo de código fuente. ¿Es que te crees que la gente que trabaja en Microsoft no repasa los fuentes?

    Créeme que nunca te va a aparecer en el filemon una llamada a ese fichero si te hicieras un programa que con getprocaddress llamara a todas las funciones públicas de la dll.

    Además de esto no eras consciente antes y nunca te ha fallado Windows por eso, porque ahora va a ser diferente, y si windows te falla utiliza WinDGB para ver que esta pasando y si encuentras una excepción de que no encuentra alguno de los ficheros envíame un mail.

    Y si Windows y más concretamente la parte ejecutiva del kernel está hecha en C.

    Saludos.

  5. hola luis:

    lamentablemente en el visor de eventos, e tenido ya antes varios logs marcados por ese motivo.. y el error era que no se encontraba X o Y archivo…, logicamente no han sido muy seguidos, pero si me han pasado, esto en el win 2003 server… y mas lamento aun no poder haber reproducido esos eventos – y en la vista actual del log, no aparece ninguno, pero el dia que me vuelva a aparecer uno, lo pondre 😉 – y si era conciente de esto desde hace mucho… ahora recien me puse a revisar….

    y sobre lo de la gente de ms… con los ultimos bugs y cosas que e pasado con los de pruebas de ms… ya nada me sorprende alli ;).

    Salu2

    Ddaz

  6. Sigo pensando lo mismo. Cuando encuentra una sola entrada en el registro de eventos de Windows de que no se ha podido encontrar un fichero de código fuente envíame un correo, es más búscalo en google a ver si encuentras algo, verás.

    Lo único que pasa aquí es que Microsoft incluye la información de código fuente en sus binarios para que en caso de que tengan que depurar esas dlls sea más fácil para el depurador.

    Por ejemplo .NET framework también tiene esa información y si te descargas los símbolos de http://msdl.microsoft.com/download/symbols estos vienen sin esa información de código fuente (Source Code Stripped) pero si te lo descargas http://referencesource.microsoft.com/symbols si vienen, así que este post es algo meramente anecdótico.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *