BeginCTF2024部分逆向
real_xor
给的python,一眼循环异或
xor-1
先脱壳
搜字符串找到密文
从start进入,找到code
复制数字和明文
异或数字
反向异或,其实伪c是很奇怪的i=0,下标为16,但是看汇编确实是这样
而且c用16来算就是对的
又来一整轮
ida7.5可以显示中文
当时就这样,直接乱序
我知道了,我写的脚本是一位一位的加到flag里,而现实是16位算完直接复制的,当然有点问题,第一个f没了
1  |  | 
下面用动调做:
椰奶师傅说是要去符号表,这里本来就去了符号,不过链接好的地址没有去
符号通常是变量或函数的名称,符号表可用于确定变量或函数在内存中的位置。
所以strip一下可以去掉,现在就只剩下偏移了,而且可以直接动调到密文比较处


真的从0x7f开头变成0x14开头啦,而且直接出
红白机-1
6502汇编
找不到flag头
结果跟我说在线网站
https://itema-as.github.io/6502js/
俄语学习-1
直接乱输,然后修改zf绕过
伪rc4?
str复制有点奇怪,是0到strlen,后面密文比较也是少了一位
直接逆向跑出来这个鬼东西
1  |  | 
后面显示说上面每答对一个问题,就填充一部分s盒,所以我的绕过会使s盒有问题,怪不得说正向加密也会不对
正确的s盒,果然和我的有差别
也可以直接猜是rc4,因为我找不到rc4的初始化过程
1  |  | 
还可以直接交叉引用(x)找资源
superguesser-1
有很多这样的花指令,反编译错误在数据后面
转化为数据之后无法创建函数
可能用脚本去花指令?
加了XObf混淆器
下硬件断点可以在这些字符串被引用的时候断下来
可以看到停在了输入
不断ctrl+f7(找函数调用关系)
直接猜异或
ezpython-1
找不到key和enc,要去secret.pyc里找
这就要求必须用python3.8反编译
也可以直接大厨
stick game-1
类似于跳一跳
有obfus混淆
用网站去混淆
一开始let score=0,后面会resetGame
直接去改关键词score,发现分数好像没变
要么去case6score+=99999999
要么去改scoreElement,本质上还是score
死了才能获得flag
在html界面找到元素下断点,然后玩游戏立刻就能找到真正的score
arc-1
大致来说就是字典太多,pydc反编译不了,我这里用python3.8.3编译,用anconda默认的3.8.13不行
一行行运行,得到类似结果
最终是list里又是list
替换之后发现是3维列表
最后也就是这个样子,不懂的可以问gpt
1  |  | 
写脚本爆破
1  |  | 
not_main-1
main函数有个tea
有veh反调试
本题通过实现一个全局类让程序在main函数之前就执行类的构造函数,在main函数结束后执行类的析构函数
构造函数中veh定义了int 3断点和除0异常的处理方法
int3断点的处理逻辑是,当前程序在main函数中会执行事先放置的int3,此时如果在未调试的情况下,程序将异常交给veh处理,将一个dword_405038赋值为0. 如果是调试情况下将异常交给调试器处理,如果此时调试器处理异常则不会交给veh,则dword_405038为1.main函数接下来会对输入进行虚假的判断。在判断后进入到析构函数中
析构函数会根据先前的dword_405038即图中的is_debug变量的值判断是否除零。除零进入到veh handler的除零异常处理块中
后面是标准的xxtea
在start里找到关键函数
第三个参数可以看到两个疑似密文的地址
unk_485018引用分别在Handler和main,有可能是main里的假密文
第四个则会触发Handler
Handler内的unk_485018引用则再次进行了这个操作,也就是说等于没异或
所以如果真逻辑在Handler内,unk_485018就是没用的数据,真正的密文就是unk_48503C
可以以这种方式取数据
发现调用Handler在main之前
可以看到main当中的明文是从Handler中引用的,可能XXTEA之后又进行了TEA
1  |  | 
出题人的密码-1
有花指令,按官方wp的方法去花指令
call指令按u,下一行按c,再nop call,把90转为数据,再按c变为nop
密文
搜Buffer的引用就可以快速找到加密函数
直接逆向,但是v2不知道
直接下断点会有反调试,回到主函数,下断点判断反调试在一开始的地方
修改zf绕过
发现下面还有一个,再次改zf
直接得到的key是不对的,因为还有时间反调试
nop掉然后apply,输入账号的时候记得输入群号612995005
交叉引用输入的字符串
先+5 ^0x25,然后传给比较的密文
主要加密是一个魔改的crc64,通过和零比较,从而进行不同的加密,实际上是比较最高位
可以直接逆
高位溢出到了最低位,所以看密文最低位,根据最低位判断这个数在加密前最高位是1还是0
1  |  | 
goforfun-2
和big库有关
rc4部分很难辨别,同时key也找不到
1  |  |