SMC局部代码加密技术简介
SMC是一种局部代码加密技术,可以将一个可执行性文件的指定区段进行加密,使得黑客无法直接分析区段内的代码,从而增加恶意代码分析难度和降低恶意攻击的可能性。
基本原理:
在编译可执行文件时,将需要加密的代码区段(如函数、代码块)单独编译成一个段,并将其标记为可读、可写、不可执行,然后通过某种方式在程序运行时将这个段解密为可执行代码,将其标记为可读、可执行、不可写。
实现方式
1、修改PE文件的Section Header
2、使用API Hook实现代码加密和解密
3、使用VMProtect等第三方加密工具
实现步骤
1、读取PE文件并找到需要加密的代码段
2、将代码段内容进行异或加密,并更新到内存中的代码段
3、重定向代码段的内存地址,使得加密后的代码能正确执行
4、执行加密后的代码段
探究SMC局部代码加密技术以及在CTF中的运用 - SecPulse.COM | 安全脉搏
CTF中的SMC
SMC破解方法
第一种:找到对代码或数据加密的函数后通过idapython写解密脚本
第二种:动态调试到SMC解密的地方dump出来
权限问题
SMC的实现是需要对目标内存进行修改的,“.text”一般没有写权限,那么就需要拥有修改目标内存的权限:
1 | 1、在Linux系统中,可以通过mprotect函数修改目标内存的权限 |
注:也可以观察是否有这两个函数来判断是否进行了SMC
例题练习
法一:idapython
[网鼎杯2022青龙组Re复现-CSDN博客](https://blog.csdn.net/Sciurdae/article/details/135135057?ops_request_misc=&request_id=&biz_id=102&utm_term=网鼎杯jocker idapython&utm_medium=distribute.pc_search_result.none-task-blog-2blogsobaiduweb~default-0-135135057.nonecase&spm=1018.2226.3001.4450)
1 | addr = 0x401500 |
法二:动态调试
[CTF Reverse逆向学习之SMC动态代码加密技术,题目复现(NSSCTF)(网鼎杯 2020 青龙组]jocker)_逆向 smc-CSDN博客