buuctf&&RE&&前12道题

buuctf&&RE&&前12道题

本文章用到的工具

die下载地址 :https://github.com/horsicq/DIE-engine/releases

exeinfo下载地址 : https://github.com/ExeinfoASL/ASL/blob/master/exeinfope.zip

idapro下载地址:https://www.123pan.com/s/mCY8Vv-q4hWd.html
提取码:HUA0

jadx-gui 下载地址 https://github.com/skylot/jadx/releases/tag/v1.4.6

apkidc下载地址:https://down.52pojie.cn/?query=apkid

仅用于学习

easyre

用die分析一下

image-20220623153705178

使用ida64打开easyre.exe

image-20220623154005125

reverse1

image-20220623154250990

image-20220623154343804

shift+f12

image-20220623154505781

异或

image-20220623154611201

双击进入

image-20220623154755679

可以看到 lea 取 rcx str2 为 {hello_world}

让后f5反编译查看伪代码

image-20220624093942025

将:{hello_world}

替换o为0

reverse2

image-20220624094219719

image-20220624094330853

直接f5反编译

image-20220624094434960

让后shift+f12

image-20220624094808804

暂时存储一下

将 eax 取内存 {hacking_for_fun}

image-20220624094942907

返回看到

eax, byte ptr flag[rax]

回到刚刚反编译的伪代码

image-20220624095247209

image-20220624100011427

将 :{hacking_for_fun}

i和r替换为1

内涵的软件

image-20220624101137339

image-20220624103234143

双击进入main_0

image-20220624103334318

直接flag

新年快乐

image-20220624174141942

upx加密使用工具去壳 or 动态od 脱壳

image-20220625093823581

image-20220625093846273

idapro32打开就是flag

image-20220625094025841

xor

image-20220625095455799

无壳64位mac 软件 ida64pro打开直接f5反编译

image-20220625100109897

双金进入global

image-20220625100214564image-20220625100627931

双击进入里面

image-20220625100919422复制一份到剪贴板

让后shift+e

image-20220625101033616

转换为数组

密文[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, 0x00]

xor异或 密文 依次-1让后得到flag

1
2
3
4
5
6
7
8
cipher = [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, 0x00]
cipher_text=[0] *len(cipher)

result = ''
for i in range(1,len(cipher) -1):
result += chr(cipher[i] ^ cipher[i-1])
print(chr(cipher[0])+result)
#flag{QianQiuWanDai_YiTongJiangHu}

helloword

下载下来是个apk使用apkide打开

image-20220625105637665

依次打开smali>com>example>helloword>MainActivity.smali

image-20220625105737705

flag出来

image-20220625105835945

reverse3

image-20220625110529049

image-20220625110838140

双击进入_main_0

f5查看伪代码

image-20230316203948983

让后进去str2找到密文e3nifIH9b_C@n@dH

image-20230316203853019

先base64 在异或+- 逆向倒着来写出脚本

1
2
3
4
5
6
7
8
import base64
cipher = 'e3nifIH9b_C@n@dH'
result =''

for i in range(len(cipher)):
result +=chr( ord(cipher[i]) - i)
print(base64.b64decode(result))
#flag{i_l0ve_you}

flag{i_l0ve_you}

不一样的flag

image-20230316204307860

image-20230316204332415

查看无壳

ida32 打开直接就是main

image-20230316204430912

看到上写左右和一堆有规则的字符串猜测迷宫题目

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
*11110100001010000101111# 源字符串

*1111
01000
01010
00010
1111#
修改后


控制器

1 up 上
2 down 下
3 left 坐
4 right 右

flag{222441144222}

SimpleRev

image-20230316204930805

查克不存在发现是Linux 64位程序

让后使用ida64 打开调试发现 不行

一直都不能运行

image-20230316205029585

让后

使用ida静态分析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
v11 = __readfsqword(0x28u);
*(_QWORD *)src = 'SLCDN'; // NDCLS
v7 = 0LL;
v8 = 0;
v9[0] = 'wodah'; // hadow
v9[1] = 0LL;
v10 = 0;
text = join(key3, (const char *)v9); // text = killshadow
strcpy(key, key1); // ADSFK
strcat(key, src); // key = ADSFKDNLCS 错
// 大小端序
// key = ADSFKNDCLS 对
v2 = 0;
v3 = 0;
getchar();
v5 = strlen(key); // 长度给v5
for ( i = 0; i < v5; ++i )
{
if ( key[v3 % v5] > 64 && key[v3 % v5] <= 90 )// 将大写转换为小写
key[i] = key[v3 % v5] + 32;
++v3;
}
printf("Please input your flag:");
while ( 1 )
{
v1 = getchar(); // 缓冲
if ( v1 == '\n' ) // 输入回车退出
break;
if ( v1 == ' ' ) // 输入 v2加1
{
++v2;
}
else
{
if ( v1 <= 96 || v1 > 122 ) // v1 小写
{
if ( v1 > 64 && v1 <= 90 ) // v1大写
{
str2[v2] = (v1 - 39 - key[v3 % v5] + 97) % 26 + 97;// 算法
++v3;
}
}
else
{
str2[v2] = (v1 - 39 - key[v3 % v5] + 97) % 26 + 97;
++v3;
}
if ( !(v3 % v5) )
putchar(32);
++v2;
}
}
if ( !strcmp(text, str2) )
puts("Congratulation!\n");
else
puts("Try again!\n");
return __readfsqword(0x28u) ^ v11;
}

让写出脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import string

cipher = "killshadow"
key = "ADSFKNDCLS"
key = str.lower(key) # 转换小写
result = []
dic = string.ascii_uppercase + string.ascii_letters # 字典



for i in range(len(cipher)):
for j in dic:
if (ord(j) - 39 - ord(key[i]) + 97) % 26 + 97 == ord(cipher[i]):
result.append(j)
break
print("flag{" + "".join(result) + "}")
# flag{KLDQCUDFZO}

flag{KLDQCUDFZO}

Java逆向解密

是一个.class文件使用jadx-gui 打开

看到encode

让后进入

image-20230316205348723

写出逆向脚本

1
2
3
4
5
6
7
cipher = [180, 136, 137, 147, 191, 137, 147, 191, 148, 136, 133, 191, 134, 140, 129, 135, 191, 65]

key = [0] * len(cipher)
for i in range(len(cipher)):
key[i] = chr(cipher[i] - ord('@') ^ 32)
print("".join(key))
#flag{This_is_the_flag_!}

#flag{This_is_the_flag_!}

[GXYCTF2019]luck_guy

使用die 工具查壳 发现是64位 无壳子使用ida64 pro 打开

image-20230316221550448

默认进入main 函数 让后发现没有什么操作直接去patch_me –> get-flag

image-20230316223527577

密文[105, 99, 117, 103, 96, 111, 102, 127]

让后写出脚本

1
2
3
4
5
6
7
8
9
cipher = [105, 99, 117, 103, 96, 111, 102, 127] 
result = ''
for i in range(len(cipher)):
if i % 2 == 1:
result += chr(cipher[i] -2)
else:
result += chr(cipher[i] -1)
print(result)
#GXY{do_not_hate_me}

GXY{do_not_hate_me}


buuctf&&RE&&前12道题
https://huajien.gitee.io/2023/31421/
作者
HUAJI
发布于
2023年1月16日
许可协议