关于脱壳的一个问题
大佬们好,最近脱一个普通的upx壳遇到点问题,脱壳的程序的导入表被重建了,其中每个dll都有自己的_IMAGE_IMPORT_DESCRIPTOR,且其中的int表指向和未加壳程序应该是一样的内容;iat表中的内容,源程序中和int表一致,而脱壳的程序中则指向的是一个写死的高地址(也就是dump出来时的地址);但是既然操作系统每次重新加载程序的时候都会根据导入表的信息重新填写iat表,那脱完壳的程序的iat表不应该会直接被操作系统重新填写的值覆盖吗,这样的话,那这个脱完壳的程序就和普通程序一就是一样了呀,但是我在win10上开了aslr后这个程序就运行不了了,希望解答,感谢! @lyl610abc希望得到大佬比较官方的回答,我确实也有这个疑问,一开始我认为是重定位表的问题,但好像不是。 你了解下aslr是什么应该就清楚了。 Hmily 发表于 2021-4-26 10:58你了解下aslr是什么应该就清楚了。
aslr不就是在每一个进程的进程空间中,对dll的加载基址进行了一个偏移吗,但是我认为这个对于exe的加载执行过程没有影响啊,因为在正常程序的执行流程中,dll的函数的地址总是要写入到iat表中的啊。希望大佬解答!!! 浮华丿旧容颜 发表于 2021-4-26 11:06
aslr不就是在每一个进程的进程空间中,对dll的加载基址进行了一个偏移吗,但是我认为这个对于exe的加载执 ...
exe一样会基地址随机化,exe也有重定位表。 Hmily 发表于 2021-4-26 11:28
exe一样会基地址随机化,exe也有重定位表。
感谢大佬解答,我用x32dbg+scylla这两个工具脱壳后,跟踪了一下这个脱壳后的文件。我认为的原因就是,在修复后的文件中有全局地址,这个全局地址是相对于dump时的环境的地址,如果aslr没有打开,那么进程的加载基址就是固定的,也就使得这个地址是可用的,但当我开启的了aslr,导致了进程基址的偏离,就使得这个地址不可用了。 浮华丿旧容颜 发表于 2021-4-26 12:45
感谢大佬解答,我用x32dbg+scylla这两个工具脱壳后,跟踪了一下这个脱壳后的文件。我认为的原因就是,在 ...
不知道你要说什么,如果你想解决这个问题很简单,要么修复重定位表,要么关闭exe的重定位功能,没必要关闭系统的aslr。
页:
[1]