iOS逆向:tweak开发教程(iPhone/tool)

简介: iOS逆向:tweak开发教程(iPhone/tool)

前言

可以使用makefile的after-install来修改tweak的可执行文件及配置文件的权限

after-install::
 install.exec "echo '' > /var/log/syslog"
## install.exec "killall -9 taokeTool"
 install.exec "chown root:wheel /usr/bin/taokeTool"
 install.exec "chown root:wheel  /Library/LaunchDaemons/com.wl.tktool.plist"
 install.exec "reboot"

编写iphone/tool

devzkndeMacBook-Pro:taokeTool devzkn$ export THEOS=/opt/theos
devzkndeMacBook-Pro:taokeTool devzkn$  $THEOS/bin/nic.pl
NIC 2.0 - New Instance Creator
------------------------------
  [1.] iphone/activator_event
  [2.] iphone/application_modern
  [3.] iphone/cydget
  [4.] iphone/flipswitch_switch
  [5.] iphone/framework
  [6.] iphone/ios7_notification_center_widget
  [7.] iphone/library
  [8.] iphone/notification_center_widget
  [9.] iphone/preference_bundle_modern
  [10.] iphone/tool
  [11.] iphone/tweak
  [12.] iphone/xpc_service
Choose a Template (required): 10

创建Theos 的软链接

ls -l
lrwxr-xr-x  1 devzkn  staff     10 Oct 16 15:09 theos -> /opt/theos
devzkndeMacBook-Pro:taoketool devzkn$ sudo  ln -s  /opt/theos ./theos
devzkndeMacBook-Pro:taoketool devzkn$ ls -l
total 40
-rw-r--r--  1 devzkn  staff  249 Oct 16 15:38 Makefile
-rw-r--r--  1 devzkn  staff  200 Oct 16 14:59 control
-rwxr-xr-x  1 devzkn  staff   95 Aug 20 18:42 deploy
-rw-r--r--  1 devzkn  staff   76 Oct 16 14:59 main.mm
lrwxr-xr-x  1 root    staff   10 Oct 16 15:44 theos -> /opt/theos

设置tool.mk 的路径

THEOS_DEVICE_IP=iphone #5C9
ARCHS = armv7 armv7s arm64
TARGET = iphone:latest:8.0
THEOS=/opt/theos
THEOS_MAKE_PATH=$(THEOS)/makefiles
include  $(THEOS_MAKE_PATH)/common.mk
TOOL_NAME = taokeTool
taokeTool_FILES = main.mm
taokeTool_FRAMEWORKS = UIKit 
include $(THEOS_MAKE_PATH)/tool.mk

image.png

I  app执行shell 命令

开发步骤及代码示例:OC利用#include "NSTask.h"执行shell 命令

  • killall
//杀掉微信的进程
        doShellCmd(@"killall WeChat");
        NSLog(@"killall WeChat");
        //杀掉Moon的进程
        doShellCmd(@"killall Moon");
        NSLog(@"killall Moon");
  • 执行shell脚本
//执行shell脚本
NSString *doShellCmd(NSString *cmd)
{
    NSTask *task;
 task = [[NSTask alloc ]init];
 [task setLaunchPath:@"/bin/bash"];
 NSArray *arguments = [NSArray arrayWithObjects:@"-c",cmd, nil];
 [task setArguments:arguments];
 NSPipe *pipe = [NSPipe pipe];
 [task setStandardOutput:pipe];
 NSFileHandle *file = [pipe fileHandleForReading];
 [task launch];
 NSData *data = [file readDataToEndOfFile];
 NSString *string = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
    return string;
}
  • 部署之后,脚本在/usr/bin 目录
iPhone:/usr/bin root# which taokeTool
/usr/bin/taokeTool
-rwxr-xr-x 1 mobile staff  200512 Oct 18 18:01 taokeTool

because daemons are loaded by launchd, which is owned by root:wheel,

