-
-
铸造外壳
-
发表于:
2005-1-15 10:48
6761
-
说一个简单的方案
重建 DOS Stub( 换一个小/标准的 Stub ), 可以减少一定体积
计算 SizeOfHeaders = Dos Stub Size(PE 前面都算) + PE Header Size(0F8h)
+ Section Table Size(28h*NumberOfSections)
NumberOfSections可以根据需要+1预留出壳段
修正 SizeOfHeaders, 按 FileAlignment 对齐算作第一个段的Offset
有效化PE, 按 SectionAlignment 对齐 RVA & VSize
按 FileAlignment 对齐 Offset & RSize
读取最后一个段 Offset + RSize 处到文件尾的数据, 视为附加数据(Overlays)
(可能没有Overlays)
根据上述信息组合一个文件:
DOS Stub + PE Header + Section Table + Sections + [先不要加Overlays, 还要加段]
把重要的信息如ImportTableRva, RelocRva, ...保存起来
把不能压缩的东西如Resource(重建目录,修改一部分指针到复制出来的资源上), Exports(复制就行,记得把里面的Addresses地址修正), Tls(复制, 18h字节)写入文件尾(作为新段开头)
合成外壳用的输入表, 为了兼容win2k之类无imports不能载入者,可以只有一个引入函数ExitProcess,也可以用GetModuleHandleA,GetProcAddress,取地址的最好还是自己写
把外壳加密,用变形引擎或者SMC一下.
加密原来所有的段,把外壳代码写到新段去.
修改入口点指向外壳入口.修改Exports,Rsrc,Imports入口
最后把你的Overlays写上.
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课