羊城杯2023
type
status
date
slug
tags
summary
category
icon
password
尽力了吧,re这边剩下俩题都是一解,赛中肯定没时间做了,最近忙完来复现
9-22:babyobfu混淆去掉了,加密不太能搞懂,主要是不想调了,调着patch一次真有点精神污染
10-11:还是回来做了,搞定了算
Ez加密器
调一下发现输入六位秘钥(注意是全数字),base64变表成八位做DES秘钥
爆破六位即可
Blast
比较像Bogus Control Flow,网上脚本去不太干净,把jump $5给nop掉之类的手动修修可以angr脚本恢复main,程序有md5的特征,动调发现比对的地方是flag输入的每一位的md5(md5()),写脚本map一下就行
vm_wo
转化提取一下opcode,模拟流程,单字节加密直接映射回去就行
CSGO
patch反调试,动调获取base变表直接在线解即可
表:LMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/ABCDEFGHIJK
babyobfu
赛中的零解题,结果回来看真的不那么难......
比较明显的有两种smc,一种解密后续代码,一种加密前面的代码;后续询问了出题人,这里的smc粒度是基本块,量较大
有一个很直观的思路,就是把解密后续代码的
smc1
执行后nop掉,全局nop掉加密前面代码的smc2
,初始化smc数据的函数可以不处理其实只需要这一句即可:
先跑一次观察最后的位置,然后在那个位置下断点,然后就可以得到几乎所有代码
中间存在特判,可以看出来是
0-9a-e
的类似uuid的格式,这里没有执行这些地方的代码,但是smc会影响反编译,所以可以手动找到jnz
jmp
之类的位置手动patch一下,然后可以得到main函数和一些加解密、check操作密文:
加密:(这里有个AES的sbox,明显是用来干扰插件的,必须去干净才能看到实际用途)
其实基本上就没啥东西了,这就是ycb的零解题......
10.11 补个完整流程
首先是smc和冗余的去除,前面用的动态patch有个问题,在于无法将结果应用回输入文件(文件自smc的部分是没办法写回去的,必须自行patch)
可以考虑动态获取所有smc的base_addr,脚本smc进行patch(脚本来源于gyc爷,相当精细的patch,考虑到很多传参和编译器优化,能几乎完美去除混淆)
检查uuid格式
通过盒做一个转化映射:
然后做了一个递推循环(可逆)
流程用python写一下这样:
(秘钥流需要自己动调获取)
可以得到exp:
完结撒花
上一篇
长城杯2023
下一篇
交叉编译以及其他架构逆向初探
Loading...