终于算是慢慢的爬入了逆向的大门,梦想虽远,坚持就好

记第一次简单的逆向过程

首先贴出CrackMe的源码,很简单的一个if而已

#include <stdio.h>
#inclued <stdlib.h>int main(int argc, char **argv)
{   char passWord[8] = {"pass"};char word[8] ;gets(word);if(strncmp(passWord, word, 8) == 0){printf("authorized !\n");}return 0;
}

代码很简单,输对了就打印
(当然这个还存在缓冲区溢出,这个后面讲)

开始Crack

因为我们的EXE文件是标准的PE( Portable Executable )
所以我们使用IDA(静态分析调试工具)对文件进行查看
IDA 相当与我们的地图一样的作用

这个就是我们的IDA 加载之后的程序 ,当然是汇编,的形式
第一行可以看到,是main的入口

很多人都是认为程序是从main函数开始 的,其实不然,程序真正的入口我们称之为OEP(original entry point)

然后我们向下读代码,
30 地址之前的就是我们的变量地址分配,

ebp,exp也就是我们常提起的bp 和 sp 的extend版本
31到36是我们的栈初始化

  • 30 基址压栈
  • 31 基址赋值
  • 33 对栈指针做掩码??(没弄懂这个作用)
  • 36 对栈顶指针做减法,即分配栈空间 20*16 个字节
  • 39 call _main (这里才是真正的进入了main函数中去)

39往后main里

  • 3E 就是变量赋值 可以看到 str1的值是 -8h (这里就很好解释了栈地址是如何向低地址增长的),后面的字符串当时我还没反应过来,其实是端序的问题,在Win里 都是大端格式,所以向下增长 的时候字符串要反过来
  • 46 这里就是对字符串后面添加 \0 作为结束符
  • 4E ~52 原理同上分配buffer(IDA已经自动注释,美哉)
  • 55 就是调用我们的gets函数
  • 5A~6E 就是strncmp的参数配置,str1 str2 maxcount这三个
  • 71 调用strncmp函数
  • 76 这个比较重要 这里的显然是不改变eax的值的,那么他的作用是什么呢? 就是设置flag寄存器的状态

    test 的作用不同于 cmp ,cmp 相当于算数相减,而test 是逻辑相与

    所以这里只有eax为0h的时候 才会出现 设置Z位为1

  • 78这里就是我们核心的一句! jnz就是不为零就调转,而下面就是我们的puts 得到的函数,所以要想成功破解,这里的就必须不能跳转!
  • 7A 字符串压栈,
  • 81 打印
  • 86~8B 就是我们的return 0了

    eax 默认的就是传递的第一个参数

到此程序的静态解读告一段落


