静态分析&&IDA


目标对象:2.crackme.exe

环境:windows

工具:IDA Pro(32bit) (带有F5插件)

目标:找到flag
在这里插入图片描述

程序功能描述:输入少于24个字符会提示需要24个字符并使得重新输入;如果输入正确的24个字符,即flag,输出成功;不正确的24个字符,则输出失败。

IDA分析目标程序

点击main函数 F5反汇编成C语言代码

main函数:

int __cdecl main(int argc, const char **argv, const char **envp)
{
  FILE *v3; // eax@3
  signed int i; // [sp+14h] [bp-44h]@4
  char v6[28]; // [sp+18h] [bp-40h]@1
  int v7; // [sp+34h] [bp-24h]@1
  char v8; // [sp+38h] [bp-20h]@1
  int v9; // [sp+39h] [bp-1Fh]@1
  int v10; // [sp+3Dh] [bp-1Bh]@1
  int v11; // [sp+41h] [bp-17h]@1
  int v12; // [sp+45h] [bp-13h]@1
  int v13; // [sp+49h] [bp-Fh]@1
  __int16 v14; // [sp+4Dh] [bp-Bh]@1
  char v15; // [sp+4Fh] [bp-9h]@1
  int v16; // [sp+50h] [bp-8h]@1
  int v17; // [sp+54h] [bp-4h]@1

  v8 = 0;
  v9 = 0;
  v10 = 0;
  v11 = 0;
  v12 = 0;
  v13 = 0;
  v14 = 0;
  v15 = 0;
  v7 = 3;
  v17 = 0;
  v16 = 0;
  printf_s("[*] To get the flag, you need to input a correct string.\n\n");
  scanf_s("%s", v6, 25);//输入字符串被读取到v6
  while ( strlen(v6) != 24 )//v6不为长度24,重新获取输入
  {
    v3 = (FILE *)sub_4017DA();
    fflush(v3);
    printf_s("\n[*] Please Input a string with 24 characters!\n\n");
    scanf_s("%s", v6, 25);
  }
//为长度24的处理
  for ( i = 0; i < 4; ++i )
	//将长度24的字符串截断为4组长度为6的,每次传入6个给sub处理,分别进行转换,得到对应v8字符串
    sub_401000((int)&v6[6 * i], (int)(&v8 + 6 * i));//关键转换函数sub
  while ( v16 < 24 )//逐长度24判断
  {
    switch ( *(&v8 + v16) )
    {//针对v8的每一个字符,变化v7或者v17(v7初始为3,v17初始为0)
      case 1:
        --v7;
        break;
      case 2:
        ++v7;
        break;
      case 3:
        --v17;
        break;
      case 4:
        ++v17;
        break;
      default:
        break;
    }
    if ( *(&byte_40E018[10 * v7] + v17) != 35 )//条件1
    {//由v7和v17索引的byte数组的位置为#,则可行,否则输入错误
      printf("\n[*] Sorry! Your input is wrong!\n\n");
      exit(0);//24个字符都要满足条件1,否则就退出
    }
    ++v16;
		
  }
  if ( v7 != 9 || v17 != 8 )//经过24次变化后最后的v7和v17需要满足该条件
    printf("\n[*] Sorry! Your input is wrong!\n\n");
  else
    printf("\n[*] Nice job! Here is the flag: flag{%s}\n\n", v6);//flag是v6
  return 0;
}

逻辑:

  • 由条件1得到每一次的v7或者v17的变化,进而得到v8。

将条件1的数组分割成10*10的,从初始位置索引3,0开始走完所有的#,最后到达9,8


**********
*####*****
*#**#*****
##*##*****
***#******
***#*#####
***###***#
*********#
*********#
********##

v8: 411444 221222 441444 422221

  • 通过关键函数sub,由v8逆推v6
//关键函数sub
int __cdecl sub_401000(int a1, int a2)
{//a2传入v8,a1传入v6
  int result; // eax@7
  signed int v3; // [sp+0h] [bp-8h]@1
  signed int i; // [sp+4h] [bp-4h]@1

  v3 = 0;
  for ( i = 0; i < 6; ++i )
  {
    while ( v3 < 4 )
    {
      if ( *(_BYTE *)(i + a1) == *(&byte_40E000[4 * i] + v3) )
      {
//如果六个一组的v6对应的值与数组被v3索引的值相等(每个v6对应数组的一行),则把v8对应位置设成v3+1
        *(_BYTE *)(i + a2) = v3 + 1;//v8对应的位置的值为v3+1
        break;
      }
      ++v3;
    }
    v3 = 0;
    result = i + 1;
  }
  return result;
}

