逆向学习crackme160题-014-Splish 的 write up

简介: 逆向学习crackme160题-014-Splish 的 write up

014-Splish 的 write up

1 . 程序的执行

程序执行的时候依旧会有一个烦人的Nag弹窗如下图:

有两种验证方式,第一种是Hard Coded模式,如下图:

第二种方式是name/serial模,如下图:

以上都是错误提示。

还有一些文件相关信息如下图:

2. 查壳

程序无壳

3. 分析

  1. 首先我们要来破解这个烦人的Nag弹窗,将程序拖入OD打开,按F9运行到程序的入口点00401000,然后F8单步执行到00401079这位置又一个函数调用call

执行这个函数call后Nag弹窗就出现了,所以这个函数就是Nag弹窗的调用函数,我们可以直接NOP掉这个函数,也可以F9进入这个函数主体,在头部第一行retn,也就是这个函数刚执行就返了什么也没做。最后右键——>复制到可执行文件——>选择,弹出一个新的页面后,继续右键——>保存文件。

  1. 分析第一种验证方式,Hard Coded模式,OD中智能搜索字符串如下图:

然后双击跟踪标黄的字符串,来到函数主体在0040135D下断点,然后让程序执行到这里,GetWindowsTextA是获取用户输入的内容储存到的地址为00403215,其中地址00401653保存的是硬编码字符串HardCoded,注释如下图:

所以第一种验证方式的硬编码序列号就是HardCoded

  1. 分析第二种验证方式,name/serial模式,搜索字符串后跟踪最后一个错误提示字符串,来到函数体往上看,然后在004015E4下断点,让程序执行到这,可以根据获取用户输入的API函数GetWindowTextA知道,00403242保存的是获取到的serial,00401693储存的是获取到的name。函数的返回值都是字符串的长度,具体过程如下图:


4. 注册机的编写

1.算法的分析:
首先name和serial的长度必须一致;

name通过一段处理:依次取name的每个字符,然后除以0xA后得的余数再和初始为0的充当循环计数器的ebx异或,然后再加2,再和0xA对比,如果大于等于0xA则要先减去0xA然后将得到得结果保存,如果小于则跳转结果直接保存,每次结果的保存都是将这一次的结果保存到上一次保存结果的后一个字节。

serial经过一段处理:依次取serial的每一字符,然后除以0xA后得到的余数直接保存,每次结果的保存都是将这一次的结果保存到上一次保存结果的后一个字节。

最后的对比算法就是讲name和serial的处理后的结果进行依次取单个字节的对比,如果都一样则顺序执行提示成功,反之则会在不一样得地方跳转提示错误。

2.注册机的编写思路
其实就是讲name进行算法复现之后,再将得到的结果进行serial逆向复现,得到的字符串就是注册码。

3.源代码如下:

#include<stdio.h>
#include<string.h>

void generatekey(static char name[], int length);
void dispose();
int main()
{
  dispose();
  system("pause");
  return 0;
}
void dispose()
{
  char name[50] = { 0 };
  int length = 0;
  char* p;
  p = &name;
  printf("please input you name:");
  scanf("%s", name);
  length = strlen(name);
  for (int i = 0; i < length; i++)
  {
    int n = 0;
    n = ((name[i] % 0xA) ^ i)+2;
    if (n >= 0xA)
    {
      *(p+i) = n - 0xA;
    }
    else
    {
      *(p + i) = n;
    }

  }
  generatekey(p,length);
  return 0;
}
void generatekey(char *p,int length)
{
  char serial[50] = { 0 };
  char* b;
  b = &serial;
  for (int i = 0; i < length; i++)
  {
    *(b+i) = *(p+i) + 3*0xA;  //由于注册码必须是字符类型所以0xA要乘以3
  }
  printf("you serial is:%s\n",b);
  return 0;
}

4.运行结果如图所示:

