多层SMC代码自修改程序逆向分析 |
您所在的位置:网站首页 › smc全称是啥 › 多层SMC代码自修改程序逆向分析 |
多层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 |