一个简单压缩壳的实现-创新互联
之前,花了三、四天的时间写了一个压缩壳,Mark一下。
10年积累的成都网站制作、网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先建设网站后付款的网站建设流程,更有芦溪免费网站建设让你可以放心的选择与我们合作。简单说下逻辑:
1、MFC实现的UI交互部分:展示壳的功能,获取被加壳程序的路径,显示加壳进度。
2、加壳功能Pack导出为一个dll,MFC部分动态加载。
3、壳的本体Stub,把数据段、只读数据段合并到代码段,添加到被加壳程序的最后。
简单说下功能:
1、支持反调试,检查PEB可以过x64dbg,NtQueryInformationProcess可以过StrongOD。
2、加密代码段,用的AES加密库。大概思路:遍历区段头表,找到.text区段头表,通过PointerToRawData字段加上被加壳程序读取到内存中的首地址,找到.text段在内存中的位置;通过SizeOfRawData得到它的文件大小;调用AES加密库。
3、压缩代码段,大概思路:通过.text段头表找到.text段,调用压缩库压缩。申请内存空间,大小=PE头+已压缩.text+其他区段。依次从内存空间把文件拷贝过去:PE头、已压缩.text段、其他区段,重组PE文件。同时,修改.text的SizeOfRawData、修改其他区段的PointerToRawData。
4、检测虚拟机,大概思路:动态获取遍历进程的几个函数,在壳里面检测虚拟机相关的进程。
5、IAT加密,大概思路:遍历被加壳程序的导入表,获取API函数地址,动态加密。申请内存空间,写入解密和跳转的shellcode。IAT表地址改为指向这个内存空间。
6、重定位,有多处需要重定位。
6.1、Stub.dll的.text段需要进行重定位,因为默认加载基址从0x10000000变成了0x400000。
6.2、要想被加壳程序支持重定位,需要把被加壳程序的重定表重定向Stub.dll的.reloc段。因为壳程序优先执行,利用系统自动完成壳部分的重定位。在壳程序中,手动完成目标程序的重定位。
7、TLS,需要在壳程序中定义一个TLS变量,佯装使用一下,编译的时候生成TLS相关的信息。然后,手动调用被加壳程序的TLS回调函数才能成功。
8、在码云有一个工程:https://gitee.com/shihuozhiyu/SimplePack
9、有一个脑图:
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
网站题目:一个简单压缩壳的实现-创新互联
分享URL:http://azwzsj.com/article/ecdgo.html