C语言int类型和char类型转换
这里主要是脚本
int -> char123456789int enc[] ={1416114547,1597076319,1096762721,1937334096,2037671984,1851744082,863397202,1936023344}char flag[32] = {0}for (int i = 0; i < 8; i++){//下面是int类型转成char类型 flag[4 * i] = enc[i] >> 24; flag[4 * i + 1] = (enc[i] >> 16) ^ 0xFF000000; flag[4 * i + 2] = (enc[i] >> 8) ^ 0xFF000000; flag[4 * i + 3] = enc[i] ^ 0xFF000000;}
tea加密
TEA因为网上大多tea加密都是用的c
所以我这里也用C
2023.11.8做了一个新题
加密:
1234567891011121314151617__int64 __fastcall main(int a1, char **a2, char **a3){ int i; // [rsp+4h] [rbp-3Ch] _QWORD input[6]; // [rsp+10h] [rbp-30h] BYREF input[5] = __readfsqword(0x28u); puts("plz input u fl4g:"); __isoc99_scanf("%32s", input);//输入 sub_400763(); for ( i = 0; i <= 3; ++i )//实现加密 sub_400696(&input[i], &dword_601080);//dword_601080这个里面是key if ( !memcmp(input, &dword_6010A0, 0x20uLL) ...
bad_python
pyc文件。
文件头有问题。修改一下文件头,然后编译成py文件
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647# uncompyle6 version 3.8.0# Python bytecode 3.6 (3379)# Decompiled from: Python 3.7.0 (default, Nov 25 2022, 11:07:23) # [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]# Embedded file name: pyre.py# Compiled at: 2022-10-15 15:36:44# Size of source mod 2**32: 609 bytesfrom ctypes import *from Crypto.Util.number import bytes_to_longfrom Crypto.Util.number import long_to_bytesdef encrypt(v, ...
ereere
用IDA打开,定位到主要的地方。
当我在搜索字符串的时候:
猜测到有base64换表的操作。
看到主要过程:
v1 = sub_41A6E0((char *)v3);
sub_41A6E0
看不懂,不知道它是干什么的。
sub_4009DC
这个很明显是一个rc4。
sub_400864()这个函数是去得到rc4的key
flag{123321321123badbeef012}
v2 = (unsigned __int8 *)sub_400550(v3, (int)v1);
虽然这个函数看不懂,但是可以猜到是一个base64换表
1234567891011121314151617import base64import stringstr1 = "ScDZC1cNDZaxnh/2eW1UdqaCiJ0ijRIExlvVEgP43rpxoxbYePBhpwHDPJ===" # 需要换表的字符串string1 = "ZYXWVUTSRQPONMLKJIHGFEDCBAabcdefghijklmnopqrstuvwxyz/+9876543 ...
easyEZbaby_app
用jadx打开:
知道flag就是用户名和密码。
首先看用户名的函数:
不是很懂,但是大概知道是md5加密,然后取奇数。
在线网站加密,然后手动取出奇数
7afc4fcefc616ebd
再看密码函数:
简单的写一个python代码:
123456789a = []for i in range(15): temp = (((255 - i)+2)-98) - ord('0') a.append(temp)flag = ""for i in a: flag += chr(i)print(flag)#onmlkjihgfedcba
最后的flag:flag{7afc4fcefc616ebdonmlkjihgfedcba}
CatFly
这个题真的是1星的难度吗?
注:下面的过程都是抄的。
进来首先看到off_FA88。
由于off_FA88 = (char *)sub_6314((unsigned int)v24, k, (unsigned int)m, v12);
得知off_FA88 是sub_6314()这个函数的返回值。
sub_6314()函数的返回值是==byte_104C8.
byte_104C8是dword_E120得到的。
byte_104C8 = dword_E120[a3 - 5] & 0x7F;
dword_E120是通过异或sub_62B5()这个函数的返回值得到的
dword_E120[a3 - 5] ^= sub_62B5();
sub_62B5()这个函数是由于dword_E1E8这个得到的。
dword_E1E8 += printf("\x1B[1;37mYou have nyaned for %d times!\x1B[J\x1B[0m", (unsigned int)++dword_108E0);
dword_E1E8是通过printf函数 ...
toddler_regs
很简单的一个找flag的题
搜索字符串,找到flag的位置,发现flag被分成了5部分。
通过查看条件找到flag即可
easyre-xctf
upx壳,然后就是找flag
可以看到par2 是:d_0n3_4nd_tw0
然后找到part1
注意这里倒着写
crypt
简单的rc4
1234567891011121314enc = [ 158, 231, 48, 95, 167, 1, 166, 83, 89, 27, 10, 32, 241, 115, 209, 14, 171, 9, 132, 14, 141, 43,0,0]flag = []for i in enc: temp = i ^ 0x22 flag.append(temp)# 将加密后的flag以十六进制形式输出,不带0x,每个字符之间用空格隔开hex_flag = ' '.join([format(i, 'x') for i in flag])print(hex_flag)
reverse_re3
这是一个走迷宫的题:
首先是找到main函数。然后main函数调用了sub_940函数
sub_940
进来看到这句话,更具经验就是一个走迷宫的题目
找到迷宫的地方
有675个字符
看到边界是15个字符,也就是15*15*3
提取数据,进行求解。