El problema que decía es que cuando el crypter cifra todo el ejecutable (menos el PE Header, claro) y añade la rutina para descifrarlo (gracias por el apunte, ya había oído que es incorrecto pero es la costumbre

) también estará cifrando la Import Table. Entonces cuando el loader de Windows vaya a cargar la IAT con las direcciones de las API's importadas (que lo hace antes de que se ejecuten las TLS Callback) e intente acceder a todas las RVA's y demás, se lo encontrará todo cifrado.
Supongo que habría que hacer algún apaño, como no cifrar la IT (pero entonces no sería un buen crypter...), o hacer que el loader cargara una IT falsa, y luego descifrar la verdadera y rellenar la IAT con las direcciones de las API...
O aun mejor, poner a 0 en la cabecera Import Table Address, Import Table size, Import Address Table address, Import Addres Table size. Así Windows pensará que no hay nada que importar, y después bastará con cargar manualmente todo y listo.
La RVA de la IT y la IAT se guarda en algún sitio de la nueva sección creada, donde también meto la rutina de descifrado y la estructura TLS_DIRECTORY. Aunque es cierto que habría que consultar previamente si el ejecutable original ya tiene una sección .tls, que sería muy raro, pero por si las moscas...
