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….
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 :
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