iOS(四)deb包获取&解析&安装
5/02/2015 gandalf
一、获取cydia安装的deb包
以biige商业间谍样本为例:
1、首先打开cydia安装,当下载安装完毕后,提示重启springboard,先不要重启,重启会删除deb包:
2、ssh [email protected]
3、find / -name com.biige.monitor*.deb
4、通过scp拷贝到本地
scp [email protected]:/private/var/mobile/Library/Caches/com.saurik.Cydia/archives/com.biige.monitor_1.9_iphoneos-arm.deb biige.deb
二、deb包格式
以ikeymonitor样本为例:
2.1 deb 文件是使用 ar 包装,包含了三个文件:
debian-binary - deb 格式版本号码
control.tar.gz - 包含包的元数据,如包名称、版本、维护者、依赖、冲突等等。 在dpkg 1.17.6 之后添加了对 xz 压缩和不压缩的 control 元数据的支持。[1]
data.tar.* - 实际安装的内容
其中,"*"所指代的内容随压缩算法不同而不同。常见的可能值为xz、gz、或bz2。有时也会使用lzma。
2.2 deb文件未打包之前目录
+- MyProgram
+- Applications
| +- MyProgram.app
| | +- Info.plist
| | +- MyProgram
| | +- icon.png
+- DEBIAN
+- control
其中,control文件可视为一个没有后缀的UTF-8,Unix编码,Unix/Linux换行符(LF)的一个文本文件,可用写字版进行编辑!
2.3 deb包解开后目录
.keycache文件夹为加载的资源
LaunchDaemons中即luachctl加载进程的plist文件
DynamicLibraries使用了三个MobileSubstrate的动态库:
keychain.dylib
MobileSafe.dylib
PreferencesEx.dylib
usr/bin中一个执行文件centerd,该文件与.keycache中的centerd为同一个文件
2.4 control文件夹
control.tar.gz解压后为一个control文件夹,里面包含三个文件:
这些是软件包安装前后自动运行的可执行脚本. 统称为控制文件, 是 Deian 软件包的"控制"部分它们是:
#preinst:Debian软件包(".deb")解压前执行的脚本, 为正在被升级的包停止相关服务,直到升级或安装完成。 (成功后执行 'postinst' 脚本)。
control:这个文件主要描述软件包的名称(Package),版本(Version)以及描述(Description)等,是deb包必须具备的描述性文件,以便于软件的安装管理和索引。
postinst:主要完成软件包(".deb")安装完成后所需的配置工作. 通常, postinst 脚本要求用户输入, 和/或警告用户如果接受默认值, 应该记得按要求返回重新配置这个软件. 一个软件包安装或升级完成后, postinst 脚本驱动命令, 启动或重起相应的服务.
prerm:停止一个软件包的相关进程, 要卸载软件包的相关文件前执行
#postrm:修改相关文件或连接, 和/或卸载软件包所创建的文件。
当前的所有配置文件都可在 /var/lib/dpkg/info 目录下找到, 与 foo 软件包相关的命名以 "foo" 开头,以 "preinst", "postinst", 等为扩展。这个目录下的 foo.list 文件列出了软件包安装的所有文件。Debian里用apt-get安装或卸载软件时,会常发生前处理或后处理的错误,这时只要删除 对应的脚本文件,重新执行安装或卸载即可。
2.4.1 control
一些软件和作者的基本信息:
Author: Awosoft Technology <[email protected]> //作者
Maintainer: BigBoss <[email protected]> //cydia源
Name: iKeyMonitor keylogger for iPad/iPhone/iPod //程序名
Package: com.aw.mobile.ikm //包名
Conflicts: com.aw.mobile.ikm64, com.aw.mobile.ikm.customized
Section: Security //软件类型
Depends: firmware(>= 3.0), mobilesubstrate (>= 0.9.5000), zip(>= 2.0), com.rpetrich.rocketbootstrap
Version: 3.9.0-51
Architecture: iphoneos-arm //软件包结构
Description: reports keylogging, web history, screenshots & more
Depiction: http://moreinfo.thebigboss.org/moreinfo/depiction.php?file=ikeymonitorDp
Homepage: http://moreinfo.thebigboss.org/moreinfo/depiction.php?file=ikeymonitorDp
Sponsor: thebigboss.org <http://thebigboss.org>
dev: ikeymonitor
Installed-Size: 5312
Tag: purpose::extension, ios7support::1, ios8support::1
2.4.2 postinst
安装脚本,主要程序为/Library/Caches/.keycache/centerd
并利用launchctl来启动centerd守护进程(plist文件指定),/Library/LaunchDaemons目录下随系统启动
#!/bin/sh
chown root:wheel /Library/Caches/.keycache/centerd
chmod 755 /Library/Caches/.keycache/centerd
chown root:wheel /Library/LaunchDaemons/com.aw.mobile.ikm.centerd.plist
chmod 644 /Library/LaunchDaemons/com.aw.mobile.ikm.centerd.plist
/bin/launchctl load -w /Library/LaunchDaemons/com.aw.mobile.ikm.centerd.plist
exit 0
2.4.3 com.aw.mobile.ikm.centerd.plist
/Library/LaunchDaemons/com.aw.mobile.ikm.centerd.plist
postinst里利用launchctl加载centerd进程
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.aw.mobile.ikm.centerd</string> //Label值,任务名,一般为plist文件名
<key>ProgramArguments</key>
<array>
<string>/Library/Caches/.keycache/centerd</string> //ProgramArguments值,需要执行的程序
</array>
<key>OnDemand</key>
<true/>
<key>RunAtLoad</key>
<true/>
<key>UserName</key> //指定程序运行用户为mobile
<string>mobile</string>
<key>StandardOutPath</key>
<string>/dev/null</string>
</dict>
</plist>
2.4.4 prerm
卸载脚本,只需要去掉centerd进程的启动项plist文件
#!/bin/sh
/bin/launchctl unload /Library/LaunchDaemons/com.aw.mobile.ikm.centerd.plist
exit 0
三、deb文件安装
3.1 dpkg安装
先拷贝deb文件进手机:
scp ikeymonitor_3.9.0-51.deb [email protected]:/private/var/ikeymonitor.deb
ssh登陆手机:
dpkg安装deb包:
dpkg -i ikeymonitor.deb
0 评论:
发表评论