XY_RE复现(二)

一,何须相思煮余年

0x55  0x8b  0xec  0x81  0xec  0xa8  0x0  0x0  0x0  0xa1  0x0  0x40  0x41  0x0  0x33  0xc5  0x89  0x45  0xfc  0x68  0x9c  0x0  0x0  0x0  0x6a  0x0  0x8d  0x85  0x60  0xff  0xff  0xff  0x50  0xe8  0x7a  0xc  0x0  0x0  0x83  0xc4  0xc  0xc7  0x85  0x58  0xff  0xff  0xff  0x27  0x0  0x0  0x0  0xc7  0x85  0x5c  0xff  0xff  0xff  0x0  0x0  0x0  0x0  0xeb  0xf  0x8b  0x8d  0x5c  0xff  0xff  0xff  0x83  0xc1  0x1  0x89  0x8d  0x5c  0xff  0xff  0xff  0x83  0xbd  0x5c  0xff  0xff  0xff  0x27  0xf  0x8d  0xed  0x0  0x0  0x0  0x8b  0x95  0x5c  0xff  0xff  0xff  0x81  0xe2  0x3  0x0  0x0  0x80  0x79  0x5  0x4a  0x83  0xca  0xfc  0x42  0x85  0xd2  0x75  0x25  0x8b  0x85  0x5c  0xff  0xff  0xff  0x8b  0x8c  0x85  0x60  0xff  0xff  0xff  0x3  0x8d  0x5c  0xff  0xff  0xff  0x8b  0x95  0x5c  0xff  0xff  0xff  0x89  0x8c  0x95  0x60  0xff  0xff  0xff  0xe9  0xac  0x0  0x0  0x0  0x8b  0x85  0x5c  0xff  0xff  0xff  0x25  0x3  0x0  0x0  0x80  0x79  0x5  0x48  0x83  0xc8  0xfc  0x40  0x83  0xf8  0x1  0x75  0x22  0x8b  0x8d  0x5c  0xff  0xff  0xff  0x8b  0x94  0x8d  0x60  0xff  0xff  0xff  0x2b  0x95  0x5c  0xff  0xff  0xff  0x8b  0x85  0x5c  0xff  0xff  0xff  0x89  0x94  0x85  0x60  0xff  0xff  0xff  0xeb  0x73  0x8b  0x8d  0x5c  0xff  0xff  0xff  0x81  0xe1  0x3  0x0  0x0  0x80  0x79  0x5  0x49  0x83  0xc9  0xfc  0x41  0x83  0xf9  0x2  0x75  0x23  0x8b  0x95  0x5c  0xff  0xff  0xff  0x8b  0x84  0x95  0x60  0xff  0xff  0xff  0xf  0xaf  0x85  0x5c  0xff  0xff  0xff  0x8b  0x8d  0x5c  0xff  0xff  0xff  0x89  0x84  0x8d  0x60  0xff  0xff  0xff  0xeb  0x38  0x8b  0x95  0x5c  0xff  0xff  0xff  0x81  0xe2  0x3  0x0  0x0  0x80  0x79  0x5  0x4a  0x83  0xca  0xfc  0x42  0x83  0xfa  0x3  0x75  0x20  0x8b  0x85  0x5c  0xff  0xff  0xff  0x8b  0x8c  0x85  0x60  0xff  0xff  0xff  0x33  0x8d  0x5c  0xff  0xff  0xff  0x8b  0x95  0x5c  0xff  0xff  0xff  0x89  0x8c  0x95  0x60  0xff  0xff  0xff  0xe9  0xf7  0xfe  0xff  0xff  0x33  0xc0  0x8b  0x4d  0xfc  0x33  0xcd  0xe8  0x4  0x0  0x0  0x0  0x8b  0xe5  0x5d  0xc3  

enc = [88,88,134,87,74,118,318,101,59,92,480,60,65,41,770,110,73,31,918,39,120,27,1188,47,77,24,1352,44,81,23,1680,46,85,15,1870,66,91,16,4750]

txt文件,一大串数据,应该是机器码,首先想着肯定先机器码变汇编代码

要先转换成:

