网鼎杯一个CrackMe give_a_try.exe

转载请注明出处。https://rhirufxmbcyj.gitlab.io

从看雪一篇帖子上看到的这个程序,没什么难度,就是比较绕。拿下来试一试。

程序:https://rhirufxmbcyj.gitlab.io/files/give_a_try.rar

准备工作
  • 首先,打开程序看一看这是个什么类型的程序,是个name+password类型还是serial类型,心理也好有个底,这个程序只有一个编辑框,也就是个serial类型的。
  • 然后使用PEiD等工具 进行查壳、查语言、查算法。
    • 有壳先脱壳,尽量不干扰正常分析程序,能用工具脱就用工具脱,此程序无壳。
    • C类语言大多都一样,不需要特殊的工具,像Delphi或VB或Net就需要使用特定的工具去分析了,这个程序是汇编写的,更容易分析,怪不得函数那么少。
    • 使用PEid的插件Krypto ANALyzer查一下算法,也算是分析的时候考虑算法有个偏向。
分析

程序拖入IDA看一看,发现未知的函数只有几个,其他都是API,直接用IDA的f5一个函数一个函数看就找到了程序的校验算法那块,也就是sub_401103(char *a1),猜测参数1这个char *就是输入的字符串了。

这个是IDA的关键算法的伪代码。

int __stdcall sub_401103(char *a1)
{
   
  int result; // eax@2
  int v2; // edi@3
  char v3; // al@3
  char *v4; // esi@3
  unsigned int i; // ebx@6
  unsigned int v6; // eax@7
  unsigned int v7; // edx@7
  unsigned int v8; // edx@7
  unsigned int v9; // edx@7
  unsigned int v10; // edx@7
  unsigned int v11; // edx@7
  unsigned int v12; // edx@7
  unsigned int v13; // edx@7
  unsigned int v14; // edx@7
  unsigned int v15; // edx@7
  unsigned int v16; // edx@7
  unsigned int v17; // edx@7
  unsigned int v18; // edx@7
  unsigned int v19; // edx@7
  unsigned int v20; // edx@7
  unsigned int v21; // edx@7

  if ( strlen(a1) == 42 )                       // 字符串长度必须42
  {
   
    v2 = 0;
    v3 = *a1;
    v4 = a1 + 1;
    while ( v3 )                                // 将每个字符串的ascii累加到V2里
    {
   
      v2 += (unsigned __int8)v3;
      v3 = *v4++;
    }
    srand(dword_40406C ^ v2);                   // 没有用time(NULL)取随机数,也就是这个随机数是可以追朔的,所以这里是个突破口,前提是dword_40406c要确定
    for ( i = 0; i != 42; ++i )
    {
   
      v6 = (unsigned __int8)a1[i] * rand();
      v7 = v6 * (unsigned __int64)v6 % 0xFAC96621;
      v8 = v7 * (unsigned __int64)v7 
python+opencv简谱识别音频生成系统源码含GUI界面+详细运行教程+数据 一、项目简介 提取简谱中的音乐信息,依据识别到的信息生成midi文件。 Extract music information from musical scores and generate a midi file according to it. 二、项目运行环境 python=3.11.1 第三方库依赖 opencv-python=4.7.0.68 numpy=1.24.1 可以使用命令 pip install -r requirements.txt 来安装所需的第三方库。 三、项目运行步骤 3.1 命令行运行 运行main.py。 输入简谱路径:支持图片或文件夹,相对路径或绝对路径都可以。 输入简谱主音:它通常在第一页的左上角“1=”之后。 输入简谱速度:即每分钟拍数,同在左上角。 选择是否输出程序中间提示信息:请输入Y或N(不区分大小写,下同)。 选择匹配精度:请输入L或M或H,对应低/中/高精度,一般而言输入L即可。 选择使用的线程数:一般与CPU核数相同即可。虽然python的线程不是真正的多线程,但仍能起到加速作用。 估算字符上下间距:这与简谱中符号的密集程度有关,一般来说纵向符号越稀疏,这个值需要设置得越大,范围通常在1.0-2.5。 二值化算法:使用全局阈值则跳过该选项即可,或者也可输入OTSU、采用大津二值化算法。 设置全局阈值:如果上面选择全局阈值则需要手动设置全局阈值,对于.\test.txt中所提样例,使用全局阈值并在后面设置为160即可。 手动调整中间结果:若输入Y/y,则在识别简谱后会暂停代码,并生成一份txt文件,在其中展示识别结果,此时用户可以通过修改这份txt文件来更正识别结果。 如果选择文件夹的话,还可以选择所选文件夹中不需要识别的文件以排除干扰
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值