第一次写Tweak,走进iOS逆向的世界

第一次写Tweak,走进iOS逆向的世界

起因:公司的一产品由于是外包做的,代码不知道在哪,今天老板临时说要加个功能,但是现在没有代码,问我能搞不,当时说试试看,然后就开始了逆向之旅,最终很简单解决了问题,菜鸟第一次上手,勿见笑,(其实以前我就有看逆向,只是没时间去试验,今天刚好有机会,接下来开始正文)


先说一下需要实现的功能,老板说要在登录页面加个按钮来实现一个跳转功能

第一步:上AppStore下载软件

下载好了之后首先打开软件看了一下,是原生,不是H5(不然真不会加),然后习惯性的用Reveal查看了一下App结构,这不看不知道,一看就给了我一个惊喜,原来别人已经把那个功能写出来了,按钮都写在那了,只是Hidden掉了,那我的目的就成了把这个按钮给显示出来就行了.

第二步:砸壳(破解)

因为我们打包出来的ipa上传到AppStroe后都是被经过加密的,被套了个壳(不知这样表达是否准确),用class dump是导不出头文件的(只能导出一个空的.h文件),砸壳工具是dumpdecrypted,下载后解压(只有3个文件),放到一个好找的文件夹中,我的位置为/Users/jj/Movies/iOSRE/dumpdecrypted-master

然后cd进这个目录执行make,结束后会多出2个文件,一个.dylib一个.o


dylib就是我们用来砸壳的锤子

  • ssh连接手机(由于我的手机是10.2版本,用yalu越狱的时候自己手贱装了openSSH,导致无法用wifi连接,经过多种方式,找到了个用USB连接的方式,大家可以用wifi或者USB,都可以),我介绍一下用USB连接的方法

打开终端输入

brew install usbmuxd

如果你电脑上没有安装brew,也很简单,也是一句话

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

然后再安装usbmuxd库就行了
安装成功如图


然后新开个终端输入

iproxy 4567 22

以上命令是把当前连接设备的22端口映射到电脑的4567端口上,继而来连接SSH

插上手机后另开终端输入

ssh -p 4567 root@127.0.0.1

127.0.0.1也可以换成localhost,如果是直接用wifi连接的话,命令是

ssh root@xxx.xxx.xxx.xxx

xxx.xxx.xxx.xxx是你手机的IP地址(要保证与电脑在同一局域网)

如果是第一次连接,会如下图


输入yes,按回车后会要求你输入密码,默认密码是:alpine,注意这里输入密码是不会显示星号的,输入完成后自己按回车即可(建议把默认的密码修改了)

出现这样就代表ssh已经连接成功了,可以开始下一步了

打开你需要砸壳的软件,然后在终端输入

ps -e

图左边红框是进程PID,右边画横线的就是我要砸壳的app路径,可以看上面新浪微博的app,直接看名字就能看出自己要找的app

先用scp命令把我们的锤子传到设备上(app路径就是红线画的那里)

scp 路径/dumpdecrypted.dylib root@xxx.xxx.xxx.xxx:/app路径

这里是把锤子传到要砸壳的app的Document目录下(好像不一定非是这个目录),网上大多数都这样说。

然后cd到Document目录输入

DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /path/to/executable

执行完成后会在当前目录生成XXX.decrypted 可执行文件;
然后用scp再传回电脑即可

  • 这里再说一种方式,使用Clutch来破解,我写这篇文章的时候就用的这种方式

先下载最新版的Clutch然后将其导入到手机中,可以用scp,我用pp助手直接拖拽的,比较方便,路径是/usr/bin

然后cd到/usr/bin目录下执行

Clutch-2.0.4 -i

如果显示Permisson Deny,输入chmod a+x Clutch-2.0.4提升权限然后再执行-i就可以了

然后输入

Clutch-2.0.4 -d 43

我这里输入43是因为我要破解的app前面的数字是43,如果百度糯米是1就输1


如图就是已经破解完成了,DONE后面就是破解后ipa的路径,可以用pp助手等工具或者scp导出到电脑,至此第二步砸壳算是完成了。

第三步:导出头文件

导出头文件的工具是Class-dump,下载后点击安装把

拖到

/usr/local/bin

目录下

然后终端输入

class-dump

得到下图则是安装成功


如果上面你是用dumpdecrypted砸壳的,那么最后得到的是xxx.decrypted文件,导出头文件的命令为

class-dump -H XXX.decrypted -o OUTPUT_PATH

OUTPUT_PATH是输出路径,就是你导出的头文件放哪里!xxx.decrypted是路径而不是名字

