简单SMC

先简单陈述两个概念:

反调试:应用程序为了保护自己不被调试器调试限制进程调试自身

SMC:动态代码加密技术,指通过修改代码或数据,阻止别人直接静态分析,然后在动态运行程序时对代码进行解密,达到程序正常运行的效果

例题讲解

以NewStarCTF 2023 SMC为例

知识点1

IsDebuggerPresent:一种常见的反调试保护方法,检查当前程序是否在调试器环境下运行

函数返回一个布尔值,如果当前程序正在被调试,则返回True,否则返回False

函数通过检查特定的内存地址来判断是否有调试器在运行。具体来说,该函数检查了PEB(进程环境块)数据结构中的_PEB_LDR_DATA字段,该字段标识当前程序是否处于调试状态。如果该字段的值为1,则表示当前程序正在被调试,否则表示当前程序没有被调试。

如何解决:

进入动调界面,其中阴影处下断点(不会的看Re:从零开始的逆向生活03day-CSDN博客

在右上角界面双击ZF修改为0x1

即可继续动态调试

知识点2 

这道题的关键点在于loc_403040,即SMC处理过的函数

F7/F8单步步过直至进入该函数,此时代码已经自解密完成

点击creat function,F5代码分析  

 这就是需要逆向的真实代码了

参考资料:

4.4 x64dbg 绕过反调试保护机制_过保护调试器-CSDN博客

CTF Reverse逆向学习之SMC动态代码加密技术,题目复现(NSSCTF)([网鼎杯 2020 青龙组]jocker)-CSDN博客 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值