Crackme逆向分析365例-001
【Crackme逆向分析365例-001】
表哥是神,误落凡尘
说明:本篇练习是表哥逆向分析365系列的第1例,所使用的CrackMe本体来自于网站:https://crackmes.one/,您可在此网站通过作者名或本体名查询下载,也可从本贴中提供的网盘地址下载,其CrackMe本体信息如下所示:
- 本体名称:[EASY] CrackMe
- 本体作者:endofmarconia
- 上传日期:2023-05-03
- 适用平台:Windows
- 难度【1-6】:1.2
- 描述:本CrackMe专门为初学者制作,请破解用户名和密码以便访问程序。
1、本次练习所需软件及下载地址:
- 十六进制编辑器:HxD64,版本:5.0.0,下载地址:https://www.123pan.com/s/egPeVv-vrLQ3.html
- PE文件信息观察器:ExeinfoPE,版本:0.7.7,下载地址:https://www.123pan.com/s/egPeVv-drLQ3.html
- 动态调试器:x32dbg/x64dbg,版本:2023-04-30,下载地址:https://www.123pan.com/s/egPeVv-TrLQ3.html
- CrackMe本体及附件,版本:2023-05-03,下载地址:https://www.123pan.com/s/egPeVv-S8LQ3.html
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的更多相关文章
- IM通信协议逆向分析、Wireshark自定义数据包格式解析插件编程学习
相关学习资料 http://hi.baidu.com/hucyuansheng/item/bf2bfddefd1ee70ad68ed04d http://en.wikipedia.org/wiki/I ...
- Android逆向分析(2) APK的打包与安装背后的故事
前言 上一次我们反编译了手Q,并遇到了Apktool反编译直接crash的问题,虽然笔者很想在这次解决这个问题,但在解决途中,发现该保护依赖于很多知识,所以本次先插入一下,正所谓知其然知其所以然,授之 ...
- Android逆向分析(2) APK的打包与安装
http://blog.zhaiyifan.cn/2016/02/13/android-reverse-2/ 2/18日增加对aidl和java编译的描述. 前言 上一次我们反编译了手Q,并遇到了Ap ...
- RE-1 逆向分析基础
逆向分析基础 0x01-0x0C 本笔记使用汇编指令为x86架构下汇编指令,ARM架构汇编指令不做介绍 0x01. 关于RE 逆向工程(Reverse Engineering RE) 逆向分析方法: ...
- 逆向分析objc,所有类的信息都能在动态调试中获取。
因为objc是动态绑定的,程序运行时必须知道如何绑定,依靠的就是类描述.只要知道类描述是如何组织的就可以获取一切有用的信息.不知道是幸运还是不幸,这些信息全部都在运行的程序中.即使没有IDA这样的工具 ...
- 病毒木马查杀实战第012篇:QQ盗号木马之逆向分析
前言 在本系列的文章中,对每一个病毒分析的最后一个部分,若无特殊情况,我都会采用逆向分析的手段来为读者彻底剖析目标病毒.但是之前的"熊猫烧香"病毒,我用了三篇文章的篇幅(每篇250 ...
- 路由器逆向分析------MIPS系统网络的配置(QEMU)
本文博客地址:http://blog.csdn.net/qq1084283172/article/details/69378333 MIPS系统网络的配置 使用QEMU 模拟正在运行的MIPS系统并 ...
- 技术分享:逆向分析ATM分离器
文章内容仅供技术交流,请勿模仿操作! 背景(作者) 每一次外出时, Elizabeth和我总是格外的小心,同时把我们身上的钱藏在特殊的皮带上面,这样还不够,我们还采取了“狡兔三窟”的方式来藏身上带的银 ...
- C++反汇编与逆向分析技术揭秘
C++反汇编-继承和多重继承 学无止尽,积土成山,积水成渊-<C++反汇编与逆向分析技术揭秘> 读书笔记 一.单类继承 在父类中声明为私有的成员,子类对象无法直接访问,但是在子类对象的 ...
- TI(德州仪器) TMS320C674x逆向分析之一
一.声明 作者并不懂嵌入式开发,整个逆向流程都是根据自身逆向经验,一步一步摸索出来,有什么错误请批评指正,或者有更好的方法请不吝赐教.个人写作水平有限,文中会尽量把过程写清楚,有问题或是写的不清楚的地 ...
随机推荐
- 大数据组件对应Ranger插件的选择
在都是开源组件的前提下,一般需要我们多关注到组件和插件的版本和类型选择. 参考 https://zhuanlan.zhihu.com/p/370263573 https://www.bookstack ...
- 算法学习01—Java底层的正整数与负整数
算法学习01 - Java 底层的正整数与负整数 本节课学到的知识 编写一个方法,打印出 int 类型数字的二进制长什么样 为什么 int 类型的最大值是 2^32 - 1,最小值是 -2^32 负整 ...
- 惰性载入(函数)-跟JS性能有关的思想
一.惰性载入概念: 惰性.懒惰.其实跟懒惰没有关系,就是图省事,把没意义的事少做.不做. 惰性载入函数:函数执行时会根据不同的判断分支最终选择合适的方案执行,但这样的分支判断仅会发生一次,后面的其他同 ...
- ServletConfig接口介绍
前言: Servlet 容器初始化 Servlet 时,会为这个 Servlet 创建一个 ServletConfig 对象,并将 ServletConfig 对象作为参数传递给 Servlet .通 ...
- 集成电路仿真器(SPICE)的实现原理
本文系统地介绍类SPICE集成电路仿真器的实现原理,包括改进节点分析(MNA).非线性器件建模.DC/AC分析.时域/(复)频域仿真以及涉及的数值方法. 基于介绍的原理,实现了SPICE-like仿真 ...
- Android Studio报错--Build failed with an exception.
错误描述 在代码写好之后,点击运行,会爆出这样的错误,查看日志,发现是Manifest.xml文件爆出来的错误 具体解决 我的错误没有别的版本那么麻烦,就是我建立了Empty Activity之后,我 ...
- Windows xp 64 bit
Windows XP Professional x64 Edition with SP2 - VL (English) 详细信息 文件名 en_win_xp_pro_x64_with_sp2_vl_X ...
- 微前端框架single-spa子应用加载解析
作者:京东物流 宁冲 1 前言 什么是微前端? 微前端是指存在于浏览器中的微服务. 本文主要通过对微前端框架single-spa的基座应用加载子应用的single-spa-vue函数库进行分析,通过代 ...
- ECC(SM2) 简介及 C# 和 js 实现【加密知多少系列】
〇.简介 椭圆曲线密码学(Elliptic curve cryptography:ECC),一种建立公开密钥加密的演算法,基于椭圆曲线数学.利用有限域上椭圆曲线的点构成的 Abel 群离散对数难解性, ...
- golang 中的 cronjob
引言 最近做了一个需求,是定时任务相关的.以前定时任务都是通过 linux crontab 去实现的,现在服务上云(k8s)了,尝试了 k8s 的 CronJob,由于公司提供的是界面化工具,使用.查 ...