SProtect 最全脱壳教程 原理剖析.pdf
《SProtect 最全脱壳教程 原理剖析.pdf》由会员分享,可在线阅读,更多相关《SProtect 最全脱壳教程 原理剖析.pdf(25页珍藏版)》请在三一办公上搜索。
1、SProtect 最全脱壳教程+原理剖析 废话不多说,上步骤!1、什么强度?别问,问就是全保护!2、加壳:超级模式 3、导入表:超级模式 4、内存校验:虚拟模式 5、.文章内容:1.IAT扫描与修复 2.antidump处理 3.IAT导入表修复 4.写补丁进行修复antidump IAT扫描之出入01之牛头马面之自动运算扫描大法:超级模式的IAT保护强了点,但是没啥用,加密类型大致分为如下几种模式 1、Call 到IAT解密 2、JMP 到 IAT解密 3、CALL 到IAT解密 然后 Jmp进入虚拟机 通过以上的特征进行扫描,扫描大概的原理:1、指定代码段开始与结束(.text),一般代码
2、段的开始地址是0 x00401000 2、扫描代码段和代码段结束的所有call和jmp,并且都是IMM类型 3、判断call和jmp的imm是否处于svmp1区段,如果是svmp1区段,则可能是antidump或iat下面通过扫描得出结果:1.2.修复原理:0 首先扫描出来的call和jmp要排除antidump 1 遍历进程所有的模块,取出导出表的各个函数地址,并且记录 2 跟踪每一个call和jmp,一直到跟踪到ret 3 判断栈顶esp的值是否处于系统库的导出表函数头部 4 如果栈顶esp的值处于某个系统库的导出函数头部,那么esp的值就是api地址,这里记录一下api地址(这里还有一种
3、方式可以确定,就是如果esp的地址不处于主模块的区间,则就是第系统库或第三方库API地址)5 如果确定了esp的值就是api,那么esp+4的地址如果处于代码段区间就是CALL IAT,如果esp+4的地址如果不处于代码段区间,则是JMP IAT类型 6 如果esp的地址处于主模块的区间,那么可能就是MOV R32,IAT类型 区分IAT加密的方式分为push call和call retn方式:invoke_code_address是扫描出来的调用IAT的地址此时如果esp+4-invoke_code_address=5,那么就是push call模式,此时iat的开始修复地址就要减1如果es
4、p+4-invoke_code_address!=5,那么就是call_retn模式,此时地址,此时iat的开始修复地址就要不需减1 引用上述第6点,如果esp的地址处于主模块的区间,那么可能就是MOV R32,IAT类型,那么这里需要再次判断esp的地址是否处于代码段区间,如果处于代码段区间那么确定就是MOV R32,IAT类型 如果确定是MOV R32.IAT类型,则判断api地址 IAT调用的地址如果结果是5 且 mov r32,iat的r32不等于eax,那么就是push call模式,否则就是none模式none模式就是原mov eax,iat的模式,因为mov eax,dword
5、ptr ds:iat正好够5个字节,所以在修复的地址不需要减1 如果结果不等于5,则是call retn模式通过上面的+1或-1以及各种识别操作,可以扫描到IAT如下:if(.|esp4=g_svmp1_start&esp4 g_svmp1_end)/这个的意思就是,有些IAT在虚拟的情况下调用完成了系统库API,然后返回的不是代码段地址,而是svmp1的地址,所以这里再加个判断!通过上述的方式搜索到iat的数据之后,就可以开始修复了,因为antidump会检测IAT的调用处,所以不能直接完整的修复。所以中转API跳转的地址可以在call IAT解密的地方或 JMP IAT(VMEnter)的
6、虚拟机入口进行hook,然后直接扩展最后一个区段,把调用的IAT的指令修复到扩展的区段,流程如下:Hook IAT解密的地方中转到修复的IAT调用处:HOOK IAT的虚拟机入口:因为有些调用IAT需要平栈,所以修复方式根据IAT是否被虚拟化,IAT是call还是jmp还是mov,类型是否是push call 或 call retn进行修复:代码如下(懂的都懂):修复完成之后大概如下:全自动模拟玛雅轮转算法处理antidump 这里解析一个常用的antidump,通过上述的代码扫码之后,扫描到了一堆antidump,如下:anti_dump 0040100F jmp 0 x1307435ant
7、i_dump 0040107B jmp 0 x1307574anti_dump 004010E7 jmp 0 x130765danti_dump 00401164 jmp 0 x130777canti_dump 004011D0 jmp 0 x130785eanti_dump 0040123C jmp 0 x1307956anti_dump 004012A8 jmp 0 x1307a97anti_dump 00401314 jmp 0 x1307b6aanti_dump 00401380 jmp 0 x1307cb1anti_dump 004013EC jmp 0 x1307dca 首先什么是
8、antidump?antidump就是在你脱掉外壳之后的检测等阻碍你脱壳的校验!Antidump大致分为 堆antidump,cpuid antidump,校验PE相关的数据的antidump,以及可以结合fs段和系统动态库地址等变动的数据进行antidump!例如:1、运行壳代码的时候,将一个在”加密壳加密期间生成的”随机值放入到堆里,然后把堆的地址放入到某一个区段里,然后antidump SDK可以在区段里面取出这个堆地址,然后拿到这个随机值,然后比对是否相等,如果不相等则触发校验!这里出现了堆,如果程序被脱壳了,此时没有外壳的加载,所以堆可能就无法被创建,所以脱壳后的程序访问堆地址就会触
9、发异常,如果异常程序就会崩溃 2、antidump里面可以检测区段的地址,以及区段的数量,以及是否添加了新的区段来检测是否被脱壳!这里我分析0 x00401311这个窗口载入事件的地址,其他也一样 通过跟踪扫描并总结如下:通过分析0 x00401311地址,总结Antidump流程:1、在svmp1取出堆地址进行校验2、校验rsrc资源段数据3、校验IAT调用处是否被修改4、校验区段的数量5、校验区段的虚拟地址6、解密堆地址,后续用于取出cpuid的校验值7、Cupid校验8、将上面的所有的值介入运算,将结果与返回地址或栈顶运算,如果校验失败那么返回地址或栈顶的值可能就是一个错误的值 这里讲解
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SProtect 最全脱壳教程 原理剖析 脱壳 教程 原理 剖析
链接地址:https://www.31ppt.com/p-7330749.html