55 8B EC 81 EC A8 00 00 00 A1 00 40 41 00 33 C5 89 45 FC 68 9C 00 00 00 6A00 8D 85 60 FF FF FF 50 E8 7A 0C 00 00 83 C4 0C C7 85 58 FF FF FF 27 00 0000 C7 85 5C FF FF FF 00 00 00 00 EB 0F 8B 8D 5C FF FF FF 83 C1 01 89 8D 5CFF FF FF 83 BD 5C FF FF FF 27 0F 8D ED 00 00 00 8B 95 5C FF FF FF 81 E2 0300 00 80 79 05 4A 83 CA FC 42 85 D2 75 25 8B 85 5C FF FF FF 8B 8C 85 60 FFFF FF 03 8D 5C FF FF FF 8B 95 5C FF FF FF 89 8C 95 60 FF FF FF E9 AC 00 0000 8B 85 5C FF FF FF 25 03 00 00 80 79 05 48 83 C8 FC 40 83 F8 01 75 22 8B8D 5C FF FF FF 8B 94 8D 60 FF FF FF 2B 95 5C FF FF FF 8B 85 5C FF FF FF 8994 85 60 FF FF FF EB 73 8B 8D 5C FF FF FF 81 E1 03 00 00 80 79 05 49 83 C9FC 41 83 F9 02 75 23 8B 95 5C FF FF FF 8B 84 95 60 FF FF FF 0F AF 85 5C FFFF FF 8B 8D 5C FF FF FF 89 84 8D 60 FF FF FF EB 38 8B 95 5C FF FF FF 81 E203 00 00 80 79 05 4A 83 CA FC 42 83 FA 03 75 20 8B 85 5C FF FF FF 8B 8C 8560 FF FF FF 33 8D 5C FF FF FF 8B 95 5C FF FF FF 89 8C 95 60 FF FF FF E9 F7FE FF FF 33 C0 8B 4D FC 33 CD E8 04 00 00 00 8B E5 5D C3

有一个在线网站:Online x86 and x64 Intel Instruction Assembler (defuse.ca)

不是特别好看,想想还能不能转换成高级语言。

