多层SMC代码自修改程序逆向分析

您所在的位置:网站首页 smc全称是啥 多层SMC代码自修改程序逆向分析

多层SMC代码自修改程序逆向分析

2023-07-16 07:34| 来源: 网络整理| 查看: 265

多层SMC代码自修改程序逆向分析 SMC简介

在真正执行某一段代码时,程序会对自身的该段代码进行自修改,只有在修改后的代码才是可执行的。在程序未对该段代码进行修改之前,在静态分析状态下,均是不可读的字节码,IDA之类的反汇编器无法识别程序的正常逻辑。

代码分析

首先用IDA打开这个程序,用F5插件将其转换为伪代码 在这里插入图片描述 下面分析这段代码

首先让用户输入一段字符串,并检测它的长度是否为28字节,然后检测v6对应的ASCII码是否为125,这里看不出来v6是什么,所以我们看一下汇编代码 在这里插入图片描述 可以看到伪代码中if(v6 == 125)对应的是汇编代码中的loc_40107F,当我们输入的字符串长度为28字节的时候,程序才会跳转到这里,所以可以知道var_4这个变量的值为28,也就是edx=28,然后再加上var_69=-69,所以最后就定位到这个字符串的最后一个字符(因为var_68 = -68,字符串就被放到这里),也就是说最后一个字符必须是"}"才能继续执行程序。

然后程序对00414C3C处的加密数据(通过异或加密)用异或进行解密,并将它变成可以执行的代码跳转过去,我们启动IDA的调试器去动态调试一波

首先设置一个断点在调用解密后的代码的那条指令处,然后选择win32 debugger,点击运行进行调试

在运行窗口随便输入一段28个字节的字符串(最后一位必须是"}")然后敲回车

在这里插入图片描述 因为事先设置好了断点,所以直接按F7单步步入运行 在这里插入图片描述

可以看到这里将刚输入的几个字符和66H,6CH,61H,67H和7BH对比,如果有一个不对直接程序结束

所以可以知道这个字符串的前5个字符是"flag{"

所以我们重新开始调试将前5个字符改成"flag{",成功度过了第二层的检测

然后来到第二次解密,将第三层代码解密出来并进行运行 在这里插入图片描述

进入第三层代码 在这里插入图片描述

可以看到,这段代码将一段被加密的数据93A9A498H放到了var_8中,之后将输入字符串中的flag{之后的四个字符与CCH异或后和var_8进行比对,如果相同就进入下一层,如果不同则直接退出程序

我们运算一下,即98A4A993⊕CCCCCCCC,经过ASCII码解密以后得到结果The_

所以我们再次重新调试,在窗口中将前9个字符改成"flag{The_",然后再继续进入下一层 在这里插入图片描述 在这里插入图片描述

我也不知道怎么看出来这段代码为什么是base64的。。。。反正就是base64加密 在这里插入图片描述 开个玩笑

我们看一下以下几行代码

`

do

​ *((_BYTE *)&v20 + v3++) = v2++;

while(v2



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3