逆向project实战--Acid burn

0x00 序言

这是第二次破解 crackme 小程序,感觉明显比第一次熟练。破解过程非常顺利,差点儿是分分钟就能够找到正确的 serial,可是我们的目标是破解计算过程。以下将具体介绍。

0x01 初次执行

刚開始拿到 crackme 先执行程序。看看有哪些明显的特征。或者有哪些任务须要完毕:
这里写图片描写叙述
双击程序后弹框,显然第一个任务就是把这个框框弄掉,我们继续执行:
这里写图片描写叙述

这个小程序比上次的要复杂,有两个 serial ,我们先看看左边的:

这里写图片描写叙述
不出意外。猜错了,有明显的弹框和失败字符串作为特征。我们接着看右边的:
这里写图片描写叙述

不出意外,再次失败,依旧是弹框。

0x02 開始调试

1、明白目标
通过上面的执行分析,我们须要干掉第一个弹框,以及兴许的两个 serial 。同一时候我们发现三者的共同特征为弹框。所以首先拦截弹框函数:
右键代码区选择 “serach for” => “All intermodules calls”:
这里写图片描写叙述

在新窗体中输入 messageboxa,右键。选择”Set breakpoint on every call to MessageBoxA”:
这里写图片描写叙述

这样我们就给全部调用弹框函数的地方下了断点,接着回到代码区执行程序。

2、调用者
按 F9 执行到弹框函数处,我们发现此时的栈顶就是第一次弹框时的字符串的地址,于是我们须要找到那个调用弹框函数的函数。叫做调用者。

这里我们往上看,找到当前这个函数的入口并下断点:
这里写图片描写叙述

然后我们 Ctrl + F2 又一次加载程序。F9 执行到刚才下断点的入口:
这里写图片描写叙述
此时栈顶就是调用者执行call指令时保存的返回点。我们在代码区中查找这个地址(42F79C),注意单击代码区,按 Ctrl + G 进行查找:
这里写图片描写叙述

看见了吗,就是这个函数,仅仅有几句代码。以下我们就来消灭它。

3、去掉弹框
调用了函数才会弹框,我们的想法就是让它不调用函数,那么直接让函数返回是最简单的方式。于是我们把函数入口处的第一条指令改成RETN 就可以:
单击指令,按一下空格键能够改动:
这里写图片描写叙述

此时我们能够把改动保存到文件里:
右键指令,选择 “Copy to executable” => “selection”:

这里写图片描写叙述

在新窗体中右键选择 “Save file”:
这里写图片描写叙述

然后保存:
这里写图片描写叙述

执行新的程序发现第一次的弹框成功消失。

4、破解右側serial
接下来我们转到右边的 serial,输入随意字符串。然后点击button:
我们发现程序停在了弹框函数的入口:
这里写图片描写叙述

此时栈顶的值就应该是上级函数的返回地址:
这里写图片描写叙述

我们继续在代码区搜索此地址(42F509):
这里写图片描写叙述

发现了吗,有推断条件。能够看出是字符串比較函数,我们设置断点。F9 执行究竟后又一次点击button:
这里写图片描写叙述

程序停在了断点处。看看栈区。发现给函数的參数中的字符串:
这里写图片描写叙述

破解起来确实非常轻松,字符串是固定的:Hello Dude!
这里写图片描写叙述

5、破解左側 serial
我们继续执行,转到左側。输入随意字符串后点击button:
依据刚才的方式找到调用者返回地址:42FB37
这里写图片描写叙述

查找代码区:
这里写图片描写叙述

发现字符串比較函数并下断点。此时查看栈区:
这里写图片描写叙述

再往上看代码区:
这里写图片描写叙述

我们能够猜測出 serial 是 “CW-” + 某个数 + “CRACKED”,中间的数是我们须要找的目标。

6、真实的目标
我们给 serial 生成函数的入口下一个断点,然后又一次点击button执行到断点处 F8 单步走:
这里写图片描写叙述

中间发现两段代码:

EAX = name[0] * 7 + name[1] * 0x10;
EAX = name[3] * 0xB + name[2] * 0xE

继续向下执行,发现另外一段代码:
这里写图片描写叙述
函数入口的以下有一句不起眼的代码:
这里写图片描写叙述

两个结合起来就是:

EAX = name[0] * 0x29 * 2;

