一个做微信文章的网站,莱芜都市网房产网,深圳外包软件开发,淮北论坛创建文明城市写在前面
通过 ghidra 工具, 但是只能用命令行启动, 不太舒服, 写个脚本生成 MacOS 的 app 格式并导入启动台.
不算复杂, 主要是解析包的一些元信息还有裁剪软件图标(通过 MacOS 自带的 API)
脚本
#!/opt/homebrew/bin/python3import os
import re
import subprocess as sp… 写在前面
通过 ghidra 工具, 但是只能用命令行启动, 不太舒服, 写个脚本生成 MacOS 的 app 格式并导入启动台.
不算复杂, 主要是解析包的一些元信息还有裁剪软件图标(通过 MacOS 自带的 API)
脚本
#!/opt/homebrew/bin/python3import os
import re
import subprocess as spbase_path /Applications
app_name Ghidra
exec_file ghidraRuntarget_path f{base_path}/{app_name}.app/Contentsif not os.path.exists(target_path):print(f{target_path} not exists, creating.)cmd fmkdir -p {target_path}/{{MacOS,Resources}}os.system(cmd) target layout
.
└── Contents├── Info.plist├── MacOS│ └── ghidraRun - /opt/homebrew/bin/ghidraRun└── Resources└── logo.icns
# 0. get meta Info
_, brew_prefix sp.getstatusoutput(brew --prefix)
_, brew_info sp.getstatusoutput(fbrew info {app_name})
if brew_info.find(Not installed) ! -1:print(f{app_name} not installed, install...)os.system(fbrew install {app_name})version_num re.match(r.*?(\d\.\d\.\d)[\s,], brew_info).group(1)
exec_dir re.findall(r Artifacts\s(.*?)\(Binary, brew_info)[0].strip()
installed_dir exec_dir[: exec_dir.rfind(/)]
img_file f{installed_dir}/docs/images/GHIDRA_1.png# 1. create soft link
src_exec f{brew_prefix}/bin/{exec_file}
print(fcreate soft link : {src_exec} {target_path}/MacOS/{exec_file})
os.system(fln -s {src_exec} {target_path}/MacOS/{exec_file})# 2. create icon by using sips
print(fresize png file {img_file})
tmp_img_file tmp.png
os.system(fsips -z 512 512 {img_file} -o {target_path}/{tmp_img_file})
icns_file logo.icns
print(fgenerate icns file {icns_file})
os.system(fsips -s format icns {target_path}/{tmp_img_file} -o {target_path}/Resources/{icns_file}
)
os.system(frm {target_path}/{tmp_img_file})# 3. create Info.plist
info_plist f?xml version1.0 encodingUTF-8?
!DOCTYPE plist PUBLIC -//Apple//DTD PLIST 1.0//EN http://www.apple.com/DTDs/PropertyList-1.0.dtd
plist version1.0
dictkeyCFBundleName/keystring{app_name}/stringkeyCFBundleExecutable/keystring{exec_file}/stringkeyCFBundleIdentifier/keystringorg.{app_name}/stringkeyCFBundleDisplayName/keystring{app_name}/stringkeyCFBundleVersion/keystring{version_num}/stringkeyCFBundleIconFile/keystring{icns_file}/string
/dict
/plistprint(fwrite info.plist to {target_path}/Info.plist)
with open(f{target_path}/Info.plist, w) as f:f.write(info_plist)更新地址; 可以放在任意位置, 执行之后应该就会出现火龙的标志了: