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 |
|