eBPF-for-Ghidrahttps://github.com/Nalen98/eBPF-for-Ghidra
Ghidrahttps://github.com/NationalSecurityAgency/ghidra
比赛时没有想到居然是这样的,fpbe逆回来是ebpf,在文件里面也可以看到bpf的函数,bpf的文件是直接包含再ELF中的,直接利用binwalk就可以分离出来
分离出F4018,利用Ghidra中eBPF-for-Ghidra插件进行反编译,github地址在上面
需要先创建一个项目,然后导入文件,对文件选择语言,然后点左上角的小绿龙
进来可以看到就一个uprobeh函数,里面就是输入的16位flag拆成四个,进行四元四次解方程
EXP
1 2 3 4 5 6 7 8 9 10 11 12
| from z3 import *
a,b,c,d=BitVecs('a b c d',32) s = Solver() s.add(28096*a+64392*b+29179*c+52366*d == 209012997183893) s.add(61887*a+27365*b+44499*c+37508*d == 181792633258816) s.add(56709*a+32808*b+25901*c+59154*d == 183564558159267) s.add(33324*a+51779*b+31886*c+62010*d == 204080879923831)
s.check() m = s.model() print(m)
|
1 2 3 4 5 6 7 8 9 10
| b = 1651261811 a = 861042224 c = 1148205171 d = 859138098 tmp = a.to_bytes(4, byteorder='little', signed=False) tmp += b.to_bytes(4, byteorder='little', signed=False) tmp += c.to_bytes(4, byteorder='little', signed=False) tmp += d.to_bytes(4, byteorder='little', signed=False) print(tmp)
|