惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
News and Events Feed by Topic
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
月光博客
月光博客
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
大猫的无限游戏
大猫的无限游戏
T
Tailwind CSS Blog
S
SegmentFault 最新的问题
V
V2EX
阮一峰的网络日志
阮一峰的网络日志
C
Cisco Blogs
博客园 - 叶小钗
P
Privacy International News Feed
Jina AI
Jina AI
Apple Machine Learning Research
Apple Machine Learning Research
T
Threatpost
IT之家
IT之家
博客园 - 聂微东
Know Your Adversary
Know Your Adversary
Help Net Security
Help Net Security
罗磊的独立博客
I
Intezer
S
Schneier on Security
博客园_首页
C
CERT Recently Published Vulnerability Notes
雷峰网
雷峰网
Cisco Talos Blog
Cisco Talos Blog
宝玉的分享
宝玉的分享
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Webroot Blog
Webroot Blog
TaoSecurity Blog
TaoSecurity Blog
MyScale Blog
MyScale Blog
P
Privacy & Cybersecurity Law Blog
T
The Exploit Database - CXSecurity.com
PCI Perspectives
PCI Perspectives
Security Latest
Security Latest
H
Heimdal Security Blog
S
Secure Thoughts
Hacker News: Ask HN
Hacker News: Ask HN
Y
Y Combinator Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Microsoft Security Blog
Microsoft Security Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
SecWiki News
SecWiki News
The GitHub Blog
The GitHub Blog
A
Arctic Wolf
A
About on SuperTechFans
aimingoo的专栏
aimingoo的专栏
T
Threat Research - Cisco Blogs
Engineering at Meta
Engineering at Meta
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC

博客园 - GKLBB

软件研发 --- AI模型 之 图片转xlsx 软件神器 --- ctf靶场 之 pwn.college 术语俗话 --- 什么是加密狗 软件神器 --- 自动电脑锁屏软件 软件研发 --- 网络安全 之 putty生成无密码登录密钥 软件神器 --- 视频剪辑 之 Avidemux MP4Joiner Shotcut 软件神器 --- 视频格式转化 之 handbrake 软件研发 --- 经验之谈 这个是什么图标,经常看到 软件研发 --- 术语俗话 之 多模态 术语俗话 --- 什么是大数据开发 软件研发 --- 术语俗话 之 什么是边缘计算 软件研发 --- 应知应会 之 什么是云计算开发 应知应会 --- 如何不装软件查看网速 常见问题解决 --- 360拦截接触 常见问题解决 --- 加入会议摄像头无法打开 网络安全 --- CTF打靶 之 ZIP伪加密 → Robot36慢扫电视 → 二维码补齐 → DeepSound隐写 → GPG解密 → Base64图片 → SilentEye隐写 软件研发 --- 应知应会 之 无错误的闪退如何解决 软件研发 --- 应知应会 之 为什么别人的软件如此复杂我的如此简单 网络安全 --- 应知应会 之 什么是旁站 应知应会 --- 如何查询备案 软件神器 --- 格式转化 之 jpg 2 svg 网络安全 --- CTF打靶 之 flag搜索 软件神器 --- 互联网测速 之 软件神器 --- 局域网测速 之 iperf 常见问题解决 --- 模拟器USG6000打开后,启动设备失败,错误40 软件研发 --- AI网络 之 ensp配置生成 软件研发 --- AI编程 之 极简流程 软件研发 --- AI生图产品比较 常见问题解答 --- 为什么我的服务一直被人DDOS 软件研发 --- 开发万能格式转化工具 网站神器 --- 在线格式转化 之 文档转md 术语俗话 --- 什么是云电脑 常见问题解决 --- 如何在没有安装杀毒软件的情况下知道这个文件是不是牧马 常见问题解决 --- Win10下VMware 17安装VMware Tools选项灰色/失效解决办法 常见问题解决 --- 云电脑报错 :PAGE FAULT IN NONPAGED AREA 记一次牧马的发现 人生感悟 --- 为什么我们生活中同一件事有多个品牌,他们到底有什么区别 软件运维 --- 云电脑安装打印机 常见问题解决 --- 网络打印默认端口 常见问题解决 --- 京瓷打印云电脑无法设置双面打印 软件研发 --- 网络安全 之 brupsuite如何设置上游袋里 术语俗话 --- 什么是同步和异步 我的目标 软件研发 --- dify配置 之 markword转word带有简单样式的方法 软件研发 --- 接口文档格式 常见问题 --- dify 的 deepseek是旧模型版本 OWASP 非营利性开源社区 计算机标准化组织 术语俗话 --- POSIX 就是 Unix 世界的"普通话",大家说同一种语言就能互相理解。 我的数字生活唯一选择 软件开发 --- 安卓开发 之 命名空间隔离 术语俗话 --- 页面对齐、 跨页 计算机的哪些人 --- 社交之王 马克·扎克伯格 计算机的哪些人 --- 重新定义新能源 之 埃隆·马斯克 软件研发 --- AI生成ppt word excel pdf的开发关键 软件研发 --- AI应用开发 之 AI生成Word 人生感悟 --- 致可悲的人 软件研发 --- pdf 表格图片 转 excel 常见问题解决 --- 装有系统的固态硬盘错误 人生感悟 --- 什么是行业黑话 术语俗话 --- Kubernetes 术语俗话 --- 什么是DBI,和hook什么区别 答疑解惑 --- 为什么苹果手机电池不允许拆卸 代码可视化技术 术语俗话 --- Wrap 函数 人生感悟 --- 逆向工程为什么十分枯燥且无聊 --- 这里引用一句逆向工程核心原理的话 人生感悟 --- 为什么干活时不见同事,活干完了就来了 软件研发 --- AI应用研发 之 提炼提示词 软件研发 --- AI应用开发 之 AI生成PPT最佳方案 基于屏幕-摄像头的单向数据传输方案设计 俗语俗话 --- 纯虚函数 硬件研发 --- 产品介绍 之 AX6 硬件研发 --- 产品大全 之 SUMAVISION CM50X 应知应会 --- 为什么U盘不识别但是还是可以数据恢复回来 应知应会 --- 为什么我删除了一个文件但是还是可以恢复回来 软件研发 --- AI UI设计 之 PC端效果比对 常见问题修复 --- chrome浏览器白屏 应用安全 --- 逆向工程 之 C++类的本质 软件研发 --- AI提示词开发 之 代码注释提示词 dobby反编译 https://www.cnblogs.com/Un1corn/p/18615567 应知应会 --- 手机作为热点,windows电脑临时作为网关,给其他电脑上网 应知应会 --- 大量小文件如何快速迁移 常见问题解决 --- apk安装过程中闪退 应用安全 --- 安卓逆向 之 dobby框架 在线生成 APK 图标工具推荐 一个开源库 术语俗话 --- 什么是软件即服务 软件神器 --- 常用谷歌插件 应用安全 --- 逆向技巧 之 识别未知函数 人生感悟 --- 为什么两句话可以说明白的事情要500字说明 软件研发 --- Dify 生成 PPT 方案分析 https://yuuki.cool/ 应用安全 --- 逆向技巧 之 ELF节(Section) 与 段(Segment) 硬件研发 --- 接口 人生感悟 --- 为什么ld一直爱开会 应用安全 --- 逆向技巧 之 IDA和claude反编译缺陷 应用安全 --- 逆向技巧 之 ida反编译yahfa的so和源码的差异化比对
应用安全 --- 逆向技巧 之 IDA未知函数如何识别
GKLBB · 2026-04-09 · via 博客园 - GKLBB

