BUUCTF-reverse

easyre

在这里插入图片描述


reverse1

在这里插入图片描述


reverse2

在这里插入图片描述

fl0g = '{hacking_for_fun}'
flag = list(fl0g)
for i in range(len(flag)):
    if ord(flag[i]) == 105 or ord(flag[i]) == 114:
        flag[i] = chr(49)
    print(flag[i],end='')
#{hack1ng_fo1_fun}

内涵的软件

在这里插入图片描述
后来我菜发现得把v2里面的DBAPP换成flag菜可以是正确的flag!
在这里插入图片描述


新年快乐

在这里插入图片描述
在这里插入图片描述
此时再次使用EP进行探测发现没有了壳!
在这里插入图片描述


helloword

此时便是安卓逆向了!
在这里插入图片描述


xor

在这里插入图片描述

flag = [0x66, 0x0A, 0x6B, 0x0C, 0x77, 0x26, 0x4F, 0x2E, 0x40, 0x11, 
  0x78, 0x0D, 0x5A, 0x3B, 0x55, 0x11, 0x70, 0x19, 0x46, 0x1F, 
  0x76, 0x22, 0x4D, 0x23, 0x44, 0x0E, 0x67, 0x06, 0x68, 0x0F, 
  0x47, 0x32, 0x4F]
print(chr(flag[0]),end='')
for i in range(1,33):
    f = flag[i] ^ flag[i-1]
    print(chr(f),end='')
#flag{QianQiuWanDai_YiTongJiangHu}

reverse3

在这里插入图片描述
然后通过分析发现关键函数可能是base64加密!
在这里插入图片描述
这是很明显的特征!
在这里插入图片描述
这里便是最后进行比较的数据啦!
不够在这两个中间还有个小小的变换!
在这里插入图片描述

fl0g = [0x65, 0x33, 0x6E, 0x69, 0x66, 0x49, 0x48, 0x39, 0x62, 0x5F, 
  0x43, 0x40, 0x6E, 0x40, 0x64, 0x48]
for i in range(len(fl0g)):
    fl0g[i] -= i
    print(chr(fl0g[i]),end='')

然后进行base64进行解密!
{i_l0ve_you}


不一样的flag

在这里插入图片描述
根据这个!
在这里插入图片描述有很大的概率是迷宫题,所以外面需要进行找到最佳路径!像这种题,其实爆破是应该是最快的!
在这里插入图片描述

'''
1 --v4
2 ++v4
3 --v5
4 ++v5
*11110100001010000101111#
'''
mize = '*11110100001010000101111#'
#print(len(mize))
for i in range(5):
    for j in range(5):
        print(mize[i*5+j],end='')
    print()
‘’‘
*1111
01000
01010
00010
1111#
’‘’

flag{222441144222}


SimpleRev

在这里插入图片描述
一个游戏,按d启动!q退出!
在这里插入图片描述
在这里插入图片描述
这里有两个数据,还有两个十六进制的字符串!
在这里插入图片描述
这里其实就可以直接写个脚本了!

text = "killshadow"
key = "adsfkndcls"#这里我手动把它改成了小写字母!
v5 = len(key)
for i in range(len(key)):
    for j in range(65,91):#注:这里不可以是90,否则不对
        if ord(text[i]) == (j - 39 - ord(key[i % v5]) + 97) % 26 + 97:
            print(chr(j),end='')
            break

#flag{KLDQCUDFZO}

Java逆向解密

这个是class文件,不是apk文件,当时我还在想,使用apk逆向软件能不能逆向成功,成功了!
在这里插入图片描述
很简单的一道题!

data = [180, 136, 137, 147, 191, 137, 147, 191, 148, 136, 133, 191, 134, 140, 129, 135, 191, 65]
for i in data:
    flag = (i ^ 32) - ord('@')
    print(chr(flag),end='')

#This_is_the_flag_!

刮开有奖

这道题还是有点诧异的!
在这里插入图片描述
此时用ida打开看看!
这个一看是没有输入的,而题目说是输入的解释正确答案?所以在ida中找找,发现一个疑似flag的地方!
在这里插入图片描述
在这里插入图片描述
然我们进去这个函数中看看!
在这里插入图片描述
所以此时我们就应该进去sub_401000该函数中进行分析!
在这里插入图片描述
这里是凭借经验来进行判断的!
不过经过一番试错后,发现这样子得到flag是不对的,说明我们遗落了什么!
在这里插入图片描述
所以我们进去看看,发现有点复杂!我们可以使用C语言进行改进并编写一下,看看其逻辑是什么?

