C语言反向系列破解一个简单的C语言程序

电脑杂谈  发布时间:2020-06-15 02:22:45  来源:网络整理

简单的c语言程序_c语言入门简单程序_c语言小程序

从今天开始,为了增加学习C语言的乐趣,更深入地学习C语言以及学习更多实用的编程技术,我们将来将开设反向课程主题,希望您喜欢!

C语言研究中心()

本教程将教您如何反向分析和破解简单的C程序. 您需要熟悉基本的C语言语法. 使用的工具是: VC6,IDAPro,OD,UE和其他工具.

开始吧.

首先,我们使用VC6编写一个简单的密码验证程序. 这个想法很简单. 让用户输入密码,然后使用strcmp比较密码是否相同. 如果它们相同,则提示将是正确的. 代码如下:

C语言逆向系列之破解一个简单的C语言程序

怎么样,简单!

简单的c语言程序_c语言入门简单程序_c语言小程序

尝试运行它,逻辑很简单,只有当您输入正确的密码123456时,才会打印YES,然后结束程序,否则它将始终提示NO并始终让您输入〜

现在,让我们破解吧!让我们随意输入密码!太酷了!

好,开始!

首先,使用IDAPro打开我们在VC6中编写的密码验证程序简单的c语言程序,然后打开流程图,如下所示:

C语言逆向系列之破解一个简单的C语言程序

在类似于该程序的流程图中,我们可以看到其中的字符串,例如“ please input passwd”,“ yes”和“ no”. 您会看到,是和否位于两个“中间”,显然是两个处理过程. 在它们上方相同处理块的末尾,有一个句子: jnz short loc_401073这是一个跳转语句,jnz表示不相等,然后跳转表示,后跟一个地址. 于是灵感就来了,直接在这里更改它. 例如,您可以将jnz(如果不等于则跳转)更改为jz(等于),但是程序会发生很大变化!

在进行更改之前简单的c语言程序,您需要知道一个公式,即: 文件偏移地址=虚拟内存位置(VA)地址加载基地址(image base)-段偏移

c语言小程序_c语言入门简单程序_简单的c语言程序

我们现在可以使用IDA来查看jnz所在的命令的地址,但这只是虚拟内存地址,在Windows中,加载基址通常为0x00400000. 断面偏移可以使用其他工具找到. 确定继续

接下来,检查地址并继续构建. 首先,用鼠标单击jnz命令以将光标留在此处,然后在空格后切换到相应的命令以查看句子的地址位置. 如下图所示:

C语言逆向系列之破解一个简单的C语言程序

您看到了吗?在00401062中的文字部分!好,先写下来,以后再用

此时,IDA可以撤回...

然后,启动另一个工具loadPE,这是做什么用的?答: 计算该程序中我们代码的节偏移量!如下:

先开始

c语言小程序_简单的c语言程序_c语言入门简单程序

C语言逆向系列之破解一个简单的C语言程序

然后单击“ PE编辑器”以选择我们的exe目标程序,然后单击以下部分,

C语言逆向系列之破解一个简单的C语言程序

如何计算截面偏移量?只需从ROffset中减去VOffset,当然它显然为零(尽管感觉没用,但大多数都是0,但这很好)

这时,您已经掌握了数学,可以直接将其纳入公式中. 文件偏移地址是: 00401062 – 0x400000-0答案是1062!哦,不应该是0x00001062!

好吧,终于启动了著名的UE修改工具!加载!

搜索地址0x00001062如图所示:

C语言逆向系列之破解一个简单的C语言程序

然后将75更改为74!

为什么?答: 因为jz的机器代码是74!

最后保存!大功告成!

让我们再次运行它,只需输入密码:

C语言逆向系列之破解一个简单的C语言程序

按Enter!看〜哈哈哈哈〜

您看到效果了吗?再来一遍!如有任何疑问,请随时联系我们的CTO!

C语言研究中心()

C语言网络提供“ C语言,C ++,算法竞赛”课程,所有课程均由高级研发工程师或ACM金牌教授,更科学,更全面的课程体系,以视频+评估学习模式进行学习,学会同步,拒绝理论,真正学习编程!还有一些增值好处,例如奖学金等着您!


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-245677-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 周亚宁
        周亚宁

        歼-16可争夺海上制空权

      • 李俊廷
        李俊廷

        多么不要脸的邪恶帝国

      热点图片
      拼命载入中...