看别人wp:010 Editor 打开,把上面整理的字节码全部复制到十六进制文件里,保存之后使用IDA打开 。先全选强制分析,但有很多爆红,先不管直接变函数,但不太对。别人的好像是直接成功了,悲(,不知道哪里出问题了,重新来一遍。

别人的:

 别人的好像是二进制文件,我的是十六进制文件,可能是这个问题吧。

二,今夕是何年

说运行起来就给flag

装qemu可以跑,试试,装好了,真的出flagl

sudo apt install libc6-riscv64-cross
sudo apt install binutils-riscv64-linux-gnu
sudo apt install gcc-riscv64-linux-gnu
sudo apt install binutils-riscv64-unknown-elf
sudo apt install gcc-riscv64-unknown-elf
sudo apt install qemu-system-misc
sudo apt install qemu-user
若出现“/lib/ld-linux-riscv64-lp64d.so.1”报错
则再终端输入‘sudo cp /usr/riscv64-linux-gnu/lib/* /lib/’就可以了,因为文件下载的地方,和查
找的地方不一样,只要把文件cp一下就可以了

三,easy language

 

cmd窗口:拒绝访问。

 

提示是易语言的,拖进ida试试,不能分析。 

看wp要加个插件。

IDA进行逆向得知,原来hexray在生成伪代码的时候会调用一个calc_c_cpp_name函数,该函数会试图针对C/C++的函数名称进行优化,结果却误伤中文字符,我们将此处代码给NOP掉,就可以了。

ctrl+3可以换出插件窗口。 

得到了一个新程序

在字符串窗口,找到关键信息的位置, 发现是红的,全选然后按P

得到关键函数

int sub_4015CC()
{
  void *v0; // eax
  void *v1; // eax
  _DWORD *v2; // eax
  unsigned int v3; // ecx
  int v4; // ebx
  int v5; // eax
  int result; // eax
  _BYTE *v7; // [esp-8h] [ebp-24h]
  void *v8; // [esp-4h] [ebp-20h]
  void *v9; // [esp+0h] [ebp-1Ch]
  LPVOID v10; // [esp+4h] [ebp-18h] BYREF
  LPVOID v11; // [esp+8h] [ebp-14h] BYREF
  LPVOID v12; // [esp+Ch] [ebp-10h] BYREF
  LPVOID lpMem; // [esp+10h] [ebp-Ch] BYREF
  LPVOID v14; // [esp+14h] [ebp-8h]
  LPVOID v15; // [esp+18h] [ebp-4h] BYREF

  v15 = 0;
  v14 = 0;
  v0 = (void *)sub_40937A(1375797348, (LPCSTR)0x16010066, 8, -1);
  lpMem = v0;
  if ( !v0 )
    v0 = &unk_4A41DB;
  v12 = (LPVOID)sub_40936E(1, (char)v0, 0, -2147483644);
  if ( lpMem )
    free(lpMem);
  v11 = 0;
  v10 = "AES-ECB";
  v9 = (void *)sub_401975(&v12, &dword_59D0F0, &v10, 1, 7, 1, &v11, 0);
  if ( v12 )
    free(v12);
  if ( v10 )
    free(v10);
  if ( v11 )
    free(v11);
  if ( v15 )
    free(v15);
  v15 = v9;
  lpMem = sub_403E67((int)&v15);
  v8 = lpMem;
  if ( v14 )
    free(v14);
  v14 = v8;
  LOBYTE(v1) = (_BYTE)v8;
  if ( !v8 )
    v1 = &unk_4A41DB;
  v2 = (_DWORD *)sub_40936E(1, (char)v1, 0, -2147483644);
  lpMem = v2;
  v3 = 0;
  if ( v2 )
    v3 = v2[1];
  v7 = v2 + 2;
  v4 = 0;
  if ( dword_59D0F4 )
    v4 = *((_DWORD *)dword_59D0F4 + 1);
  v5 = 1;
  if ( v4 == v3 )
  {
    v5 = 0;
    if ( v3 )
      v5 = strlen((_BYTE *)dword_59D0F4 + 8, v7, v3);
  }
  v12 = (LPVOID)(v5 == 0);
  if ( lpMem )
    free(lpMem);
  if ( v12 )
  {
    lpMem = (LPVOID)sub_40937A(1375797348, (LPCSTR)0x16010066, 8, -1);
    v12 = (LPVOID)sub_404471((int)&lpMem);
    if ( lpMem )
      free(lpMem);
    if ( v12 == (LPVOID)29 )
      result = sub_409374((HWND)0x52010064, (LPCSTR)0x16010065, 8, -1, "real?!", 0);
    else
      result = sub_409374((HWND)0x52010064, (LPCSTR)0x16010065, 8, -1, "E++ is so easy!", 0);
  }
  else
  {
    result = sub_409374((HWND)0x52010064, (LPCSTR)0x16010065, 8, -1, byte_4A41FB, 0);
  }
  if ( v15 )
    result = free(v15);
  if ( v14 )
    return free(v14);
  return result;
}

很多函数不认识,烦(,

据wp说是AES-ECB和basse64。

 

 

不对,可以:

 

得到关键函数,但太丑了。尽是sub_地址,下来搜搜看。

也附上别人的脚本

from crypto.Cipher import AES
import base64

# 给定的字节串 byte_string
byte_string = b'E\x9c\xbf\xcdQ\x160\x9cAZ\t\xbc\xc2\x84\x08<\xc7n\x97e\x8a\xf9\xd6\xb3U\x9c\xcf\xb3\x06\x80i\xde\x0c\x9a\xf7r\xfdA\x05\xe9\x15\x18\xa7\xd4\x917\xde\xfc\xb1'

# 将字节串转换为整数
integer_value = int.from_bytes(byte_string, byteorder='big')

# 将整数拆分为三个部分,每部分包含16个字节
first_part_integer = integer_value >> 256
second_part_integer = (integer_value >> 128) & ((1 << 128) - 1)
third_part_integer = integer_value & ((1 << 128) - 1)

# 将每个部分转换回字节串
first_part_bytes = first_part_integer.to_bytes(16, byteorder='big')
second_part_bytes = second_part_integer.to_bytes(16, byteorder='big')
third_part_bytes = third_part_integer.to_bytes(16, byteorder='big')

# 打印结果
print("第一部分:", first_part_bytes)
print("第二部分:", second_part_bytes)
print("第三部分:", third_part_bytes)

# 根据动态调试找到的密钥
key = b'welcometoxyctf!!'

# 创建 AES 解密器
cipher = AES.new(key, AES.MODE_ECB)

# 解密每个部分
part1 = cipher.decrypt(first_part_bytes)
part2 = cipher.decrypt(second_part_bytes)
part3 = cipher.decrypt(third_part_bytes)

# 打印解密结果
print("成功解出flag 第一部分:", part1)
print("成功解出flag 第二部分:", part2)
print("成功解出flag 第三部分:", part3)
print("flag是:", part1 + part2 + part3)

 

 

相关推荐

  1. 】DiffTalk

    2024-04-30 02:56:02       61 阅读
  2. TextCNN的

    2024-04-30 02:56:02       57 阅读
  3. thinkphp漏洞

    2024-04-30 02:56:02       33 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-30 02:56:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-30 02:56:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-30 02:56:02       87 阅读
  4. Python语言-面向对象

    2024-04-30 02:56:02       96 阅读

热门阅读

  1. 关于Android优化

    2024-04-30 02:56:02       30 阅读
  2. ONNX模型

    2024-04-30 02:56:02       34 阅读
  3. 使用Redis实现延时队列

    2024-04-30 02:56:02       33 阅读
  4. 安卓手机APP开发__媒体开发部分__APK裁剪

    2024-04-30 02:56:02       39 阅读
  5. 【C++例8-2】 将单目运算符“++”重载为成员函数

    2024-04-30 02:56:02       31 阅读
  6. Oracle中取出clob类型

    2024-04-30 02:56:02       35 阅读
  7. Modbus协议到EtherCAT协议的转换

    2024-04-30 02:56:02       31 阅读
  8. 穆迪信用评级

    2024-04-30 02:56:02       28 阅读