后面我们发现调用字符串输出函数之前 EAX 的值被置为那个内存单元的值:
这里写图片描写叙述

继续往下调试结果就非常明显了,第三段代码才是我们要的。

0x03 双重检測

1、简单粗暴的 C语言
代码例如以下:

#include <stdio.h>int main()
{char name[1024];printf("Input your name: ");scanf("%s", name);printf("Serial: CW-%d-CRACKED\n", name[0] * 0x29 * 2);return 0;
}

执行结果:
这里写图片描写叙述

2、原程序检验
这里写图片描写叙述

0x04 总结

这个小程序左边的 serial 和 name 的第一个字符有关,而且字符串长度不能小于4.

转载于:https://www.cnblogs.com/yangykaifa/p/7396298.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/253723.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PyCharm使用技巧(六):Regullar Expressions的使用

2019独角兽企业重金招聘Python工程师标准>>> PyCharm v2018.2最新版本下载 使用正则表达式查找和替换文件中的文本 示例代码 使用正则表达式查找和替换字符串 假设您想用扩展标记<title> </title>替换元素&#xff08;title&#xff09;中的属性&#x…

jQuery笔记总结

来源于&#xff1a;http://blog.poetries.top/2016/10/20/review-jQuery/ http://www.jianshu.com/p/f8e3936b34c9 首先&#xff0c;来了解一下jQuery学习的整体思路 第一节 jQuery初步认知 jQuery概述 JQuery概念 javascript概念 基于Js语言的API和语法组织逻辑&#xff0c;通…

芯片生产流程

每个半导体产品的制造都需要数百个工艺&#xff0c;泛林集团将整个制造过程分为八个步骤&#xff1a;晶圆加工-氧化-光刻-刻蚀-薄膜沉积-互连-测试-封装。 一、晶圆加工 所有半导体工艺都始于一粒沙子&#xff01;因为沙子所含的硅是生产晶圆所需要的原材料。晶圆是将硅(Si)或砷…

GRE Sub math 报名

Step1 注册ETS帐号 Step2 登录帐号&#xff0c;点击Register/Find Test Centers, Dates Step3 按照提示查询考场 如果没有结果而是出现了如下提示&#xff0c;意味着这个地方没有考位了&#xff0c;需要选择其他地方的考位 Step 4 接下来就和GRE general test的过程一样了&…

示例解读 Python 2 和 Python 3 之间的主要差异

开发四年只会写业务代码&#xff0c;分布式高并发都不会还做程序员&#xff1f; 每门编程语言在发布更新之后&#xff0c;主要版本之间都会发生很大的变化。 在本文中&#xff0c;Vinodh Kumar 通过示例解释了 Python 2 和 Python 3 之间的一些重大差异&#xff0c;以帮助说明…

数字后端——时钟树综合

在数字集成电路设计中&#xff0c;时钟信号是数据传输的基准&#xff0c;它对于同步数字系统的功能、性能和稳定性起决定性作用&#xff0c;所以时钟信号的特性及其分配网络尤被人们关注。时钟信号通常是整个芯片中有最大扇出、通过最长距离、以最高速度运行的信号。时钟信号必…

52次课(mysql用户管理、常用sql语句、 mysql数据库备份恢复)

MySQL创建用户以及授权 默认用户是root用户&#xff0c;不可能所有人员都用root用户&#xff0c;创建用户防止误删除&#xff0c;因为mysql里边有多个库每个库里有很多表&#xff0c;所以需要给单独的用户做一些授权我只需要它对某一个数据库有权限&#xff0c;或者说对某个数据…

20145225 《信息安全系统设计基础》第14周学习总结

第九章 虚拟存储器 虚拟存储器是计算机系统最重要的概念之一&#xff0c;它是对主存的一个抽象 三个重要能力&#xff1a; 它将主存看成是一个存储在磁盘上的地址空间的高速缓存&#xff0c;在主存中只保存活动区域&#xff0c;并根据需要在磁盘和主存之间来回传送数据&#xf…

数字后端——布线

布线是继布局和时钟树综合之后的重要物理实施任务&#xff0c;其内容是将分布在芯片核内的模块、标准单元和输入输出接口单元( I /O pad&#xff09;按逻辑关系进行互连&#xff0c;其要求是百分之百地完成它们之间的所有逻辑信号的互连&#xff0c;并为满足各种约束条件进行优…

streamsets 集成 minio s3测试

