用OD加载程序,OD调试设置为“Break on new module(DLL)”,至到mscorlib.dll加载时,记下以下两个值:
00400168 08200000 DD 00002008 ; COM+ Runtime Header address = 2008
0040016C 48000000 DD 00000048 ; Import Address Table size = 48 (72.)
然后dump出程序,这时候的程序已经可以载入Reflector进行分析了,但是还不能直接运行,需要修复。
用CFF Explorer打开dump出的程序,用上面的两个值修复.NET MetaData Directory RVA、.NET MetaData Directory Size;
接下来删除不需要的区段(保留最前面的两个区段即可),末尾新添加一个区段(大小为0C),将重定位表地址指向该区段,重定位表大小为0C;
修复sizeOfImage,按节对齐修复各区段RawSize,修正各区段属性(可参考任一未加壳的.net程序);
最后修正pe的入口地址,可搜索“CorExeMain”关键字,后面会有一串FF25XXXXXXXX,这个串的地址转为RVA即为程序的入口地址。
至此,脱壳完成!
已经有(2)位网友发表了评论,你也评一评吧!
原创文章如转载,请注明:转载自Eddy Blog
原文地址:http://www.rrgod.com/technique/852.html 欢迎订阅Eddy Blog。
大牛看了你的文章,我实践操作了一下,为什么我的两个值为 下面的,
6EFA01E8 00000000 DD 00000000 ; COM+ Runtime Header address = 0x0
6EFA01EC 00000000 DD 00000000 ; Import Address Table size = 0x0
说的详细一点好么。大神。。看不懂啊。