数组分成4个一组,每组6个

0A1B
a2b3
4C5D
c6d7
8E9F
e0f1


通过v8的值推出v3,定位数组,得到v6

v6:Ba47F1 A24c8e B347F1 B2C6Ee

  • 推断过程的值还没有验证,但是逻辑是对的
  • 数组明文通过IDA的Hex View看到二进制
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MBR(Master Boot Record)是计算机系统的启动程序,位于硬盘的第一个扇区,一般占用512字节。它包含了分区表以及启动操作系统所需的代码。IDA是一款反汇编软件,可以用于对二进制文件进行静态分析。 使用IDA对MBR进行二进制静态分析,可以深入了解MBR的功能和执行流程。 首先,在IDA中打开MBR的二进制文件,IDA会自动识别并显示程序的指令流。可以通过分析指令之间的跳转、数据处理等关系,还原出MBR的代码逻辑。 其次,IDA可以对二进制文件进行反汇编,将机器指令转换成可读性更高的汇编指令,方便程序员理解和分析。通过IDA的反汇编功能,可以逐步追踪程序的执行路径,查看各个函数的调用关系,识别出程序的功能模块。 此外,IDA还提供了图形化界面,用于展示程序的控制流图、函数调用图等可视化信息,方便用户理解程序的结构和逻辑。 最后,通过IDA静态分析功能,可以查找程序中的漏洞和恶意代码。例如,可以搜索特定的字符串、调用系统函数的位置,以便检测程序是否含有病毒、后门等恶意代码。 总的来说,利用IDA进行MBR二进制静态分析,可以帮助研究人员深入了解MBR的工作原理和代码逻辑,识别恶意代码,加强对计算机系统的安全防护。 ### 回答2: IDA是一款十分常用的二进制静态分析工具,它主要用于对二进制文件进行逆向工程和安全分析。二进制文件通常是以机器语言编写的,分析这样的文件是十分困难的。然而,IDA通过对二进制文件进行分析,可以还原出源代码的一些结构和逻辑。 首先,IDA静态分析功能使得我们可以在不运行程序的情况下查看程序的执行流程、函数调用、内存分配等。我们可以分析程序的汇编指令,了解每条指令的作用和执行过程,进而还原出程序的整体逻辑。 其次,IDA提供了反汇编功能,可以将机器码反汇编成汇编代码,这样我们就可以看到程序从二进制代码转换为汇编代码的过程。这对于探查程序中隐藏的功能和漏洞非常有用。 此外,IDA还提供了交互式调试功能,可以在不运行程序的情况下直接查看和修改内存中的值,对程序的执行进行调试,并寻找和解决问题。 总之,通过IDA的二进制静态分析,我们可以更好地理解程序的功能和结构,发现潜在的安全漏洞,从而提高软件的安全性和性能。这使得IDA成为许多安全研究人员和软件工程师的重要工具之一。 ### 回答3: MBR(Master Boot Record,主引导记录)是磁盘的第一个扇区,是启动操作系统的关键组成部分。IDA(Interactive Disassembler,交互式反汇编器)是一款二进制静态分析工具,用于逆向工程和恶意软件分析。 使用IDA进行MBR的二进制静态分析时,首先需要将MBR的二进制文件导入到IDA中。IDA通过解析二进制代码,将其转换为可读的汇编语言代码,以便分析和理解程序的逻辑。 对于MBR的二进制静态分析,可以使用IDA进行以下方面的研究: 1. 代码调用关系分析IDA可以显示函数之间的调用关系,帮助我们理清代码的逻辑流程。 2. 变量和数据结构分析IDA可以识别并显示代码中使用的变量和数据结构,帮助我们了解数据的存储和使用方式,进而理解程序的功能。 3. 漏洞分析:通过IDA的漏洞分析功能,我们可以查找代码中存在的安全漏洞或异常处理不当的问题,从而提供安全修复建议。 4. 反汇编代码注释:IDA可以让我们添加自己的注释,对代码进行解释和标记,方便后续的分析和理解。 综上所述,IDA作为一款强大的二进制静态分析工具,可以帮助我们深入理解MBR的功能和逻辑,发现其中的潜在问题,从而提供安全修复和改进的建议。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值