具体streamsets crate 集成可以参考 streamsets crate 以下文档只关注minio 集成的配置 minio 服务 搭建 具体搭建参考&#xff1a; https://www.cnblogs.com/rongfengliang/p/9197315.html 创建bucket &#xff08;crate 集成使用&#xff09; 测试的csv 文件从https://www.s…

【codecombat】 试玩全攻略 第十四关 已知敌人

第十四关 已知敌人 在这一关里&#xff0c;我们的英雄获得了一副可以看见敌人的眼镜&#xff0c;所以他很强势的学会了“发现敌人”的技能。 hero.findNearestEnemy()命令&#xff0c;单词多了&#xff0c;首字母都要大写了&#xff0c;不然分不出来。玩过wow的小伙伴用过 宏命…

数字后端——信号完整性分析

随着光刻和集成电路制造工艺的不断进步&#xff0c;以及芯片的特征尺寸从深亚微米到纳米的迅速采用&#xff0c;人们一方面因为芯片的功能极大提高而受益&#xff0c;另一方面&#xff0c;当逻辑门的沟道长度减小时&#xff0c;门的开关时间会减小&#xff0c;这意味着输出驱动…

CMOS图像传感器——TDI CIS

一、面阵与线阵图像传感器 人们在日常生活中见到的相机大多基于普通的面阵图像传感器,这种相机多用来拍摄静止的物体。即使用它们來拍摄运动的物体,也仅仅是缩短了相邻两次拍摄的时间间隔,无需对所拍摄图像进行额外操作,对物体的运动方向和速度也没有限定条件。 除此之外,…

做好数据挖掘模型的9条经验总结

爱数据学习社 welcome数据挖掘是利用业务知识从数据中发现和解释知识(或称为模式)的过程&#xff0c;这种知识是以自然或者人工形式创造的新知识。当前的数据挖掘形式&#xff0c;是在20世纪90年代实践领域诞生的&#xff0c;是在集成数据挖掘算法平台发展的支撑下适合商业分析…

数字后端——低功耗设计物理实施

一、低功耗设计方案综述 为了实现集成电路的低功耗设计目标&#xff0c;我们需要在系统设计阶段就采用低功耗设计方案&#xff0c;因为随着设计流程的逐步推进&#xff0c;到了芯片设计实现阶段&#xff0c;降低芯片功耗的方法将越来越少&#xff0c;可节省功耗的百分比将不断下…

H5项目开发分享——用Canvas合成文字

以前曾用Canvas合成、裁剪、图片等《用H5中的Canvas等技术制作海报》。这次用Canvas来画文字。 下图中“老王考到驾照后”这几个字是画在Canvas上的&#xff0c;与在PS中打入的字非常接近&#xff0c;毫无违和感。 前面一段时间也在研读JavaScript设计模式相关的知识&#xff0…

CMOS图像传感器——SNR计算

图像质量评价在计算机视觉,人工智能,高清视频传输上面有很广泛的应用。目前,图像质量评价主要分为三个方向,有参考图像的质量评价,半参考的图像质量评价,以及无参考的图像质量评价。许多时候,我们利用CIS采集的RAW DATA本身就是含噪信号,因为我们往往不知道感兴趣的像素…

Java this 关键字的用法

this 关键字的用法 this 在类中就是代表当前对象&#xff0c;可以通过 this 关键字完成当前 对象的成员属性、成员方法和构造方法的调用。 那么何时用 this? 当在定义类中的方法时&#xff0c;如果需要调用该类对象&#xff0c;就可以用 this 来表示这个对象。也就是说&#x…

数字图像处理——中值滤波及其改进算法

一、算法介绍 中值滤波器是非线性滤波器的一个例子&#xff0c;它在保留图像特征方面非常有效。 但是&#xff0c;滤波器的窗口大小直接影响中值滤波器的性能。 较小的窗口保留了特征&#xff0c;但会导致噪声抑制的减少。 在较大窗口的情况下&#xff0c;噪声抑制很高&#xf…

环信快速集成,以及实际集成中遇到的坑

一.pod集成遇到的问题 1.直接pod 安装 pod EaseUI, :git > https://github.com/easemob/easeui-ios-hyphenate-cocoapods.git 在这个过程中&#xff0c;如果你pod已经安装了sdwebimage&#xff0c;mjrefresh等他自身包含的三方&#xff0c;就需要在你的podfile里面把这个给删…