#include<stdio.h>
#include<string.h>
int sub(char a1[],int a2,int a3)
{
  int result; // eax
  int i; // esi
  int v5; // ecx
  int v6; // edx

  result = a3;
  for ( i = a2; i <= a3; a2 = i )
  {
    v5 = i;
    v6 = a1[i];
    if ( a2 < result && i < result )
    {
      do
      {
        if ( v6 > a1[result] )
        {
          if ( i >= result )
            break;
          ++i;
          a1[v5] = a1[result];
          if ( i >= result )
            break;
          while ( a1[i] <= v6 )
          {
            if ( ++i >= result )
              goto LABEL_13;
          }
          if ( i >= result )
            break;
          v5 = i;
          a1[result] = a1[i];
        }
        --result;
      }
      while ( i < result );
    }
LABEL_13:
    a1[result] = v6;
    sub(a1, a2, i - 1);
    result = a3;
    ++i;
  } //printf("%s\n",a1);
  return result;
 } 
 
int main()
{
	char a1[20] = "ZJSECaNH3ng";
	int i;
	i = sub(a1,0,10);
	printf("%s\n",a1);
	return 0;
}
//3CEHJNSZagn

所以沉此时我们才可以找到正确的flag!
所以前两个字符就可以找到正确的了,而后面每3个一组的字符串进行base64解密!
flag{UJWP1jMp}


[GXYCTF2019]luck_guy

这道题粗略的看了看,感觉还是有意思的!
在这里插入图片描述
我们就进去看看!
在这里插入图片描述
进去看看!
在这里插入图片描述
所以此时可以进行写脚本来进行解密了!

f1 = 'GXY{do_not_'
print(f1,end='')
f2 = 'fo`guci'
f2 = f2[::-1]#这里记得倒过来,当时我就忘了,弄了一会儿才反应过来!
for i in range(8):
    if i%2 == 1:
        v = ord(f2[i]) - 2
    else:
        v = ord(f2[i]) - 1
    print(chr(v),end='')
#GXY{do_not_hate_me}提交时换成flag

findit

此时时apk文件,安卓逆向开始啦!
使用jadx进行反编译!
在这里插入图片描述
这里其实我们是不知道我们输入的是flag还是最后输出的是flag,我们此时就先从输入入手!
这里其实是可以直接上脚本,因为加密并不复杂!

a = ['T', 'h', 'i', 's', 'I', 's', 'T', 'h', 'e', 'F', 'l', 'a', 'g', 'H', 'o', 'm', 'e']

x = [0] * 17
for i in range(17):
    if (a[i] < 'I' and a[i] >= 'A') or (a[i] < 'i' and a[i] >= 'a'):
        x[i] = chr(ord(a[i]) + 18)
    elif (a[i] < 'A' or a[i] > 'Z') and (a[i] < 'a' or a[i] > 'z'):
        x[i] = a[i]
    else:
        x[i] = chr(ord(a[i]) - ord('\b'))
    print(x[i],end='')
#LzakAkLzwXdsyZgew

这里发现是没有flag的,所以我们下载到模拟器上这个软件,然后输入密码,就得到flag了!
在这里插入图片描述
这样我们就不用再看后面的flag加密了!
flag{c164675262033b4c49bdf7f9cda28a75}


简单注册器

又来了个apk文件,又是安卓逆向!
在这里插入图片描述
这里我们可以是写脚本找出flag,也可以找出一种符号条件的进入软件!

a = chr(int((56 + 48)/2))
for i in range(32):
    if i == 1:
        print('b',end='')
    elif i == 31:
        print('a',end='')
    elif i == 0 or i == 2:
        print(a,end='')
    else:
        print('1',end='')
#4b41111111111111111111111111111a

找到了一种可以通过判断的数据,输入进去就可以得到flag了!
在这里插入图片描述
flag{59acc538825054c7de4b26440c0999dd}


[BJDCTF2020]JustRE

这道题是个exe文件!
在这里插入图片描述
挺有意思的!这个直接ida就会发现它的主要逻辑!
在这里插入图片描述
然后我们直接看这个输出的是什么?
在这里插入图片描述
然后我们将那两个%d替换成19999和0就是flag了!
flag{199990d2069a45792d233ac}


[GWCTF 2019]pyre

发现是个pyc文件!直接使用EasyPython反汇编软件!就直接得到源码了!

# Embedded file name: encode.py
print 'Welcome to Re World!'
print 'Your input1 is your flag~'
l = len(input1)
for i in range(l):
    num = ((input1[i] + i) % 128 + 128) % 128
    code += num

for i in range(l - 1):
    code[i] = code[i] ^ code[i + 1]

print code
code = ['\x1f','\x12','\x1d','(','0','4','\x01','\x06','\x14','4',
 ',','\x1b','U','?','o','6','*',':','\x01','D',';','%',
 '\x13']

所以我们便可以根据这个进行写解密代码了!

