温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

一个简单压缩壳的实现

发布时间:2020-08-03 19:40:40 来源:网络 阅读:1018 作者:适__ 栏目:编程语言

之前,花了三、四天的时间写了一个压缩壳,Mark一下。

简单说下逻辑:

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、有一个脑图:

一个简单压缩壳的实现

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI