好友
阅读权限 20
听众
最后登录 1970-1-1
本帖最后由 BaiGuQing 于 2025-12-16 22:23 编辑
引言
我希望能够帮助像我一样的新手,如果大佬发现WP有问题可以评论,我会改进!
ezVBS
我不得不说,要听劝。原题都告诉我了,不让我打开,我还就偏打开了,然后去网上搜VBS逆向,最后在赛博厨子那里逆向出了
I have already warned you not to run VBS directly, your computer is likely to be attacked because of this, just as your flag has been overwritten
当时没怎么注意文字,就去看官方WP了,结果打开记事本看了看,和WP上的不一样啊,我还以为题出错了,回来又下了一遍,没运行,直接记事本编译,我恍然大悟,给我自己气笑了
把execute换成wscript.echo,在根目录下运行cmd,输入cscript 1.vbs
复制回1.vbs
继续替换,直到出现正常的代码
这里再运行一遍,还需要替换一遍再运行,才能得到
然后交给赛博厨子
Q(≧▽≦)T
先运行一下exe文件,发现是输入账户密码类型的,我先用exeinfope看了下有没有壳,发现没有,就拖进了dbg,然后搜索了下字符串
中文乱码的话需要安装插件,x64dbg_tol
很明显有两个加密后的字符串以及各种提醒文字
如果运行了或者看到这个提醒就知道,用户名是四位数字的,我们输出1234试一试,在这之前先打个断点
运行后发现这个不是判定用户名是否正确的,而是下面的代码,到达断点后用f7到下面(记得先f9运行一下)
看到这里应该可以猜出是判断是否相等,看了之前的字符串,就知道03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4是我们输入的1234加密后的字符串
我们去赛博厨子跑一下
发现是SHA-256,我们就可以找一个在线平台破解一下之前的SHA-256
就得到了用户名
然后就去找关于密码的字符串继续看相应内容
转到相应的反汇编之后,会发现只有上面的函数和密码加密相关
然后就可以把exe丢到IDA分析一下了
最后就会发现是这个函数在进行加密
联系之前搜索到的字符串,去赛博厨子破解一下
就得到了flag
这道题我不看官方WP根本没头绪啊:(
Minesweeper
打开ms_obfus.js,然后把expert模式下的mines改为0x1,打开hmtl
剩余地雷为1就成功了,随便点一下
用chatgpt也可以直接出
easyApp
下个手机模拟器安装一下,就会发现是个输入+校验的程序
可以用jadx进行分析
接下来先看AndroidManifest.xml这个文件,它实际上是⼀个apk的配置文件,里面存储了apk的很多信息,包括程序入口点,我们要分析程序的执行逻辑,就得先找到程序的入口点
这个就是入口了,双击可以跳转
onCreat相当于c语言的main函数,就是入口函数
直接把代码丢给chatgpt :)
直接解压apk,会发现目录和这个反编译目录一样
然后把解压出来的bin文件继续拖到jadx
用一下官方WP的脚本
from z3 import *
a,b,c = Ints("a b c")
s = Solver()
s.add(a*3 + b - 27454419028250566601 == 0)
s.add(c*2 - 5*b + 20616666104378640363 == 0)
s.add(a + 4*c - 0x1dce62be9f0fa2f6c == 0)
if s.check() == sat:
result = s.model()
for var in (a,c):
print(hex(result[var].as_long())[2:],end="")
World's_end_BlackBox
先用exeinfope看看有没有壳,发现没壳,拖进ida发现也看不懂
直接拖进dbg搜索一下字符串
发现是输入两段字符串
把两段Length Error处上面的代码打上断点
然后双击到第一个length error处
发现他是在对比我们第一个输入的字符串长度,f9运行到这里
按空格将jz改为jmp
这里其实可以看到应该是长度为12才能过(0xC=12)
往下翻一翻会发现下面有个密码错误,在它上方打个断点
那很明显这是在对比密码正确与否,这时候按f9就能看到正确密码了
这里也需要改下汇编和上面一致
这里就显示了正确密码,如果你想要知道这个密码哪里来的
也很简单,看上方的每个函数,应该调用了两个函数,我们会发现第一个函数就是加密函数,采用的是xxtea
接着往下走会发现还有个长度错误
接着断点,改汇编,f9
接着往下看会发现有个all perfect的字样
在它上方打上断点
你会发现这两个断点之前有很多内容,但是真正重要的只有
这个函数,以及它上方的存储的东西
这里f9运行到刚打的断点,在这之前现在cmd框里输入点东西,因为之前那一大段内容现在用不到,这一部分是加密的
接下来就是看这个406D80的函数,看上面的汇编应该可以知道是传入了两个参数,一个是读取你的,一个是它自带的
双击这个40B0A0可以在内存框中看他存储了什么东西
两个值
然后进入406D80后,可以知道那里面就是对比长度和内容的。也可以得知这两个值相当于指针,从开始到结束
第一个是开始,第二个是结束,CTRL+g进行跳转
就找到了这段加密字符
ok,返回到之前那两个断点之前一大段的汇编那里
会发现401fcc是加密函数
这里给出官方的WP脚本
flag = [
0xFC, 0xEA, 0x15, 0x2C, 0x86, 0x38, 0x3F, 0xF3, 0x92, 0xCE, 0xDA, 0x8E, 0x48, 0xD3, 0x7, 0x9F,
0xD9, 0x57, 0xB1, 0xEE, 0x41, 0x9A, 0x4D, 0xC5, 0x65, 0x6A, 0xFF, 0xC9, 0x5D, 0x34, 0xAD, 0xEA,
0xB1, 0x20, 0x4B, 0xDC, 0xBD, 0xD2, 0x35, 0x2, 0x84, 0x35, 0x71, 0xEC, 0xE0, 0x48, 0x8E, 0xEA,
0x7B, 0xAA, 0xCF
]
key = "XaleidscopiX"
s = []
t = []
# KSA Initialization
for i in range(256):
s.append(i)
t.append(ord(key[i % len(key)]))
# KSA Scrambling
j = 0
for i in range(256):
j = (j + s[i] + t[i]) % 256
s[i], s[j] = s[j], s[i]
k = []
i = 0
j = 0
# PRGA Keystream Generation
for r in range(len(flag)):
i = (i + 1) % 256
j = (j + s[i]) % 256
s[i], s[j] = s[j], s[i]
t_val = (s[i] + s[j]) % 256 # 使用 t_val 避免与全局列表 t 混淆
k.append(s[t_val])
# Decryption (Final XOR operation)
for idx in range(len(flag)):
# Decryption formula: (Ciphertext XOR Keystream XOR 7)
decrypted_byte = (flag[idx] ^ k[idx] ^ 7)
print(chr(decrypted_byte), end='')
Calamity_Fortune
嘿嘿,这道题偷个小懒,看官方的WP吧,那个WP挺详细的了!
官方WP上传到网盘了
链接:https://pan.quark.cn/s/9d43fd9b16e3?pwd=gk2Y
提取码:gk2Y
Week4的WP我应该是不会更新了,对我来说有点困难了,已经复现一个多星期了,还没搞懂
过于依赖AI是不对的,我也只是来辅助我快速学习用而已,不要过度依赖= =
免费评分
查看全部评分