下面就是我们使用ollydbg进行动态调试,或者直接使用UE对pe文件进行修改(直接改jnz的汇编码即可) Ollydbg: ![这里写图片描述](https://img-blog.csdn.net/20170901001708367?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveno3MDkxOTY0ODQ=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast) (2333 ollydbg 看着还是挺帅的) 这里的地址,可以在ida里面找到; 下面就是修改那个jnz了,反正什么都行

  • jz 刚好相反
  • nop 啥都不动向下执行

那就Nop吧 随便改一改

可见我们的authorized已经打印出来了


本次简单逆向也是告一段落了

附加

下面附件一点:

* 缓冲区溢出问题*
因为上面刚刚好有汇编的代码,这样解释起来就是变得简单了
可以看到,栈的空间分配是连续的,所以我的缓冲区给的大小是8 那么这样的话,他地址会基于栈地址来减去八个字节,然而,gets() 函数是不会判断缓冲区大小的,所以会把我们的输入直接写到地址。


所以,漏洞就产生了,
str1,str2 是地址连续的两个8字节的空间,那么我们只要输入一个16字节对称的字符串,就可以完美绕过!

效果如上!

写在最后的话

送给大家一句话吧: 鸿鹄志高而难酬,终而还是妥协泯然众人
“”小镇青年何必远方?“” 于是我走出了这个熟悉的地方

逆向入门--第一次的HelloWorld相关推荐

  1. 010 Android之逆向入门

    文章目录 Android APK文件结构 META-INF res AndroidManifest.xml classes.dex resources.arsc lib Assets Android ...

  2. SO逆向入门实战教程一:OASIS

    文章目录 一.前言 二.准备 三.Unidbg模拟执行 四.ExAndroidNativeEmu 模拟执行 五.算法分析 六.尾声 一.前言 这是SO逆向入门实战教程的第一篇,总共会有十三篇,十三个实 ...

  3. java jni helloword_JNI入门教程之HelloWorld篇

    JNI入门教程之HelloWorld篇 来源:互联网  宽屏版  评论 2008-05-31 09:07:11 本文讲述如何使用JNI技术实现HelloWorld,目的是让读者熟悉JNI的机制并编写第 ...

  4. 【Data URL】【RE】【bugku】逆向入门writeup

    在写wp之前先来了解一下Data URL是什么 Data URL 在浏览器向服务端发送请求来引用资源时,一般浏览器都有同一时间并发请求数不超过4个的限制.所以如果一个网页需要引用大量的服务端资源,就会 ...

  5. [BUGKU] [REVERSE] 逆向入门

    [BUGKU] [REVERSE] 逆向入门 例行PEID查壳,发现不是有效的PE文件 winhex打开 data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA ...

  6. 攻防世界逆向入门题之open-source

    攻防世界逆向入门题之open-source 继续开启全栈梦想之逆向之旅~ 这题是攻防世界逆向入门题的open-source 下载附件得到源码: #include <stdio.h> #in ...

  7. 攻防世界逆向入门题之流浪者

    攻防世界逆向入门题之流浪者 继续开启全栈梦想之逆向之旅~ 这题是攻防世界逆向入门题的流浪者 下载附件,照例扔入exeinfope中查看信息: 32位PE文件无壳,照例扔入ida32中查看伪代码: 是没 ...

  8. JNI入门学程之HelloWorld篇

    如果你对Jni不甚懂得,不晓得Jni是作什么的,如何树立一个基础的jni程序,或允许以参考下面下面这些文章: 应用VC++6.0实现JNI的最简单的例子 JNI入门学程之HelloWorld篇 SUN ...

  9. 攻防世界逆向入门题之no-strings-attached

    攻防世界逆向入门题之no-strings-attached 继续开启全栈梦想之逆向之旅~ 这题是攻防世界逆向入门题的no-strings-attached 下载附件: 扔入Exepeinfo中查壳和其 ...

最新文章

  1. Python培训分享:Python发展前景怎么样?
  2. 1080解析 芒果tv_国内主流视频平台解析下载观看
  3. 好文推荐 | 缓存与数据库一致性问题深度剖析 (修订)
  4. POJ 1287 Prim算法模板
  5. 微软将推出桌面虚拟化软件
  6. ECSHOP 订单状态 记录
  7. SpringBoot基础篇日志管理之默认配置
  8. Python入门基础学习记录(二)汇率案例学习记录
  9. 我发起了一个 .Net Core 平台上的 分布式缓存 开源项目 ShareMemory 用于 取代 Redis...
  10. 拟合函数、曲线拟合有这个网站足够了
  11. 基于 Flink、ClickHouse 的舆情分析系统:系统详细设计说明书
  12. 社交网络分析——影响力最大化(附带python例子实现)
  13. python卸载清理注册表_使用Python操作注册表
  14. 2020.7.25 PAT甲级7-2 The Judger (25分)
  15. bootstrap typeahead实现模糊查询功能
  16. 趣味测试类微信小程序
  17. 30天自制操作系统(day10)
  18. 对于20+想转行程序员但非常迷茫的人的一些建议
  19. 51nod1462 树据结构
  20. Netty框架之Selector使用详解

热门文章

  1. html+id选择器如何使用方法,id选择器_HTML+CSS前端基础知识教程_腾讯视频
  2. 位运算的应用和分治法在二进制中的应用
  3. 关于服务器的入门知识整理
  4. Composer切换到Laravel-China 镜像
  5. windows下使用docker(一)—— 安装
  6. ldap数据库--ODSEE--复制协议
  7. ie 9 渐变背景色兼容问题
  8. F - 娜娜梦游仙境系列——多民族王国
  9. LeetCode-Remove Duplicates from Sorted Array-从有序数组移除重复-简单逻辑
  10. tcpdump使用实例——基于ip统计流量