Day5 网鼎杯2020jocker SMC与堆栈平衡
SMC 技术
1 | SMC,即Self Modifying Code,动态代码加密技术,指通过修改代码或数据,阻止别人直接静态分析,然 |
堆栈平衡
1 | // 堆栈不平衡问题出现原因 |
下面简单举个例子,让大家更深刻的了解堆栈平衡的概念
1 | // 下面以汇编的角度来解释函数调用的过程,这里就以上面视频中的例子为例 |
网鼎杯 2020jocker

1 | // 利用Exeinfo查看文件的PE信息,可以知道文件是 32为无壳程序,利用IDA Pro打开 |

1 | 可以看到,箭头指的两个地方栈偏移都出了问题,应该在call完之后都会平栈,也就是应该都是0AC才对, |

1 | 然后F5返回main函数可以发现报错没了 |

1 |
|

1 | 首先,wrong()函数的主要操作就是,遍历输入的Str字符串,若下标i为奇数,该元素就与下标做减法。相反 |
正片开始

1 | 根据上图下好断点后,进入动态调试之后,随便输入24位字符串aaaaaaaaaaaaaaaaaaaaaaaa。 |

1 | 点击__Z7encryptPc 先用U将其设为无定义 |

1 | 再按 c 声明为代码段(对黄色线条之内的数据),点击 F(强制) + yes,最后返回点击__Z7encryptPc 用 P 将 |

1 | 完成以上步骤,encrypt()函数和finally()函数就被修复了。函数代码如下: |

1 | encrypt()函数: |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Bbdolt's Blog!