【Crackme逆向分析365例-001】

   表哥是神,误落凡尘


说明:本篇练习是表哥逆向分析365系列的第1例,所使用的CrackMe本体来自于网站:https://crackmes.one/,您可在此网站通过作者名或本体名查询下载,也可从本贴中提供的网盘地址下载,其CrackMe本体信息如下所示:

  • 本体名称:[EASY] CrackMe
  • 本体作者:endofmarconia
  • 上传日期:2023-05-03
  • 适用平台:Windows
  • 难度【1-6】:1.2
  • 描述:本CrackMe专门为初学者制作,请破解用户名和密码以便访问程序。

1、本次练习所需软件及下载地址:

2、逆向分析之前的准备工作

2.1、将下载的CrackMe本体解压到某个空白的逆向分析文件夹下(最好是全英文路径),并确保能够正常运行(云盘下载已经附带了4个缺失的运行库,若在您的电脑上还是不能运行,请根据提示的库名在:https://cn.dll-files.com网站查询下载并保存到与CrackMe本体相同文件夹内)。

2.2、复制CrackMe本体文件[EASY] CrackMe.exe并重新命名为CM001.exe,保证原始CrackMe本体文件的备份,逆向分析时仅针对CM001.exe。

2.3、启动ExeinfoPE.exe,加载CM001.exe,根据ExeinfoPE的分析数据,手动列出文件信息如下:

  • 文件名称:exe
  • 壳:无壳(不需要脱壳,可直接进行分析)
  • 位数:64位程序(需要使用x64dbg调试器进行分析)
  • 编译器:Microsoft Visual C++ 2022
  • 子系统:控制台程序
  • 映像基地址:0x140000000
  • 重定位段:有(需要修改文件属性标志字段,使其运行时不再重定位)

2.4、启动HxD64.exe,加载CM001.exe,修改文件属性标志字段(从PE头偏移22个字节),将其值从0x22修改为0x23并保存文件,如图所示:

这样的话,映像基地址将固定在0x140000000,方便本次练习场景重现。

2.5、运行CM001.exe文件,随便输入用户名和密码后,程序出错了(错误信息为:Wrong username or password.),如下图所示:

3、针对CM001.exe文件进行爆破

3.1、思路:由于出现了错误信息,我们有理由相信,程序对输入的数据进行了某种计算,并且对计算结果进行了验证判断,以此决定显示正确或错误信息。利用此思路,以当前出错信息加载指令为基点,通过向上或向下来查找到正确的条件转移指令,然后修改这条指令,使其忽略验证结果,直接显示正确信息。

3.2、启动x64dbg.exe,在菜单中打开【选项】窗口,在【事件】选项中仅选择【入口断点】(若已经配置好了,可省略此步骤)。

3.3、根据经验,出错信息很可能以字符串的形式存储在常量数据段中,我们需要在代码段中定位出加载出错信息字符串的指令地址。现在点击【打开文件】按钮,加载CM001.exe文件,此时RIP指向了程序入口点地址:0x1400114EC,点击【搜索字符串】按钮,在【引用】页面底部的搜索框中输入:wrong username or password进行过滤后,共找到1处指令地址:0x140018795。鼠标左键双击地址,转到【CPU】页面的相关位置,以此条指令为基点(lea rdx,[140023908]),向上查找最近的条件转移指令,其指令地址为:0x140018793(在本例中,其与基点紧挨着),如图所示:

3.4、既然基点地址(0x140018795)是显示错误信息的指令分支,那么可以推测,红线尽头所指的地址(0x1400187DC)就是显示正确信息的指令分支了,我们只要修改地址(0x140018793)处的指令,使其忽略条件判断,直接转移到地址(0x1400187DC)处,就可以完成本次的爆破过程。

3.5、鼠标左键单击地址(0x140018793),按空格键弹出汇编窗口,将je修改为jmp,其余信息保持不变,然后按【确定】按钮使修改生效,如图所示:

点击【补丁】按钮或Ctrl+P打开补丁窗口,点击【修补文件】按钮将修改另存为:CM001-已爆破.exe文件,如图所示:

3.6、退出所有程序,运行CM001-已爆破.exe文件,看看爆破效果如何,如图所示:

效果很明显,同样的输入数据,不同的输出结果,说明爆破成功。

4、针对CM001.exe文件进行追码

4.1、思路:在上面的爆破过程中,我们已经定位出了显示成功信息的指令分支地址:0x1400187DC,所以我们可以从此地址进行反推,看看有哪些转移指令与此相关,从而推断出关键call,然后对这些关键call进行详细分析,理解其针对输入数据的计算逻辑以便追码。

4.2、启动x64dbg.exe,点击【打开文件】按钮,加载CM001.exe文件,此时RIP指向了程序入口点地址:0x1400114EC,按Ctrl+G打开地址转移窗口,输入:0x1400187DC,如图所示:

然后按【确定】按钮,这时可通过左侧红线观察到指令来源路线有2条,在源头附件还发现了2个call指令(地址分别为:0x140018789和0x140018772),这2个指令就是关键call了,分别在这2个地址上按F2键下执行断点,如图所示:

4.3、按F9键运行程序,然后在程序控制台界面上输入用户名(SMKB)和密码(123456789),回到调试器界面,这时已经中断在第1个关键call上,我们先看一下函数的参数是什么(64位程序规则,前4个参数通过rcx、rdx、r8、r9传递,多于4个的参数通过堆栈传递),鼠标右键点击寄存器(rcx和rdx),选择【在内存窗口中转到】(内存1和内存2),通过观察内存窗口发现,rcx指向我们输入的用户名SMKB,rdx指向字符串kanyefan,(注意:其实真实指向的是某个结构指针,但也无所谓了,因为结构中包含了我们需要关注的字符串,能理解就行),据此推测,kanyefan可能是超级用户,不需要判断密码。

4.4、按F9键继续运行,中断在第2个关键call上,使用同样的操作方法观察内存窗口发现,rcx指向我们输入的密码123456789,而rdx这次指向了堆中的一个地址:0x4376E0,再次在内存窗口中转到这个堆地址,发现字符串kanyewestlover911,我们据此大胆推测,这是一个超级密码。

4.5、到此为止,已经不需要具体分析汇编代码了,可以确定:如果输入的用户名是kanyefan,那么密码可以随便了,否则,输入的密码必须是kanyewestlover911,在这种情况下就不会出现错误信息了,我们试一试吧,如图所示:

果然如此,看来作者是kanye west(坎耶-维斯特)的脑残粉啊。

PS:本贴到此结束,若转载请保留全部信息,期待我们在下一贴再见。

Crackme逆向分析365例-001的更多相关文章

  1. IM通信协议逆向分析、Wireshark自定义数据包格式解析插件编程学习

    相关学习资料 http://hi.baidu.com/hucyuansheng/item/bf2bfddefd1ee70ad68ed04d http://en.wikipedia.org/wiki/I ...

  2. Android逆向分析(2) APK的打包与安装背后的故事

    前言 上一次我们反编译了手Q,并遇到了Apktool反编译直接crash的问题,虽然笔者很想在这次解决这个问题,但在解决途中,发现该保护依赖于很多知识,所以本次先插入一下,正所谓知其然知其所以然,授之 ...

  3. Android逆向分析(2) APK的打包与安装

    http://blog.zhaiyifan.cn/2016/02/13/android-reverse-2/ 2/18日增加对aidl和java编译的描述. 前言 上一次我们反编译了手Q,并遇到了Ap ...

  4. RE-1 逆向分析基础

    逆向分析基础 0x01-0x0C 本笔记使用汇编指令为x86架构下汇编指令,ARM架构汇编指令不做介绍 0x01. 关于RE 逆向工程(Reverse Engineering RE) 逆向分析方法: ...

  5. 逆向分析objc,所有类的信息都能在动态调试中获取。

    因为objc是动态绑定的,程序运行时必须知道如何绑定,依靠的就是类描述.只要知道类描述是如何组织的就可以获取一切有用的信息.不知道是幸运还是不幸,这些信息全部都在运行的程序中.即使没有IDA这样的工具 ...

  6. 病毒木马查杀实战第012篇:QQ盗号木马之逆向分析

    前言 在本系列的文章中,对每一个病毒分析的最后一个部分,若无特殊情况,我都会采用逆向分析的手段来为读者彻底剖析目标病毒.但是之前的"熊猫烧香"病毒,我用了三篇文章的篇幅(每篇250 ...

  7. 路由器逆向分析------MIPS系统网络的配置(QEMU)

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/69378333 MIPS系统网络的配置  使用QEMU 模拟正在运行的MIPS系统并 ...

  8. 技术分享:逆向分析ATM分离器

    文章内容仅供技术交流,请勿模仿操作! 背景(作者) 每一次外出时, Elizabeth和我总是格外的小心,同时把我们身上的钱藏在特殊的皮带上面,这样还不够,我们还采取了“狡兔三窟”的方式来藏身上带的银 ...

  9. C++反汇编与逆向分析技术揭秘

    C++反汇编-继承和多重继承   学无止尽,积土成山,积水成渊-<C++反汇编与逆向分析技术揭秘> 读书笔记 一.单类继承 在父类中声明为私有的成员,子类对象无法直接访问,但是在子类对象的 ...

  10. TI(德州仪器) TMS320C674x逆向分析之一

    一.声明 作者并不懂嵌入式开发,整个逆向流程都是根据自身逆向经验,一步一步摸索出来,有什么错误请批评指正,或者有更好的方法请不吝赐教.个人写作水平有限,文中会尽量把过程写清楚,有问题或是写的不清楚的地 ...

随机推荐

  1. 关于Electron环境配置与一些相关的错误解决

    安装步骤: 1.安装NVM: 这个是nodejs的版本管理器,github上有一个nvm for windows,由于不能的nodejs的版本问题,可以自由进行切换. 下载地址:https://git ...

  2. python-GUI-tkinter之excel密码破解工具

    python gui 之熟悉tkinter部分控件使用.一个简单的excel暴力密码破解,核心很简单,基本就是一个函数外面加了GUI,写的很啰嗦,希望大家可以在优化改良下,主要是为了再熟悉下tkint ...

  3. 记录一次mybatis pagehelper count order by 不生效

    https://sample.blog.csdn.net/article/details/119216433?spm=1001.2101.3001.6650.5&utm_medium=dist ...

  4. vue使用阿里oss上传

    1.首先用包管理工具 npm install ali-oss --S 下载oss依赖包 2.在util文件里创建util.js文件,在该文件写入 export default { getClient: ...

  5. Java笔记第八弹

    设置和获取线程名称 //方法 void setName(String name);//将此线程的名称更改为等于参数name String getName();//返回此线程的名称 public sta ...

  6. Python学习笔记--数据可视化的开头

    JSON数据格式的转换 示例: 若是有中文数据,可以在data后面加上ensure_ascii=False pyecharts模块 网站:https://gallery.pyecharts.org(有 ...

  7. linux服务器已知目录下根据特定字符串查找文件

    很久不用的一个项目的测试环境迁移后,启动项目时,发现日志一直报错,在opt/下缺少一个jar包,思路是:查看配置文件,想找到具体是哪个配置文件写了需要用到这个jar包,然后修改到正确路径下重新启动尝试 ...

  8. Android 音视频 - MediaCodec 编解码音视频

    我们知道 Camera 采集回传的是 YUV 数据,AudioRecord 是 PCM,我们要对这些数据进行编码(压缩编码),这里我们来说在 Android 上音视频编解码逃不过的坑-MediaCod ...

  9. GUI编程--1

    GUI编程--1 GUI是什么 (Graphical User Interface),即用户图形界面编程. 怎么玩 平时怎么运用 组件 窗口 弹窗 面板 文本框 列表框 按钮 图片 监听事件 1.简介 ...

  10. Gateway 网关

    Spring Cloud Gateway 作为 Spring Cloud框架的第二代网关,在功能上要比 Zuul更加的强大,性能也更好.随着 Spring Cloud的版本迭代,Spring Clou ...