























text
工具: IDA Professional 9.3 (Windows)
目标: libc++_shared.so (ARM64)
问题: pelf.exe 不支持ARM64
解决: 用IDA打开so后用idb2pat.py导出pat
PowerShell
# 创建工作目录
New-Item -ItemType Directory -Force -Path C:\sig_work
cd C:\sig_work
# 复制sigmake工具
Copy-Item "C:\Program Files\IDA Professional 9.3\tools\flair\sigmake.exe" C:\sig_work\
PowerShell
# 方法1: 从NDK目录获取
$ndkBase = "$env:LOCALAPPDATA\Android\Sdk\ndk"
$ndkVer = (ls $ndkBase | Select-Object -Last 1).FullName
$soPath = "$ndkVer\toolchains\llvm\prebuilt\windows-x86_64\sysroot\usr\lib\aarch64-linux-android\libc++_shared.so"
Copy-Item $soPath C:\sig_work\
# 方法2: 从APK提取
# 把APK改名为zip解压
# 取 lib\arm64-v8a\libc++_shared.so
# 方法3: adb从设备提取
# adb pull /system/lib64/libc++_shared.so C:\sig_work\
PowerShell
# 验证so文件有效性
$bytes = [System.IO.File]::ReadAllBytes("C:\sig_work\libc++_shared.so")
$bytes[0..19] | ForEach-Object { "{0:X2}" -f $_ }
# 正确输出:
# 7F 45 4C 46 → ELF魔数 ✓
# 02 → 64位 ✓
# B7 → ARM64 ✓
text
1. IDA打开 libc++_shared.so
2. 等待自动分析完成(进度条消失)
3. File → Save 保存IDB文件
text
浏览器打开:
https://github.com/fireeye/flare-ida/blob/master/python/flare/idb2pat.py
下载后复制到:
C:\Program Files\IDA Professional 9.3\plugins\idb2pat.py
text
IDA中操作:
1. File → Script file
2. 选择 idb2pat.py
3. 弹出对话框选择保存位置:
C:\sig_work\libcxx.pat
4. 等待导出完成
PowerShell
cd C:\sig_work
# 注意: 文件名不能含++号
# libc++_shared.pat → 重命名为 libcxx.pat
.\sigmake.exe libcxx.pat libcxx.sig
text
第一次运行输出:
libcxx.sig: modules/leaves: 1670/3039, COLLISIONS: 129
同时生成 libcxx.exc 冲突文件
PowerShell
# 正确处理方式: 只删除开头4行注释
$content = Get-Content "C:\sig_work\libcxx.exc" -Encoding UTF8 -Raw
# 删除开头注释行
$newContent = $content -replace '(?s)^(;[^\r\n]*[\r\n]+){1,4}', ''
# 保存
[System.IO.File]::WriteAllText("C:\sig_work\libcxx.exc", $newContent)
# 验证格式(前5行应该是空行或函数名)
Get-Content "C:\sig_work\libcxx.exc" | Select-Object -First 5
text
正确的EXC文件格式:
(空行)
函数名A 00 0000 AABBCC...
函数名B 00 0000 AABBCC...
(空行)
函数名C 08 FC78 DDEEFF...
函数名D 08 FC78 DDEEFF...
PowerShell
# 删除旧sig
Remove-Item "C:\sig_work\libcxx.sig" -ErrorAction SilentlyContinue
# 重新生成
.\sigmake.exe libcxx.pat libcxx.sig
# 成功输出(无COLLISIONS):
# libcxx.sig: modules/leaves: XXXX/XXXX
PowerShell
# 复制到IDA sig目录
Copy-Item "C:\sig_work\libcxx.sig" `
"C:\Program Files\IDA Professional 9.3\sig\arm\libcxx.sig"
Write-Host "安装完成!"
text
1. 用IDA打开目标so文件
2. Shift+F5 打开Signatures窗口
3. 右键 → Apply new signature(Ins)
4. 找到并选择 libcxx
5. 点击OK等待识别
识别结果:
sub_1EE5C → std::string::c_str ✓
sub_3F890 → _Unwind_Resume ✓
text
libc++_shared.so (ARM64)
│
▼
IDA打开分析
│
▼
idb2pat.py导出
│
▼
libcxx.pat
│
▼
sigmake.exe
│
┌────┴────┐
│ │
成功 有冲突
│ │
│ 处理libcxx.exc
│ 删除前4行注释
│ │
│ 重新sigmake
│ │
└────┬────┘
│
libcxx.sig
│
▼
复制到sig\arm\
│
▼
IDA应用签名
│
▼
sub_xxx → 真实函数名 ✓
text
1. pelf.exe 不支持ARM64
→ 必须用IDA+idb2pat.py方案
2. 文件名不能含++
→ libc++_shared.pat 改名为 libcxx.pat
3. 处理EXC文件
→ 只删除前4行注释
→ 保留所有空行和函数名行
→ 用Raw模式读写避免格式损坏
4. so版本要匹配
→ 目标APK用哪个NDK版本
→ 就用对应版本的libc++_shared.so
5. 签名放置位置
→ ARM64 放 sig\arm\ 目录我们如何flart分析一个安卓so,用ida打开后发现依赖的so文件和ndk版本号,找到对应版本号的这些so文件,用ph制作sig文件
免责声明 本文档所有内容仅供安全研究、学术交流与技术学习使用,严禁用于任何未经授权的逆向破解、网络攻击、隐私窃取、恶意软件开发及其他违反《中华人民共和国网络安全法》《数据安全法》等法律法规的行为,使用者应确保已获得目标软件权利人的合法授权并自行承担因使用本文档内容所产生的一切法律责任与后果,作者不对任何直接或间接损害承担任何责任,继续阅读即视为您已知悉并同意上述全部条款。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。