赣CTF题解

逆向

Try_reverse_it

本题考查rc4加密

拖入exe发现有壳,且为32位

进行脱壳操作,下图表示脱壳完成

拖入ida 

memset是一个初始化函数,作用是将某一块内存中的全部设置为指定的值

提取数据,shift+e

观察发现flag是32位,v19[0][1]就是Buffer,写出脚本

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

int main() {
   FILE *v3; // eax
  unsigned int v4; // kr00_4
  int v5=0; // edi
  int i; // ecx
  int j; // esi
  unsigned char v9; // dl
  int v10; // esi
  int v11; // edi
  unsigned int k; // ebx
  unsigned char v13; // cl
  int v14; // eax
  char v16; // [esp-30h] [ebp-640h]
  char v17[256]; // [esp+Ch] [ebp-604h] BYREF  
    char Buffer[32] = {
        108, 248, 144, 255, 139, 24, 229, 118, 181, 251,
        80, 245, 44, 95, 243, 16, 203, 62, 234, 154,
        200, 55, 45, 79, 204, 143, 33, 41, 23, 6, 202, 103
    };
    unsigned char v21[256];
    unsigned char v20[16] = 
{
        108, 101, 116, 39, 115, 95, 114, 101, 118, 101,
        114, 115, 95, 105, 116, 0
    };
   unsigned char *v6 = &v21[255];
  memset(v17, 0, sizeof(v17));
    memset(v21, 0, sizeof(v21));
   v4 = strlen((const char *)v20);
   for ( i = 0; i < 256; ++i )
  {
    *v6-- = i;
    v17[i] = ((unsigned char*)v20)[i % v4];
  }
  for ( j = 0; j < 256; ++j )
  {
    v9 = v21[j];
    v5 = (v9 + v17[j] + v5) % 256;
    v21[j] = v21[v5];
    v21[v5] = v9;
  }
  v10 = 0;
  v11 = 0;
  for ( k = 0; k < 0x20; ++k )
  {
    v10 = (v10 + 1) % 256;
    v13 = v21[v10];
    v11 = (v13 + v11) % 256;
    v21[v10] = v21[v11];
    v21[v11] = v13;
    Buffer[k] ^= v21[(unsigned char)(v13 + v21[v10])];
    
  }
    puts(Buffer)
    return 0;
}

flag{Y0u_5eem_1ike4pro_revers3r} 

easy_xor

本题考查异或

先拖入exe发现是64位

 这里是一个大小端的用法

大端(Big-Endian):高地址存放;低位小端(Little-Endian):高地址存放高放

所以str2应该反过来

 写出脚本

 flag{this_is_A_flag}

easy_upx

拖入exe,有壳,且为64位

脱壳

动态调试进入汇编窗口

得到flag{UPX_yyds!}

 

py?python! 

观察代码,返回-1,data数据也反

写出脚本

#include <stdio.h>
#include <string.h>
int main()
{	
	char data[]={54,21,21,15,20,55,96,12,43,40,29,93,15,
	43,71,40,3,95,41,38,
	51,88,32,42,15,57,0,55,63,23,36,17,68,6,78,19} ;
	char key []= "Python";
	int i;
	for (int i =0 ; i <=strlen(data) ; i++) 
	{
        data[i]^=key[i % strlen(key)];
    }


printf("%s\n", data);

return 0;
}

flag{Y0u_@r3_R3@l1y_G0OD_@t_Pyth0n!}

Ezmaze

迷宫问题,拖入ida观察发现是5*6的矩阵,从@开始0可走1不可走#结束

wasd分别代表键盘上的,w向上d向右a向左s向下

中文字符串的显示,在ida中可能无法正常显示 需要手动设置编码步骤如下:

1.options>general>strings
2.双击UTF-8,鼠标右键insert
3.在弹出的框中输入gbk,保存确认
4.选中需要修复的字符串,按ALT+A
5.选择C-style,中文字符成功显示

 

flag{dssdssa}

pwn

testnc

ls 列出文件和目录

ls -l 列出文件的详细信。

cat flag 显示文件flag的内容

打开实例进入虚拟机,就是一道简单的nc

flag{0a62b9ed-7dda-4045-9910-619ecc71ffd9} 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值