逆向学习crackme160题-002-abexcm5的write up

简介: 逆向学习crackme160题-002-abexcm5的write up

声明

本笔记都是自己在2022年学逆向的时候的练习笔记,其中所有代码和图片都是自己操作所截图,之前一直保存在本地,终于博客网站搭建好了所以就搬上来了,希望对学习的人有所帮助。

002-abexcm5 的 write up

1. 执行程序测试

可以看到这是一个输入注册码然后进行检测的问题,可见我们并不知道正确的注册码是合适是什么呢?但是根据它的提示信息要敏感,可以知道后面可以用来查找字符串。

1. 程序查壳

可见程序Not packed,这是没有壳的,所以可以直接进行调试。(TASM是Borland公司推出的汇编编译器。MASM宏汇编程序。FASM是一个x86体系处理器下的汇编语言编译器。)

2. 静态调试

  1. 首先将程序拖入32位IDA后先点击View(查看)——>Open subviews——>Strings,结果如下图:

解释:在这些关键字符串中既可以看到刚才的提示信息,还可以看到两个硬编码,可以猜测这很可能和注册码有关系。

  1. 查看输入表,点击View——>Open subviews——>Imports,结果如下:

解释:函数wsprintf [1] ()将一系列的字符和数值输入到缓冲区。

GetVolumeInformationA获取磁盘卷标
GetDlgItemText是C++中的函数,调用这个函数以获得与对话框中的控件相关的标题或文本。
GetModuleHandle功能是获取一个应用程序或动态链接库的模块句柄。
lstrcmpiA 对比字符串
lstrcatA 拼接字符串


  1. 跟踪关键字符串,地址sub_401056,可以看到关键的代码:如下图:


解释:如注释,这个程序的主要注册码的思路就是让用户输入和拼接后的字符出串对比,一致则跳转输出“Well Done!”的窗口,否则就是“Error!”弹窗。

注意:根据上面观察到的的输入表可以知道,程序大多数用到的都是WInAPI,所以它的函数调用约定应该是_stdcall的形式,复习函数调用约定我们知道:__cdecl:    C/C++默认方式,参数从右向左入栈,主调函数负责栈平衡。

__stdcall:          windows API默认方式,参数从右向左入栈,被调函数负责栈平衡。
也因此在回顾上面的拼接函数的时候,前面压入的参数是从后面(也就是右边)往前压的(也即是左边),函数最后得到的拼接结果也是将右边的拼接到左边的字符串后面。

3. 动态调试

  1. 寻找main函数

还记得运行时弹出的提示框也即是提示字符串,所以我们可以用OD查找参考文本字符串,然后直接双击进入,如下图:

前面静态调试已经看过注释了,所以上图的原理也是一样的。所以这里我们重点关注的是他的动态执行过程。


我们现在在0040106c加入了一个断点F2,然后直接执行程序F9,直到弹出提示框让我们输入注册码,我们假设输入“123456”,


然后点击Check检查,单步F8执行完00401078,也即执行过我们的GetDlgItemTextA获取我们输入的内容,这时候观察堆栈可以看到我们输入的内容就被压入进来了,如下图:


此时再单步执行完获取到卷标名,可见卷标名存到了地址为0040225c的地方,由于我的程序放在了C盘,默认是空的卷标名(其他盘或者卷标改名了就会或得卷标名字符串),如下图:


然后004010A8的函数就是拼接字符串到卷标名后面了,接下来就是给0040225C的地址储存的字符串前四个元素加1,并且循环了两次,也就是总共加了2,得到如下图:!

image-20220925153550833

004010D9最后再进行拼接,最后对比。。。

4. 暴力破解

验证逻辑是:生成序列号,通过与用户输入的比对来进行验证

暴力破解的思路是:修改跳转条件,修改标志寄存器

5. 程序复现

  1. 注册码的检验思路是:
    将一串硬编码拼接到获取到的卷标字符串后面储存为str1,然后通过循环将str1的前4个字节总共自加2,得到str2,最后再将str2拼接到另一串硬编码后面,就得到注册码。
#include <stdio.h>
#include <windows.h>
#include <string.h>
#define Max 100

int main()
{
  char str[Max] = "4562-ABEX";//初始化关键字符串
  char Str[Max] = "L2C-5781";
  char VolumeNameBuffer[Max] = { 0 };//初始化参数
  DWORD VolumeSerialNumber = 0;
  DWORD MaximumComponentLength = 0;
  DWORD FileSystemFlags = 0;

  GetVolumeInformationA(
    0,
    VolumeNameBuffer,
    0x32u,
    &VolumeSerialNumber,
    &MaximumComponentLength,
    &FileSystemFlags,
    0,
    0);
  strcat(VolumeNameBuffer, str);
    for (int i = 0; i < 4; i++)
  {
    VolumeNameBuffer[i] += 2;
  }

  strcat(Str, VolumeNameBuffer);
  puts(Str);
  system("pause");
  return 0;
}