相关文章
|
10月前
|
存储 消息中间件 人工智能
《多模态数据信息提取》解决方案测评
先预示一下,本次测评有福利彩蛋哟,快过年了,喜庆的对联需要吧;大冬天的,保暖触屏手套需要吧;走过路过不要错过。
252 10
|
8月前
|
机器学习/深度学习 人工智能 API
aliyun评测零门槛、即刻拥有 DeepSeek-R1 满血版
DeepSeek-R1满血版是一款零门槛、高性能的深度学习工具,旨在帮助开发者和研究人员高效实现创新。评测显示,其操作界面设计友好,左右分屏布局使理论与实践紧密结合,极大提升了操作连贯性和效率。用户可轻松获取API-KEY,并通过Chatbox配置进行深度学习对话,整个过程简单流畅。该工具在部署集成性、易用性及高性能计算支持方面表现出色,尤其适合本地软件部署,满足用户的实际需求。阿里云提供的详尽文档和引导也使得初次使用者能快速上手,体验极佳。
209 1
|
10月前
|
人工智能 Serverless API
aliyun解决方案评测|主动式智能导购AI助手构建
《主动式智能导购AI助手构建》方案结合百炼大模型与函数计算,提供高效智能导购服务。然而,实际体验中发现官方教程的说明顺序有待优化,特别是关于百炼大模型服务开通及API-key的使用指引不够清晰,导致初次使用者需查阅额外资料。此外,架构设计和实践原理在部署过程中逐步展现,有助于理解,但针对生产环境的具体指导还需进一步完善以满足实际需求。为优化用户体验,建议调整文档中的步骤顺序,确保新手能更顺畅地完成部署和测试。
330 27
|
9月前
|
人工智能
解决方案 | 主动式智能导购AI助手构建获奖名单公布!
解决方案 | 主动式智能导购AI助手构建获奖名单公布!
171 6
|
10月前
|
安全 Linux API
恶意代码分析入门--静态分析(chapter1_Lab01-01)
本文档介绍了在Windows XP SP3环境下,利用PEiD、Strings、PETools等工具对Lab01-01.exe和Lab01-01.dll两个文件进行恶意代码分析的过程。实验包括在线扫描、PE结构分析、检查是否加壳、分析导入函数、字符串搜索等步骤,最终推测出这两个文件的潜在恶意行为及目的。通过这一系列的静态分析手段,能够初步判断出恶意代码的性质与功能,为后续的深入研究提供了基础。
237 5
恶意代码分析入门--静态分析(chapter1_Lab01-01)
|
10月前
|
API Windows
恶意代码分析入门--PE结构能告诉我们很多信息(chapter1_Lab01-04)
本实验分析了Lab01-04.exe文件,通过VirusTotal检测其是否匹配反病毒特征,检查是否存在加壳或混淆,并使用PEiD、Strings、Resource Hacker等工具进行静态分析,提取资源文件,分析其编译时间、导入函数及潜在恶意行为。实验在Windows XP SP3环境下进行。
173 5
恶意代码分析入门--PE结构能告诉我们很多信息(chapter1_Lab01-04)
|
10月前
|
消息中间件 人工智能 搜索推荐
《主动式智能导购AI助手构建》解决方案评测
一文带你了解《主动式智能导购AI助手构建》解决方案的优与劣
232 17
|
10月前
|
安全 程序员 PHP
实验室信创平台上几道经典的web-php有关的题目wp
本内容介绍了多个CTF题目及其解题思路,涵盖正则表达式、PHP函数、代码审计等方面。例如,通过POST提交和正则匹配获取flag,利用PHP的松散比较和数组特性绕过验证,以及通过恢复VIM临时文件和SVN隐藏文件夹获取关键信息。每个题目都提供了详细的解题步骤和相关链接,适合初学者学习和实践。
130 1
|
12月前
|
网络架构
计算子网掩码
计算子网掩码
276 2
|
12月前
|
安全 Shell PHP
BUUCTF-WEB(第二天)
BUUCTF-WEB(第二天)
168 2