eBPF-for-Ghidrahttps://github.com/Nalen98/eBPF-for-Ghidra

Ghidrahttps://github.com/NationalSecurityAgency/ghidra

比赛时没有想到居然是这样的,fpbe逆回来是ebpf,在文件里面也可以看到bpf的函数,bpf的文件是直接包含再ELF中的,直接利用binwalk就可以分离出来

1

分离出F4018,利用Ghidra中eBPF-for-Ghidra插件进行反编译,github地址在上面

需要先创建一个项目,然后导入文件,对文件选择语言,然后点左上角的小绿龙

fpbe

进来可以看到就一个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)

2