iPhone:~ root# ps -e                
  PID TTY           TIME CMD
    1 ??         0:04.13 /sbin/launchd
iPhone:/sbin root# ls -l /sbin/launchd
-rwxr-xr-x 1 root wheel 239536 Nov 19  2014 /sbin/launchd
so both a daemon and its config file must be owned by root:wheel too, it borns and runs as root.

II  修改taokeTool owned 的 两种方式

2.1、直接手动修改

iPhone:/usr/bin root# chown root:wheel taokeTool
-rwxr-xr-x 1 root   wheel  200512 Oct 18 18:01 taokeTool
iPhone:/Library/LaunchDaemons root# chown root:wheel com.wl.tktool.plist

这种方式,每次安装要修改chwon,从deb的List contents 可以看出这点:

dpkg-deb -c **.deb
drwxr-xr-x devzkn/staff      0 2017-10-26 17:57 ./
drwxr-xr-x devzkn/staff      0 2017-10-26 17:57 ./usr/
drwxr-xr-x devzkn/staff      0 2017-10-26 17:57 ./usr/bin/
-rwxr-xr-x devzkn/staff 200512 2017-10-26 17:57 ./usr/bin/taokeTool

2.2、  借助 fauxsu

  • 借助a tool called fauxsu116 by DHowett

更彻底的解决方案使用方式二

编辑plist

devzkndeMacBook-Pro:taoketool devzkn$ mkdir -p ./Layout/Library/LaunchDaemons/
devzkndeMacBook-Pro:LaunchDaemons devzkn$ touch com.wl.tktool.plist

具体操作步骤,请看原文:https://kunnan.blog.csdn.net/article/details/78249848

III reboot

  • 手动reboot
iPhone:/Library/LaunchDaemons root# reboot
Connection to 192.168.2.134 closed by remote host.
Connection to 192.168.2.134 closed.
  • 自动reboot
static void Reboot(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo)
{
 NSLog(@"iOSRE: reboot");
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
 system("reboot");
#pragma GCC diagnostic pop
}

但是"system" is removed in iOS 11。

执行效果

iPhone:/Library/LaunchDaemons root# reboot
Connection to 192.168.2.134 closed by remote host.
Connection to 192.168.2.134 closed.
devzkndeMacBook-Pro:.ssh devzkn$ ssh iphone150
iPhone:~ root# ps -e |grep taokeTool
   88 ??         0:00.25 /usr/bin/taokeTool
  590 ttys000    0:00.01 grep taokeTool
  • Makefile 进行定义执行reboot的时机
after-install::
 install.exec "echo '' > /var/log/syslog"
 install.exec "killall -9 taokeTool"
 install.exec "reboot"

IV 配置 .gitignore

devzkndeMacBook-Pro:taoketool devzkn$ less .gitignore

/.theos/
/debs/
/obj/
/packages/
/.vscode/

V 、常见问题

5.1taokeTool_FILES 变量写成了其他的工程名

Undefined symbols for architecture armv7s:
  "_main", referenced from:
     implicit entry/start for main executable
ld: symbol(s) not found for architecture armv7s
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[3]: *** [/Users/devzkn/code/taokeTool/taoketool/.theos/obj/debug/armv7s/taokeTool] Error 1
make[2]: *** [/Users/devzkn/code/taokeTool/taoketool/.theos/obj/debug/armv7s/taokeTool] Error 2

因为taokeTool_FILES 这个变量写成了其他的工程名+_FILES

5.2 问题:没有找到system方法

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.1.sdk/usr/include/stdlib.h:195:6: note: candidate function has been explicitly made unavailable

解决方法:执行reboot的命令 可以放到Makefile 进行定义

  • 具体的内容如下
after-install::
 install.exec "echo '' > /var/log/syslog"
 install.exec "killall -9 taokeTool"
 install.exec "reboot"
  • 查看 SIP的命令:csrutil status
