专栏首页C语言及其他语言C语言逆向系列之破解一个简单的C语言程序

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

以下正文

本节教程将教大家如何去逆向分析和破解一个简单的C程序,需要大家熟悉基本的C语言语法,用到工具有:VC6、IDAPro、OD、UE等工具。

下面我们开始。

首先,我们用VC6写一个简单的密码验证程序,思路呢,很简单,就是让用户输入密码,然后用strcmp比较是否一样,一样的话提示正确,不正确的提示错误并重新输入。代码如下:

怎么样,简单吧!

运行起来试试,逻辑很简单,只有输入正确密码123456的时候才会打印YES然后结束程序,否则一直提示NO并且一直让你输入~

那现在,我们就来Crack掉它!让我们随意输密码都可以通过!怎么样,够酷吧!

OK,开始!

首先,用IDAPro打开我们用VC6写好的这个密码验证程序,打开流程图,如下:

在这个就像这个程序的流程图中,我们可以看到里面的字符串,譬如“please input passwd”以及“yes”和“no”。并且可以看到yes和no位于两个“中”,很明显是两个处理流程。在它们上面同一个处理块结尾最后注意有一句:jnz short loc_401073 这就是一句跳转语句,jnz意思为不相等则跳转的意思,后面带一个地址。所以灵感来了,直接在这里进行更改。比如可以把jnz(不相等则跳转)换成jz(相等跳转),可想程序将大变!

改动之前,需要先知道一个公式,即:文件偏移地址 = 虚拟内存地(VA)址 – 装载基址(image base) – 节偏移

我们现在可以用IDA查看jnz的所在指令地址,但仅仅是虚拟内存地址,而装载基址在windows中PE程序一般都是0x00400000,节偏移可以用另一个工具找到。OK继续

接下来就查地址,继续动工。首先,鼠标点击jnz命令让光标停留在这里,单后空格切换到对应的指令,查看该语句所在的地址位置。如下图:

看到了吗?在text段的00401062处! OK,先记下来,一会用

这个时候,IDA可以退下了…

然后,启动另一个工具,loadPE,这个干啥用的呢?答:算算咱们代码在这个程序中的节偏移!如下:

先启动

然后点击PE Editor 选中我们的exe目标程序,然后点击section,如下

怎么算节偏移呢?用VOffset减去ROffset即可,当然这里很明显为零嘛(虽然感觉没啥用,大多数都是0,不过算算好)

这个时候考数学了,直接带入公式算吧,文件偏移地址就是:00401062 – 0x400000-0 答案就是1062! 哦不应该是0x00001062!

那么,好了,最后启动大名鼎鼎的UE修改工具!加载它!

搜索地址0x00001062如图:

然后将75改为74即可!

为啥? 答:因为jz的机器码就是74!

最后保存!大功告成!

再运行看看,随便输个密码:

敲回车!看看~咩哈哈哈~

看到效果了吗? 照着做一遍吧!有问题随时联系我们的CTO哦!

本文分享自微信公众号 - 编程范(dotcpp),作者:黄老师

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-02-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【优秀题解】问题 1442:打印十字图

    我的思路就是一步一步的分析,首先我想到的就是分配一块内存来储存图案,通过观察知道图案是一个方正,于是想到用字符矩阵。然后分布完成,首先就是把方块字符中...

    编程范 源代码公司
  • 在命令行窗口中看大片《星球大战》,太强了!

    这个网站需要telnet登录,telnet是个老古董程序了, 如果你用的是Windows 10 ,默认是关闭的,需要把它启用:

    编程范 源代码公司
  • 程序员保持健康的7个秘诀

    只有当你失去的时候,你才会去珍惜,健康就是如此。我们都知道健康的重要性,但我们常常忽略它。在这篇文章中,我们将分享一些技巧,帮助作为程序员的你保持健康。 虽然编...

    编程范 源代码公司
  • maven install,build,package等基操及避坑指南

    Maven 是 Apache 组织下的一个跨平台的项目管理工具,它主要用来帮助实现项目的构建、测试、打包和部署。Maven 提供了标准的软件生命周期模型和构建模...

    JavaEdge
  • 千古难题——如何证明“我就是我”?一个小程序就能解决!

    “此前如果你要想在线下办理一些比较复杂的政务服务,往往需要奔波往返于各个办事部门,提供很多证明材料。”

    场景录小程序
  • Maven3入门教程

    Maven是一个异常强大的构建工具,能够帮我们自动化构建过程,从清理、编译、测试到生成报告,再到打包和部署。通过Maven,我们只需要输入简单的命令(如mvn ...

    SmileNicky
  • phpunit-单元测试神器

    在我们开发的时候,测试是必不可少的东西,那么有个好的测试工具才能让你测试的效率提升,现在就介绍下最近我发现的单元测试工具-phpunit吧.

    仙士可
  • 活久见!64 张图带你 Maven 实战通关

    通常 Web 项目 开发只会创建一个工程,然后所有的 jar 包都会存放到 WEB-INF/lib 目录下,如下图所示:

    cxuan
  • 千古难题——如何证明“我就是我”?一个小程序就能解决!

    “此前如果你要想在线下办理一些比较复杂的政务服务,往往需要奔波往返于各个办事部门,提供很多证明材料。”

    场景录小程序
  • 随机爬取网易云音乐评论

    Eric杂货铺

扫码关注云+社区

领取腾讯云代金券