code = ['\x1f','\x12','\x1d','(','0','4','\x01','\x06','\x14','4',
 ',','\x1b','U','?','o','6','*',':','\x01','D',';','%',
 '\x13']
t = len(code) - 2
while t >= 0:
    code[t] = chr(ord(code[t]) ^ ord(code[t + 1]))
    t -= 1
for i in range(len(code)):
    for j in range(127):
        if ord(code[i]) == ((j + i) % 128 + 128) % 128:
            print(chr(j),end='')
            break
#GWHT{Just_Re_1s_Ha66y!}

这样子就得到flag了!
flag{Just_Re_1s_Ha66y!}


rsa(未做)

看起来是个rsa算法,这个确实我并不会,所以先放下!


CrackRTF(未做完)

这个也是一个exe文件!同样使用ida进行打开!
逻辑比较简单!
在这里插入图片描述
此时我们就可以分析一下了!这两个函数其实是一样的!
在这里插入图片描述
这个%02x确实不知道,不过我们可以用C语言进行实验,看看这个东东是个什么?
此时通过一个简单是实验发现就是将字母弄成2位的十六进制数(本质上是ASCll码)

这里忽略了一个函数,就是上面的Hash函数,到下面估计就是MD5了!所以失败了!故我们再看看代码!
在这里插入图片描述
此时我们再进去看看!
在这里插入图片描述
接着进!
在这里插入图片描述
到这里确实不知道怎么做了!先放这儿!


[ACTF新生赛2020]easyre

在这里插入图片描述
加了个upx的壳,直接在kali中去壳!
在这里插入图片描述
去完壳后就可以ida看主函数了!
在这里插入图片描述
这时就可以写脚本了!

data = r"}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)(" + chr(0x27) + r'&%$# !"'

v4 = [42,70,39,34,78,44,34,40,73,63,43,64]
for i in range(12):
    for j in range(len(data)):
        if ord(data[j - 1]) == v4[i]:
            print(chr(j+1),end='')
            break
#U9X1SW6@T?

flag{U9X_1S_W6@T?}


[2019红帽杯]easyRE

没有加壳!
在这里插入图片描述
这里其实就个异或,然后我们可以开始写脚本了!

data = "Iod1>Qnb(ocy y.i d`3w}wek9{iy=~yL@"
v4 = len(data)
for i in range(v4):
    flag = ord(data[i]) ^ i
    print(chr(flag),end='')
#Inf2:The fir,t f0ur chars are `fla

前四个字符是flag,果然没有那么简单!
在这里插入图片描述
然后我就进了一堆解密,解出个https://bbs.pediy.com/thread-254172.htm网站!
这几个地方都是坑人的,所以我们在重新的看看逻辑!
然后再base64那堆字符串前面一个地方的下面有一个字符串,进行追踪可以找到正确flag的所在地!
在这里插入图片描述

data = [0x40, 0x35, 0x20, 0x56, 0x5D, 0x18, 0x22, 0x45, 0x17, 0x2F, 
  0x24, 0x6E, 0x62, 0x3C, 0x27, 0x54, 0x48, 0x6C, 0x24, 0x6E, 
  0x72, 0x3C, 0x32, 0x45, 0x5B]
flag = [102,108,97,103]
for i in range(4):
    flag[i] = flag[i] ^ data[i]
for i in range(25):
    f = data[i] ^ flag[i % 4]
    print(chr(f),end='')
#flag{Act1ve_Defen5e_Test}

[FlareOn4]login

这道题有点意思,其实还是比较简单的!
打开是个html!直接可以看到源码,通过分析,可以发现是
在这里插入图片描述
通过这个其实是可以进行开始编写脚本的!

var flag = "PyvragFvqrYbtvafNerRnfl@syner-ba.pbz";
var rotFlag = flag.replace(/[a-zA-Z]/g, function(c){return String.fromCharCode((c <= "Z" ? 90 : 122) >= (c = c.charCodeAt(0) + 13) ? c : c - 26);});
alert(rotFlag);

这个加密是rot13加密,

ClientSideLoginsAreEasy@flare-on.com
在这里插入图片描述


相册

这道题有意思,是个apk,同样也是个病毒。不错!直接jadx逆向:
在这里插入图片描述
上个源码看看!
在这里插入图片描述
然后发现new的里面是没有我们想要的flag,那么,我们就从方法入手,还是上图,从c2的方法再来追踪一番!探索探索!
发现了 C2.MAILFROME 这个是比较特殊!
在这里插入图片描述
平且我进去NativeMethod.m()发现是空的,所以这里猜测是进入ida去分析了!

NativeMethod代表是java引用外部的代码

在这里插入图片描述
18218465125@163.com


posted @ 2021-06-27 10:33  望权栈  阅读(22)  评论(0编辑  收藏  举报  来源