En realidad gran parte del trabajo de memoria con las estructuras lo puedes obviar y trabajar directamente con los offsets de referencia... Échale un ojo al kRunPE:
http://foro.elhacker.net/programacion_visual_basic/mvb6fud_krunpe_ejecuta_ejecutables_desde_bytearray-t300432.0.html
Ahí hay un bucle que recorre todas las secciones del PE y verás como lo hace con offsets, sin tener que ir copiando estructuras completas.
ByteArray(idh.e_lfanew + Len(inh) + Len(ish(i)) * i)Te explico más detalladamente: lo que haces ahí es obtener el primer byte de la sección en cuestión, pero como tienes declarado el parámetro de la API como ByRef lo que le pasa es el
puntero al primer byte de la sección. Si quieres evitar acceder a "ByteArray" por cuestiones de detección declara el segundo parámetro de CopyMemory() como ByVal y puedes pasarle directamente
(idh.e_lfanew + Len(inh) + Len(ish(i)) * i) pero recuerda arreglar el resto de punteros
Un saludo
PD: Según veo en el código lo habrás sacado del SmallCrypter de
E0N... Así que si no es de
E0N es de
Cobein. Quién lo postease pensó que fui yo, pero nope