什么是未知函数

在逆向中有一类函数没有名字,但是客观存在,ida会给这类函数重命名一个函数名称,sub_xxxx,如何准确识别此类函数至关重要。

 如何快速识别函数

sub_xxxx 函数识别操作方法

一、先看调用了什么函数(最快)

text

看到这些调用组合 -> 直接判定

malloc + realloc + free + std::terminate
-> 动态容器扩容函数

__cxa_allocate_exception + __cxa_throw + std::logic_error
-> STL异常包装函数

__cxa_begin_catch + __cxa_end_catch
-> 异常捕获处理函数

__dynamic_cast + strcmp
-> RTTI类型匹配函数

pthread_mutex_lock + pthread_mutex_unlock
-> 线程安全操作函数

_ReadStatusReg(TPIDR_EL0)
-> ARM64运行时/TLS相关函数

memcpy + memset + operator new + operator delete
-> 对象构造/复制函数

fprintf + fflush + abort
-> 错误诊断/断言函数

二、看魔数(第二快)

text

函数体内出现这些数值 -> 直接判定

22 或 0x16
-> std::string SSO操作

4 或 0x4(与字符串操作同时出现)
-> std::wstring SSO操作

0xFFFFFFFFFFFFFFF0
-> 16字节内存对齐操作

0x1000
-> 页式Arena分配器

0xFF0 / 0xFFF0 / 4032 / 4048
-> Arena页剩余空间阈值检查

0x434C4E47432B2B
-> libcxxabi异常魔数 "GNUC++"

0x7FFFFFFFFFFFFFE6 / 0x3FFFFFFFFFFFFFF0
-> std::string/wstring最大长度检查

23 或 0x17
-> std::string容量分配边界

三、看参数结构(第三快)

text

参数是 _QWORD* 且函数内访问 [0][1][2]
-> 三元组结构体 大概率是容器或string对象
   [0]=数据指针/flags
   [1]=size/end指针
   [2]=capacity指针

