ebpf逆向

一、提取字节码

0
0
 
0
 

二、反编译

1、strings

strings ./xxx
0
优点:代码可读性强
缺点:代码不太完整,零零散散的

2、ghirda

反编译结果如下:
0
优点:代码完整
缺点: 代码可读性差,一些变量名没有被解析出来,极其熟悉ghirda的伪代码的uu可能感觉会好点,

3、ida插件

0
缺点:不能反编译,只能eng看汇编

4、bpftool

强推 bpftool
安装 BPFTool
# 安装 sudo apt install linux-tools-$(uname -r) # 检查安装 bpftool version
gdb调试越过字节码加载函数后
0
0
使用sudo bpftool prog show 命令
 
0
可以看到 加载的字节码名字,LBB0_1 、LBB0_2 ,记住其id
打印字节码
sudo bpftool prog dump xlated id 36 > LBB0_2.txt
0
得到IR
 
0
优点:代码可读性强,有注释,转换性强,易于转化为c语言再转用ida反编译
方便通过chatgpt进行解读
 
 

三、CTF实战

昨天刚结束的西湖论剑
提取字节码文件后,使用bpftool得到ir文件,之后交给chatgpt解读:
0
 
0
exp
from struct import * cipher = bytes.fromhex("F327471B8F09FB177048B05332DBC0B8632D404BF516F035E7DFEAA29C41B325D70C339C7B5ACD13BBEE3E0EF2CF35DAAFA2667D3837671E1F6B7B300B7A02A9C8612741DB0122316FB6D41B04D394B846C724CFBDAF0BDC2EBBB271F4995736D1955292BA6DF33050599BEA2F83DCF0DE57A1ACD251A21D59A800B6E265410C4FEBF02E582A1FF49572887CA90ECB3C42B9F3499B529812A31751C059400ABCE84C04FB130A173FE63697DFB3E2427FF8CC0ED177C4A84648E3F10AEF9456545BCABDDD7F5647C299FA89CCE1B93A78E23758011BC34BE68CF3E5B6719E63AF11CE87F66EDEC8B1D07A156C1008997B2255107A8273FC62CB34A7B762FA6B9F") key = bytes.fromhex("C1D10261D6F713A29B20D04A8F7FEEB9006334B033B78A8B94602E8E21FF9082D587967822B6486C45C75A1680FDE48CBF011F4B7924A0B4234D3BC55D6F0DC9D4CA55E039AD2BCD2CECC26B30E60CA89A2FF6E8BB3257FB0B9DF23FB5F959E510CF5141E950DF267458CB645473ABF4B29F18F84EFE081D4F49D3AC3812771169071C99B3E73D05D8FC704693096589B1C652FAD20EA917E391A1685B2AF0C342CC29DEDC8598315CBC2DEF5E7EAF6762A75688A44340E1379E36767184BD068D477D53D7C8CE1592954C286D75EB7CF3BEAAB8ED033C273E19DDA666251EC46EC0E2DB3AD981A51BF504AEBAEA97833544A37A1AF186DA7B14729C6A0F5F0A") output = b"" # print(len(set(key))) for i in range(len(key)):     output += pack("B",key.find(cipher[i]) ^ key[i]) arr = [0x00000080, 0x00000040, 0x00000020, 0x00000010, 0x00000008, 0x00000004, 0x00000002, 0x00000001] for i in range(0,256,8):     for j in range(20,127):         for k in range(8):             if key[(j^(~(j+arr[k])))] != output[i+k]:                 break         else:             print(chr(j),end='')
flag即为:
71c2ac98ac8d99a2e8a95111449a7393

__EOF__

本文作者_TLSN
本文链接https://www.cnblogs.com/lordtianqiyi/articles/17090733.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   TLSN  阅读(659)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示