如果用的是Clutch破解的话,最后导出的是ipa文件,这里需要右键ipa选择归档打开,然后解压出个文件夹,点击进去进入Payload文件夹,会看到一个与.app文件,与app同名,然后选择右键显示包内容,在里面找到一个执行文件,与app同名

然后终端执行导出头文件命令


划红线的2个地方分别是执行文件的绝对路径和输入文件夹的绝对路径,直接拖拽进终端就会自动填写

这就是我们导出来的头文件

第四步:写Tweak了

  • 先安装dpkg和ldid,终端执行
brew install dpkg ldid

如果没有安装brew的,去上面复制命令安装

  • 安装Thoes 终端执行
sudo git clone --recursive https://github.com/theos/theos.git /opt/theos

/opt/theos是安装路径,可以自己改

然后修改/opt/theos的权限(位置不一样的要记得改成自己的路径)
sudo chown $(id -u):$(id -g) /opt/theos

很重要的一步,配置环境变量,在~./目录下有个隐藏文件(开启隐藏文件的命令请自行搜索)名字叫.bash_profile,如果你没有这个文件,可以自己手动建立一个,在终端分别执行
cd ~ touch .bash_profile
然后在其中加上
export THEOS=/opt/theos export PATH=/opt/theos/bin/:$PATH
这里有个注意点,如果说你本身没有.bash_profile文件,是自己新建的,要注意在终端执行
source ~/.bash_profile
这样环境变量才会立即生效,不然输入
nic.pl
会提示
-bash: nic.pl: command not found
安装成功的效果是


建立Tweak,一般选择11的iphone/tweak,有的人可能不是11,按后面的选
建立的时候cd到个空文件夹里,到时候生成文件的时候才好找

Project Name:为你的tweak名
Package Name:包名,可以直接回车
Author/Maintainer Name:也可以直接回车,会取你当前的Mac登录用户名
obileSubstrate Bundle filter:你的Tweak想给特定的app使用就写那个app的Bundle id,我就直接写com.apple.UIKit代表所有app都能调用这个Tweak
List of applications to terminate upon installation:直接回车
出现done就ok了
目录下会出现4个文件

####想思路,怎么写这个Tweak
* 因为按钮其实都有了,我只需要把按钮的hidden = NO就行了!,而这个按钮所在的控制器我们需要
通过Reveal或者用Cycript(以后说这个)来找,先说简单的,直接用reveal查看页面

如图,这就是我要找的控制器,直接去刚刚导出的头文件里找这个控制器文件,文件内容如图

其中的scanBtn就是被隐藏的按钮,我要把它显示出来,方法就很简单了,直接在ViewDidLoad里调用一下这个btn.hidden = NO即可,我们开始写Tweak
双击打开Tweak.xm文件,删除其中所有的东西输入

     %hook XXLoginViewController

     - (void)viewDidLoad {

          %orig;
      }

     %end  
    

其中%hook后面的就是我们要修改的控制器类
下面的就是我们要修改的函数,%orig是代表执行函数本身的功能,我们只是在其基础上添加功能,所以不能影响程序本身的功能,不调用%orig的话相当于viewDidLoad里就没有任何东西了,只会运行我们自己tweak里写的方法!

由于这个类使用了synthesize,所以我用self获取不到btn的属性,直接写也获取不到btn属性,我就将这个类给改动了一下



由于我改动了这个类,所以我需要将我改动过的这个类导入到tweak里去来保证tweak不会编译报错
方法是把改动的类放到和tweak.xm同一目录下,然后在tweak.xm里导入
所以tweak.xm变成下面这样了

    #import “XXLoginViewController.h”
   %hook XXLoginViewController

   - (void)viewDidLoad {
          self.scanBtn.hidden = NO;
          %orig;
     }

    %end
    

现在Tweak目录下是这样的

cd进这个目录执行
make package


如果遇到我这种报错的话,使用sudo命令编辑这个文件(路径不同的自己修改)
sudo vi /opt/theos/makefiles/package/deb.mk

然后重新回来打包

这次就直接打包成功了,左边那个就是我们打包出来的deb,用pp助手等软件传到手机任何位置
然后用ifile这类管理软件点击打开安装,然后打开我们的软件就能看到效果了!
至此,结束!
文中如有错误,还望指出!
这次的东西比较浅,以后慢慢深入学习!
后面有空我会写一下怎么将dylib打包到ipa中然后重签名安装到未越狱的手机上

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,646评论 4 366
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,979评论 1 301
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,391评论 0 250
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,356评论 0 215
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,740评论 3 293
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,836评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,022评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,764评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,487评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,728评论 2 252
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,200评论 1 263
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,548评论 3 260
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,217评论 3 241
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,134评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,921评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,919评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,766评论 2 274

推荐阅读更多精彩内容