参数是 char** 且函数内访问 [0][1][2]
-> 输出缓冲区结构
   [0]=缓冲区基址
   [1]=当前写入位置
   [2]=总容量
   -> 判定为某种emit/print/序列化函数

参数是 __int64 且访问 +4912 偏移
-> C++符号解码器的parser状态
   -> 判定为demangler内部函数

参数只有一个 __int64 且访问大量固定正偏移
如 +16 +24 +32 +40 +48
-> AST节点操作函数

四、看字符串常量(直接定性)

text

出现这些字符串 -> 直接命名

"libunwind: %s - %s\n"          -> libunwind诊断函数
"getRegister"                   -> 寄存器读取函数
"unsupported arm64 register"    -> ARM64寄存器错误处理
"stoi" / "stol" / "stoul"       -> STL字符串转整数函数
": out of range"                -> STL越界异常构建
": no conversion"               -> STL无效参数异常构建
"operator "                     -> C++符号解码operator节点
"decltype("                     -> C++符号解码decltype节点
"template<"                     -> C++符号解码模板节点
" [enable_if:"                  -> C++符号解码SFINAE节点
"enum" "struct" "union"         -> elaborated type解析
"allocator<T>::allocate"        -> 分配器容量超限错误
"unwind_phase2"                 -> libunwind第二阶段展开

五、看控制流形状(快速分类)

text

函数体只有一条jmp
-> thunk/桩函数 j_前缀 不用分析

函数体只有ret或xor返回0
-> nullsub空函数 跳过

有两层嵌套if且都检查同一个指针的不同位
-> SSO string判断 std::string或std::wstring操作

有 offset - 阈值 <= 大负数 的无符号比较
后跟 malloc(0x1000)
-> Arena分配器扩容逻辑

有 v >> 3 和 v >> 2 同时出现
-> vector/容器的按元素大小计算指针
   8字节元素容器

switch case -2,-1,0,29,30,31,32,34
-> ARM64寄存器编号映射函数

while循环体内有 & 0x80000000 检查
-> libunwind栈帧遍历函数

六、看vtable调用偏移(C++虚函数定位)

text

*(vtable + 0)   -> 析构函数
*(vtable + 8)   -> 析构函数(带delete)
*(vtable + 16)  -> 第一个虚函数
*(vtable + 32)  -> 常见print前置/emit函数
*(vtable + 40)  -> 常见print后置/emit函数
*(vtable + 56)  -> search_above_dst(RTTI搜索)

节点偏移规律:
node + 8   -> 节点类型标志(4字节int)
node + 16  -> 第一个子节点或字符串指针
node + 24  -> 第二个子节点
node + 32  -> 第三个子节点
-> 判定为AST节点操作函数

七、FLIRT签名匹配操作

text

IDA操作步骤:
1. File -> Load File -> FLIRT Signature File
2. 选择对应平台的 .sig 文件
   iOS/Android ARM64 -> 用 ios_arm64.sig 或 android_ndk.sig
3. 自动识别标准库函数

手动生成签名:
1. 找到已知的.a静态库
2. pelf -> sigmake -> 生成.sig
3. 加载到IDA

常用签名库来源:
- IDA自带 sig目录
- https://github.com/push0ebp/sig-database
- https://github.com/Maktm/FLIRTDB

八、Bindiff/Diaphora 交叉比对

text

操作步骤:
1. 找到开源版本的同名库(libc++/libunwind/libc++abi)
2. 编译相同架构版本
3. 用Bindiff或Diaphora对比两个idb
4. 相似度>0.9的函数直接采用开源名称

适用场景:
- 目标二进制静态链接了开源库
- libc++ libunwind libc++abi libstdc++
- OpenSSL mbedTLS等常见第三方库

九、优先级顺序总结

text

拿到一个 sub_xxxx 按以下顺序操作:

第1步  看有没有字符串常量            5秒内得出结论
第2步  看调用了哪些已知API            10秒内得出结论
第3步  看参数个数和类型结构           15秒内得出结论
第4步  看函数内的魔数                 20秒内得出结论
第5步  看控制流形状和switch结构       30秒内得出结论
第6步  看vtable偏移和调用模式         1分钟内得出结论
第7步  FLIRT签名自动匹配             批量处理
第8步  Bindiff交叉比对               深度分析时使用

能在前3步确认的不要拖到后面
多个维度同时印证才能提高准确率
单一维度匹配要保持怀疑

免责声明 本文档所有内容仅供安全研究、学术交流与技术学习使用,严禁用于任何未经授权的逆向破解、网络攻击、隐私窃取、恶意软件开发及其他违反《中华人民共和国网络安全法》《数据安全法》等法律法规的行为,使用者应确保已获得目标软件权利人的合法授权并自行承担因使用本文档内容所产生的一切法律责任与后果,作者不对任何直接或间接损害承担任何责任,继续阅读即视为您已知悉并同意上述全部条款。