前言
打包deb 最好使用sudo 来获取root权限或者使用fakeroot ,因为像/usr/bin 这中目录需要里面的文件所有者必须是root。
- Debian-Binary-Package-Building-HOWTO
invoke 'dpkg-deb --build' using 'fakeroot' on the 'debian' directory
- fakeroot dpkg-deb –build debian
- 使用fakeroot模拟root权限执行程序
fakeroot的实现:
1、fakeroot仅仅是简单的shell script。简单来说fakeroot做下面的事情。
* 启动faked,获取FAKEROOTKEY * 设置环境变量FAKEROOTKEY,LD_LIBRARY_PATH,LD_PRELOAD。执行命令(默认是shell)
2、faked是管理虚拟的文件所有者,文件权限信息的守护进程。 在fakeroot中执行的命令会加载由LD_LIBRARY_PATH,LD_PRELOAD环境变量指定的一个动态链接库(/usr/lib/libfakeroot/libfakeroot-sysv.so)
3、LD_LIBRARY_PATH=/usr/lib/libfakeroot LD_PRELOAD=libfakeroot-sysv.so
4、libfakeroot-sysv.so导出了chown()等函数,这些函数会使用FAKEROOTKEY与faked通讯,返回虚拟的所有者与权限信息。
小结:例如Debian生成package这样,在必须使用root的时候,使用fakeroot模拟root权限。fakeroot使用libfakeroot-sysv.so库文件中的函数与faked通讯管理文件权限信息。
NSLog
- Console– 自从调试iOS10 之后,就喜欢用这个
mac 下的 Console 程序也可以直接看设备的 NSLog
xcworkspace
- 修改工作空间包含的工程内容 xcworkspace/contents.xcworkspacedata
<FileRef
location = "group:name/name.xcodeproj">
</FileRef>
- 查看当前Xcode版本
devzkndeMacBook-Pro:guangyouqian devzkn$ gcc --version
Configured with: --prefix=/Applications/Xcode9.1.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode9.1.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include/c++/4.2.1
Apple LLVM version 9.0.0 (clang-900.0.38)
Target: x86_64-apple-darwin17.2.0
Thread model: posix
InstalledDir: /Applications/Xcode9.1.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
- xcode-select
devzkndeMacBook-Pro:guangyouqian devzkn$ sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
- xcodebuild
devzkndeMacBook-Pro:guangyouqian devzkn$ sudo xcodebuild -license
mac 的快捷键设置 辅助开发效率
- 打开系统设置的keyboard 窗口中有一个shortcuts 选项可以设置一些牛逼的快捷功能
# 在Services 中开启 new Terminal at Folder 等系统功能以及对应的快捷键
- 快捷键开启touch bar
#前天macOS 10.12.1 + Xcode 打开Xcode 使用shift+ command+5
- 常用快捷键
shift +command+N 创建目录
build phases
- -fno-objc-arc
[self onNextButtonClicked:nil];
添加此参数到编译参数中(build phases-》compile sources 的对应.m),可以避免没有调用没有声明方法的保存警告
dpkg-deb
- Layout/debian/postinst: 对应目录文件/var/lib/dpkg/info/**postinst
如果使用theos 的tweak,postinst 必须放在Layout/debian 下面,且debian 名称必须小写; 如果是使用dpkg-deb -Zgzip -b 的话,postinst 的目录可以放在大写的debian
- 查找postinst
iPhone:/var/lib/dpkg/info root# ls -lrt *postinst -rwxr-xr-x 1 root wheel 91 Mar 27 2011 app.weiphone.wecydia.icons.postinst -rwxr-xr-x 1 root wheel 449 Jan 3 2017 com.rpetrich.rocketbootstrap.postinst -rwxr-xr-x 1 mobile staff 198128 Feb 14 2017 net.angelxwind.appsyncunified.postinst -rwxr-xr-x 1 root wheel 135040 Feb 16 2017 cydia.postinst -rwxr-xr-x 1 mobile admin 993 Jun 24 2017 com.touchelf.app.postinst -rwxr-xr-x 1 root wheel 1366 Jul 19 2017 com.touchsprite.ios.postinst
- 查找preinst 等脚本
iPhone:/var/lib/dpkg/info root# ls -lrt com.touchsprite.ios*
---------- 1 root wheel 116 Jul 19 2017 com.touchsprite.ios.prerm
-rwxr-xr-x 1 root wheel 238 Jul 19 2017 com.touchsprite.ios.preinst
---------- 1 root wheel 258 Jul 19 2017 com.touchsprite.ios.postrm
-rwxr-xr-x 1 root wheel 1366 Jul 19 2017 com.touchsprite.ios.postinst
-rw-r--r-- 1 root wheel 46035 Aug 23 2017 com.touchsprite.ios.md5sums
-rw-r--r-- 1 root wheel 30695 Aug 23 2017 com.touchsprite.ios.list
- 打包
dpkg-deb -Zgzip -b ~/work/akno.git/Package ~/work/akno.git/com.akno.akno.deb <!-- @$(_THEOS_PLATFORM_DPKG_DEB) -b -Zgzip transitional/nodelete-net.angelxwind.appsync50plus debs/net.angelxwind.appsync50plus.deb -->
- 解压deb包控制文件和常规文件
dpkg-deb -R com.aun.ios_0.0.1-95+debug_iphoneos-arm.deb ./ayu
- dpkg -r 卸载 com.ios.deb
# dpkg -l 查询所有安装的包 # devzkndeMBP: devzkn$ ssh usb2222 dpkg -r com.ios
- 对二进制文件进行签名,或者使用 iResign对 ipa进行签名,就可以安装到非越狱的机器上
codesign -f -s "iPhone Developer:xxx” —entitlements Entitlements.plist Wat.app
- ldid命令查看签入的内容
devzkndeMacBook-Pro:bin devzkn$ ldid -e /Users/devzkn/decrypted/AppStoreV10.2/Payload/AppStore.app/AppStore
打包成ipa
- xcrun
xcrun -sdk iphoneos PackageApplication -v Wat.app -o ~/Wat.ipa
- dylib进行签名
codesign -f -s "iPhone Developer:xxx" xxx.dylib
plutil
tweak 的control文件
- Filter字段
# 所有普通app
{ Filter = { Bundles = ( "com.apple.UIKit" ); }; }
- 格式
<key>Executables</key>
<array>
<string>assntd</string>
</array>
<key>Bundles</key>
<array>
<string>com.apple.ios.SKitUIService</string>
</array>
SBWiFiManager
- 发现网络异常,就关闭,或者打开Wi-Fi— hook SpringBoard
[[objc_getClass("SBWiFiManager") sharedInstance] setWiFiEnabled:offOrOn];
- 判断wifi是否开启
[[SBWiFiManager sharedInstance ] wiFiEnabled]//YES //打开
- 得到当前链接Wi-Fi 的名称
[[SBWiFiManager sharedInstance ] currentNetworkName]
- cy 测试SBWiFiManager 均可以成功
cy# [[objc_getClass("SBWiFiManager") sharedInstance] setPowered:NO]; cy# [[objc_getClass("SBWiFiManager") sharedInstance] setPowered:YES]; cy# [[objc_getClass("SBWiFiManager") sharedInstance] setWiFiEnabled:YES]; cy# [[objc_getClass("SBWiFiManager") sharedInstance] setWiFiEnabled:NO];
Q&A
- dpkg: parse error, in file
/var/lib/dpkg/updates/0000' near line 16 package
com..’: EOF before value of field `Icon’ (missing final newline)
<!-- 就可以解决 -->
iPhone:/var/lib/dpkg/updates root# rm -rf *
- unable to execute decompressing archive member (xz):
# 大部分原因是dpkg-deb版本不一致导致的 ,修改编译的命令 dpkg-deb -Zgzip -b ~/work/akno.git/Package ~/work/akno.git/com.akno.akno.deb # -Z<type> Set the compression type used when building. Allowed types: gzip, xz, bzip2, none.
- This application’s application-identifier entitlement does not match that of the installed application. These values must match for an upgrade to be allowed
#这个项目App已经存在这个真机上了,这个App是旧的identifier运行的
解决方法:Xcode --->Window ---> Devices ---> 自己的真机 ---> installed Apps ----> 删除这个App ----> 重新运行
- usr/libexec/cydia/cydo returned an error code (2)
下载安装cydia
- http://cydia.saurik.com/package/com.rpetrich.rocketbootstrap/
- https://www.cydiamate.com/
- https://www.cydiamate.com/ios101.html
- 安装固件 (https://act.feng.com/wetools/index.php?r=iosRom/index)
借助iTunes,按住option+update,选择固件。
- iOS SSH 忘记密码解决办法
iphone的账号密码存储在/private/etc/master.password这个文件里,只需要在编辑它就可以了。 使用ifiles打开这个文件,找到下面的行: root:xxxxxxxxxxxxx:0:0::0:0:System Administrator:/var/root:/bin/sh mobile:xxxxxxxxxxxxx:501:501::0:0:Mobile User:/var/mobile:/bin/sh 将root: 及mobile:后面的13个x字符处修改成/smx7MYTQIi2M(注意是I是i的大写 )存此文件,你iphone的ssh密码就重新回到默认的:alpine
- cydia/jailbreakd.m:19:10: fatal error: ‘sys/dir.h’ file not found
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/usr/include devzkndeMBP:include devzkn$ ls -l dir* -rw-r--r-- 1 devzkn admin 6688 Feb 16 2017 dirent.h //#include <sys/dir.h> #include <sys/dirent.h>
本人亲试成功
See also
- http://developer.limneos.net/
- Yalu Jailbreak
- zjb
- iOS 11 & higher
- jailbreak11.1.1
- http://newosxbook.com/liberios/
- dpkg-error-contains-ununderstood-data-member
- ios-webView.
- List Wechat source files directory tree
- 这个工具在录屏时,会把用户的点击操作都录下来
- UIViewController.h
- iOS黑客技术大揭秘
- iOS 黑客技术大揭秘–适合新手看
- substrate
- substrate 源码
- 如何hook那些在IDA中显示为sub_xxx的函数
在操作过程或者文章有问题的话欢迎在 原文 里提问或指正。