devzkndeMacBook-Pro:taoketool devzkn$ csrutil status
System Integrity Protection status: enabled.

V see also

目录
相关文章
|
22天前
|
iOS开发 开发者
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
117 67
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
|
3月前
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
2月前
|
iOS开发 开发者 MacOS
深入探索iOS开发中的SwiftUI框架
【10月更文挑战第21天】 本文将带领读者深入了解Apple最新推出的SwiftUI框架,这一革命性的用户界面构建工具为iOS开发者提供了一种声明式、高效且直观的方式来创建复杂的用户界面。通过分析SwiftUI的核心概念、主要特性以及在实际项目中的应用示例,我们将展示如何利用SwiftUI简化UI代码,提高开发效率,并保持应用程序的高性能和响应性。无论你是iOS开发的新手还是有经验的开发者,本文都将为你提供宝贵的见解和实用的指导。
134 66
|
2月前
|
存储 监控 API
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
app开发之安卓Android+苹果ios打包所有权限对应解释列表【长期更新】-以及默认打包自动添加权限列表和简化后的基本打包权限列表以uniapp为例-优雅草央千澈
|
2月前
|
开发框架 Android开发 iOS开发
安卓与iOS开发中的跨平台策略:一次编码,多平台部署
在移动应用开发的广阔天地中,安卓和iOS两大阵营各占一方。随着技术的发展,跨平台开发框架应运而生,它们承诺着“一次编码,到处运行”的便捷。本文将深入探讨跨平台开发的现状、挑战以及未来趋势,同时通过代码示例揭示跨平台工具的实际运用。
161 3
|
2月前
|
Java 调度 Android开发
安卓与iOS开发中的线程管理差异解析
在移动应用开发的广阔天地中,安卓和iOS两大平台各自拥有独特的魅力。如同东西方文化的差异,它们在处理多线程任务时也展现出不同的哲学。本文将带你穿梭于这两个平台之间,比较它们在线程管理上的核心理念、实现方式及性能考量,助你成为跨平台的编程高手。
|
3月前
|
存储 前端开发 Swift
探索iOS开发:从新手到专家的旅程
本文将带您领略iOS开发的奇妙之旅,从基础概念的理解到高级技巧的掌握,逐步深入iOS的世界。文章不仅分享技术知识,还鼓励读者在编程之路上保持好奇心和创新精神,实现个人成长与技术突破。
|
3月前
|
安全 IDE Swift
探索iOS开发之旅:从初学者到专家
在这篇文章中,我们将一起踏上iOS开发的旅程,从基础概念的理解到深入掌握核心技术。无论你是编程新手还是希望提升技能的开发者,这里都有你需要的指南和启示。我们将通过实际案例和代码示例,展示如何构建一个功能齐全的iOS应用。准备好了吗?让我们一起开始吧!
|
3月前
|
安全 Swift iOS开发
Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法
本文深入探讨了 Swift 与 UIKit 在 iOS 应用界面开发中的关键技术和实践方法。Swift 以其简洁、高效和类型安全的特点,结合 UIKit 丰富的组件和功能,为开发者提供了强大的工具。文章从 Swift 的语法优势、类型安全、编程模型以及与 UIKit 的集成,到 UIKit 的主要组件和功能,再到构建界面的实践技巧和实际案例分析,全面介绍了如何利用这些技术创建高质量的用户界面。
58 2
|
3月前
|
安全 数据处理 Swift
深入探索iOS开发中的Swift语言特性
本文旨在为开发者提供对Swift语言在iOS平台开发的深度理解,涵盖从基础语法到高级特性的全面分析。通过具体案例和代码示例,揭示Swift如何简化编程过程、提高代码效率,并促进iOS应用的创新。文章不仅适合初学者作为入门指南,也适合有经验的开发者深化对Swift语言的认识。
71 9

热门文章

最新文章