相关文章
|
22天前
|
弹性计算 人工智能 架构师
阿里云携手Altair共拓云上工业仿真新机遇
2024年9月12日,「2024 Altair 技术大会杭州站」成功召开,阿里云弹性计算产品运营与生态负责人何川,与Altair中国技术总监赵阳在会上联合发布了最新的“云上CAE一体机”。
阿里云携手Altair共拓云上工业仿真新机遇
|
15天前
|
存储 关系型数据库 分布式数据库
GraphRAG:基于PolarDB+通义千问+LangChain的知识图谱+大模型最佳实践
本文介绍了如何使用PolarDB、通义千问和LangChain搭建GraphRAG系统,结合知识图谱和向量检索提升问答质量。通过实例展示了单独使用向量检索和图检索的局限性,并通过图+向量联合搜索增强了问答准确性。PolarDB支持AGE图引擎和pgvector插件,实现图数据和向量数据的统一存储与检索,提升了RAG系统的性能和效果。
|
19天前
|
机器学习/深度学习 算法 大数据
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
2024“华为杯”数学建模竞赛,对ABCDEF每个题进行详细的分析,涵盖风电场功率优化、WLAN网络吞吐量、磁性元件损耗建模、地理环境问题、高速公路应急车道启用和X射线脉冲星建模等多领域问题,解析了问题类型、专业和技能的需要。
2570 22
【BetterBench博士】2024 “华为杯”第二十一届中国研究生数学建模竞赛 选题分析
|
17天前
|
人工智能 IDE 程序员
期盼已久!通义灵码 AI 程序员开启邀测,全流程开发仅用几分钟
在云栖大会上,阿里云云原生应用平台负责人丁宇宣布,「通义灵码」完成全面升级,并正式发布 AI 程序员。
|
1天前
|
存储 人工智能 搜索推荐
数据治理,是时候打破刻板印象了
瓴羊智能数据建设与治理产品Datapin全面升级,可演进扩展的数据架构体系为企业数据治理预留发展空间,推出敏捷版用以解决企业数据量不大但需构建数据的场景问题,基于大模型打造的DataAgent更是为企业用好数据资产提供了便利。
152 2
|
19天前
|
机器学习/深度学习 算法 数据可视化
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
2024年中国研究生数学建模竞赛C题聚焦磁性元件磁芯损耗建模。题目背景介绍了电能变换技术的发展与应用,强调磁性元件在功率变换器中的重要性。磁芯损耗受多种因素影响,现有模型难以精确预测。题目要求通过数据分析建立高精度磁芯损耗模型。具体任务包括励磁波形分类、修正斯坦麦茨方程、分析影响因素、构建预测模型及优化设计条件。涉及数据预处理、特征提取、机器学习及优化算法等技术。适合电气、材料、计算机等多个专业学生参与。
1566 16
【BetterBench博士】2024年中国研究生数学建模竞赛 C题:数据驱动下磁性元件的磁芯损耗建模 问题分析、数学模型、python 代码
|
2天前
|
JSON 自然语言处理 数据管理
阿里云百炼产品月刊【2024年9月】
阿里云百炼产品月刊【2024年9月】,涵盖本月产品和功能发布、活动,应用实践等内容,帮助您快速了解阿里云百炼产品的最新动态。
阿里云百炼产品月刊【2024年9月】
|
21天前
|
编解码 JSON 自然语言处理
通义千问重磅开源Qwen2.5,性能超越Llama
击败Meta,阿里Qwen2.5再登全球开源大模型王座
920 14
|
16天前
|
人工智能 开发框架 Java
重磅发布!AI 驱动的 Java 开发框架:Spring AI Alibaba
随着生成式 AI 的快速发展,基于 AI 开发框架构建 AI 应用的诉求迅速增长,涌现出了包括 LangChain、LlamaIndex 等开发框架,但大部分框架只提供了 Python 语言的实现。但这些开发框架对于国内习惯了 Spring 开发范式的 Java 开发者而言,并非十分友好和丝滑。因此,我们基于 Spring AI 发布并快速演进 Spring AI Alibaba,通过提供一种方便的 API 抽象,帮助 Java 开发者简化 AI 应用的开发。同时,提供了完整的开源配套,包括可观测、网关、消息队列、配置中心等。
684 9
|
15天前
|
存储 监控 调度
云迁移中心CMH:助力企业高效上云实践全解析
随着云计算的发展,企业上云已成为创新发展的关键。然而,企业上云面临诸多挑战,如复杂的应用依赖梳理、成本效益分析等。阿里云推出的云迁移中心(CMH)旨在解决这些问题,提供自动化的系统调研、规划、迁移和割接等功能,简化上云过程。CMH通过评估、准备、迁移和割接四个阶段,帮助企业高效完成数字化转型。未来,CMH将继续提升智能化水平,支持更多行业和复杂环境,助力企业轻松上云。