C语言密码破解!!!远没有你想的那么简单!

导语

 各位,大家看到标题先别着急,我先大伙聊聊密码破解的事,后面会有C语言的破解案例。

       现代密码学发展到今天,应该来讲破解密码的可能性已经很低了,而且破解的方法比较单一,因为现在普遍采取不可逆的哈希加密方式(如md5、SHA-1、HMAC-MD5等等),无法通过反向计算破解密码,因此目前有效的密码破解方式仍然是哈希碰撞来暴力破解。

       暴力破解的本质就是遍历所有可能,而且我们可优化的地方只能是策略层面的,也就是提高遍历所有情况的效率。不过今天我们要讲的不是暴力破解,我们接下来要说的是跟C语言学习有关的一个密码破解的案例,一定程度上也提供了一种密码破解策略,大家请先看代码:

◎  1、密码破解C语言案例

◎  2、破解案例分析

       上面的代码其实很简单,提示用户输入密码,读入字符数组,通过比较函数验证密码,正确的话输出破解成功,错误提示密码错误,密码为abc。当然这个案例有很多地方比较理想化,省略了很多东西,但我们想讲的是这种破解思想。

if(flag)

     printf("\nPassword cracked!\n");    //进入语句,密码破解就成功

       从代码中可以看出通过if语句即为破解成功,也就是打印出密码破解成功即可。讲到这里,其实我们大家有一个思维误区,就是认为密码破解就是要找出原始密码才算成功,其实不是这样的。

if(0==strcmp("abc",password)) {      flag=1;    //关键在于让flag变为非零值,密码abc只是为flag重新赋值提供条件  }

       我们换个角度来思考,在这个例子中,要想通过if语句,也就是说验证密码得成功,需要把flag重新赋值进而通过if语句的判断条件,问题就在这里,我们的最终目的是通过if判断语句,也就是说判断条件得为真,而上面输入密码等一些列过程最终就是让if判断语句为真,也就说我们可以抛弃密码这个概念,只要让if判断条件为真,即可破解成功,能否想到这一步很重要!!!

       接下来我们的工作就是想方设法让if判断条件为真了,也就是给flag重新赋一个非零值,但可操作的只能是用户输入,这似乎有点难度。其实这里就用到了平时我们要极力避免的bug——栈溢出

       大家这样想,我们没办法直接修改flag的值,但可以肯定的是, flag和输入的密码都位于同一个内存区域,而存储密码的数组总是有限的,是否可以通过输入足够长的密码来使数组数据溢出到存储变量flag的内存位置来改变flag的值答案是可以的。大家看图:

  3、总结反思

       破解上述密码的关键在于利用数据溢出这一漏洞。如果用户输入一个足够造成缓存溢出并且重写“flag”变量默认值所存在位置的内存的长“密码”,即使这个密码无法通过验证,flag验证位也变成了非零,虽然上面的密码并不等于正确密码abc,但我们仍然可以通过缓存溢出绕开密码安全保护

       当然上面的例子有很多理想化的地方,但是到现在每年因为数据溢出漏洞造成损失还很大。以上只是密码破解领域的一种策略,开头就说了真正的密码破解远没有这么简单,但我们主要想讲的是这种问题转化的思维,它在计算机领域的应用是很多的,希望这种思想能给大家的学习生活帮上一点忙。

       对于热爱编程的小伙伴来说,一个好的学习氛围是事半功倍的!如果你感兴趣或者有需求的话,笔者这里推荐我专栏的编程入门学习交流聚集地→C语言/C++进阶之路 - 专题 - 简书还有完整的学习路线图和学习文件视频,小白和大神们正在等着你一起探讨编程,极佳的学习氛围一起来学习吧!

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 注入攻击的分类 1.没有正确过滤转义字符 在用户的输入没有为转义字符过滤时,就会发生这种形式的注入式攻击,它会被传...
    查无此人asdasd阅读 5,698评论 0 5
  • 个人学习批处理的初衷来源于实际工作;在某个迭代版本有个BS(安卓手游模拟器)大需求,从而在测试过程中就重复涉及到...
    Luckykailiu阅读 10,289评论 0 11
  • [SQL注入攻击] SQL注入攻击是黑客对数据库进行攻击的常用手段之一。随着B/S模式应用开发的发展,使用这种模式...
    James黄杰阅读 7,732评论 0 30
  • 1/75 1认识Python语言 2/75 序言 培训最终的目标是什么? 衡量一个合格的软件工程师的标准是什么? ...
    清清子衿木子水心阅读 9,591评论 0 1
  • 滑下薄纱 香肩 玫瑰色的纹身呼之欲出 月光 坐怀不乱 再以猩红的唇吐出烟圈 以夜来香的笑声撩拨其心弦 星儿颤了一颤...
    茉莉风车阅读 1,864评论 0 2

友情链接更多精彩内容