iOS Theos & 动态调试(获取支付宝账户密码)

一、Theos配置

Theos 是一个不需要使用Xcode就能管理,开发和部署iOS软件的跨平台开发工具。进行越狱iOS开发扩展或者调整时,Theos是一件非常重要的工具,很多越狱开发都使用了这个工具。
推荐配置在自己的家目录,不要配置在/opt目录。

Theos的安装可以参考

1.1 ldid

ldid是专门用来签名iOS可执行文件的工具,用来代替Xcodecodesign。专门用于越狱插件的签名。theos开发插件依赖ldid

1.2 nic.pl

➜  ~ nic.pl
NIC 2.0 - New Instance Creator
------------------------------
  [1.] iphone/activator_event
  [2.] iphone/activator_listener
  [3.] iphone/application_modern
  [4.] iphone/application_swift
  [5.] iphone/cydget
  [6.] iphone/flipswitch_switch
  [7.] iphone/framework
  [8.] iphone/library
  [9.] iphone/notification_center_widget
  [10.] iphone/notification_center_widget-7up
  [11.] iphone/preference_bundle_modern
  [12.] iphone/theme
  [13.] iphone/tool
  [14.] iphone/tool_swift
  [15.] iphone/tweak
  [16.] iphone/tweak_with_simple_preferences
  [17.] iphone/xpc_service
Choose a Template (required):

nic.pl出现选择模板则配置成功了。

二、动态调试支付宝

2.1 动态分析支付宝登录密码

2.1.1 分析登录点击逻辑

使用手机端cycript附加支付宝进程

zaizai:~ root# cycript -p AlipayWallet
cy# HPCurrentVC()
#"<ALULoginContainerController: 0x10bd75560>"
cy# #0x10bd75560.view.recursiveDescription().toString()

搜索下输入的密码123456

image.png

可以看到密码是aluTextField 0x10cadf800aluInputBox 0x121cb4b40中。

再搜索下登录(由于编码问题,先在python环境中转码再搜索):

>>> str = u"登录"
>>> str
u'\u767b\u5f55'
>>>

image.png

登录按钮是AUButton 0x12098c9c0

查看AUButton 0x12098c9c0allTargets

cy# #0x12098c9c0.allTargets
[NSSet setWithArray:@[#"<ALUAccuratePWDView: 0x121cad170; frame = (0 0; 375 667); layer = <CALayer: 0x2838424a0>>",#"<AUButton: 0x12098c9c0; baseClass = UIButton; frame = (16 367.5; 343 51); clipsToBounds = YES; opaque = NO; layer = <CALayer: 0x2839c89c0>>"]]]

一个是自己,一个是ALUAccuratePWDView 0x121cad170。也就是登录按钮点击事件调用了ALUAccuratePWDView的方法。

查看AUButton 0x12098c9c0allControlEvents

cy# #0x12098c9c0.allControlEvents
64

这里的64就是26

   UIControlEventTouchUpInside           = 1 <<  6,

查看AUButton 0x12098c9c0 调用的的ALUAccuratePWDView 0x121cad170对象的方法actionsForTarget: forControlEvent:

cy# [#0x12098c9c0 actionsForTarget:#0x121cad170 forControlEvent:64]
@["onNext"]

这样就获取到了登录按钮(AUButton)点击调用了ALUAccuratePWDViewonNext方法。
dump头文件获取onNext方法如下:

- (void)onNext;

所以Hook代码如下:

%hook ALUAccuratePWDView

- (void)onNext {
    
}

%end

2.1.2 分析密码逻辑

上面已经找到了登录按钮调用方法,接下来要分析输入框。对于输入框aluTextField 0x10cadf800aluInputBox 0x121cb4b40中。
而在ALUAccuratePWDView 0x121cad170中有如下代码:

@property(retain, nonatomic) aluLoginBox *loginBox; // @synthesize loginBox=_loginBox;

那么aluInputBox应该和aluLoginBox有关,在aluLoginBox中有如下代码:

    aluInputBox *_loginIdInputBox;
    aluInputBox *_passwordInputBox;

aluInputBox中正好有一个aluTextField

    aluTextField *_textField;

那么猜测_passwordInputBox应该就是aluInputBox 0x121cb4b40
总结:在ALUAccuratePWDView 0x121cad170 -> _loginBox -> _passwordInputBox->_textField

验证

cy# #0x121cad170->_loginBox->_passwordInputBox->_textField
#"<aluTextField: 0x10cadf800; baseClass = UITextField; frame = (2 0; 220.5 45); text = '123456'; opaque = NO; autoresize = W; tintColor = UIExtendedSRGBColorSpace 0.0862745 0.466667 1 1; gestureRecognizers = <NSArray: 0x283e19590>; placeholder = \xe8\xaf\xb7\xe8\xbe\x93\xe5\x85\xa5\xe7\x99\xbb\xe5\xbd\x95\xe5\xaf\x86\xe7\xa0\x81; borderStyle = None; background = <_UITextFieldNoBackgroundProvider: 0x28319de40: textfield=<aluTextField 0x10cadf800>>; layer = <CALayer: 0x2838400a0>>"

aluTextField: 0x10cadf800就是密码输入框:

image.png

所以获取密码的方式为:self -> _loginBox -> _passwordInputBox->_textField
同理可以获得登录账户:self-> _labelLoginID
修改Hook代码如下:

%hook ALUAccuratePWDView

- (void)onNext {
//账户
//self-> _loginBox->_loginIdInputBox-> _textField
//密码
//self -> _labelLoginID
}

%end

2.2 Theos获取支付宝密码

2.2.1 创建Tweak工程

➜  HPProject nic.pl
NIC 2.0 - New Instance Creator
------------------------------
  [1.] iphone/activator_event
  [2.] iphone/activator_listener
  [3.] iphone/application_modern
  [4.] iphone/application_swift
  [5.] iphone/cydget
  [6.] iphone/flipswitch_switch
  [7.] iphone/framework
  [8.] iphone/library
  [9.] iphone/notification_center_widget
  [10.] iphone/notification_center_widget-7up
  [11.] iphone/preference_bundle_modern
  [12.] iphone/theme
  [13.] iphone/tool
  [14.] iphone/tool_swift
  [15.] iphone/tweak
  [16.] iphone/tweak_with_simple_preferences
  [17.] iphone/xpc_service
Choose a Template (required): 15
Project Name (required): AlipayHook
Package Name [com.yourcompany.alipayhook]: com.hotpotcat.alipayhook
Author/Maintainer Name [ZP]:
[iphone/tweak] MobileSubstrate Bundle filter [com.apple.springboard]: com.alipay.iphoneclient
[iphone/tweak] List of applications to terminate upon installation (space-separated, '-' for none) [SpringBoard]: AlipayWallet
Instantiating iphone/tweak in alipayhook/...
Done.
  • tweak15代表创建插件。
  • Project Name:工程名。
  • Package Name:包名称,都小写不能驼峰。
  • Author/Maintainer Name:不填默认电脑名称
  • [iphone/tweak] MobileSubstrate Bundle filter [com.apple.springboard]:要附加的进程(BundleId),不写默认springboard
  • [iphone/tweak] List of applications to terminate upon installation (space-separated, '-' for none) [SpringBoard]:插件安装后要杀掉的进程。默认SpringBoard。⚠️推荐给默认值,给应用进程有可能Hook失败杀不掉App

这样就创建了插件工程了。

BundleId获取

zaizai:~ root# cycript -p AlipayWallet
cy# APPID
@"com.alipay.iphoneclient"

2.2.2 Tweak工程配置

工程结构如下:

image.png

直接将工程拖到Sublime Text中:

  • .plist中是包的名称
{ Filter = { Bundles = ( "com.alipay.iphoneclient" ); }; }
  • control是关于工程配置。版本号等相关信息。
  • makefile是编译配置
    安装到手机是走的SSH安装, 需要增加配置设置IP端口号。这里配置的是走的USB
export THEOS_DEVICE_IP=localhost
export THEOS_DEVICE_PORT=12345
IP和端口号配置

可以配置到.zshrc中,这样不用每个工程都配置了。

  • Tweak.x是写logos hook代码的地方,一般会将后缀改为.xm 。需要同时修改makefileAlipayHook_FILES = Tweak.xm

2.2.3 Hook代码

#import <UIKit/UIKit.h>

%hook ALUAccuratePWDView

- (void)onNext {
    NSLog(@"\n\n\n🍉🍉🍉🍉🍉🍉🍉\n\n\n");
    UIView *loginBox = MSHookIvar<UIView*>(self,"_loginBox");
    //账户
    //self-> _labelLoginID
    UILabel *labelLoginID = MSHookIvar<UILabel *>(self,"_labelLoginID");
    NSString *accountStr = labelLoginID.text;
    NSLog(@"账户:%@",accountStr);
    //密码
    //self -> _loginBox -> _passwordInputBox->_textField
    UIView *passwordInputBox = MSHookIvar<UIView *>(loginBox,"_passwordInputBox");
    UITextField *pwdTextField = MSHookIvar<UITextField *>(passwordInputBox,"_textField");
    NSString *pwdStr = pwdTextField.text;
    NSLog(@"密码:%@",pwdStr);
    NSLog(@"\n\n\n🍉🍉🍉🍉🍉🍉🍉\n\n\n");
}

%end

2.2.4 编译、打包、安装

编译make

➜  alipayhook make
==> Notice: Build may be slow as Theos isn’t using all available CPU cores on this computer. Consider upgrading GNU Make: https://github.com/theos/theos/wiki/Parallel-Building
> Making all for tweak AlipayHook…
==> Preprocessing Tweak.xm…
==> Compiling Tweak.xm (armv7)…
==> Linking tweak AlipayHook (armv7)…
ld: warning: building for iOS, but linking in .tbd file (/Users/zaizai/.HotpotCat/theos/vendor/lib/CydiaSubstrate.framework/CydiaSubstrate.tbd) built for iOS Simulator
==> Generating debug symbols for AlipayHook…
rm /Users/zaizai/HPProject/alipayhook/.theos/obj/debug/armv7/Tweak.xm.mm
==> Preprocessing Tweak.xm…
==> Compiling Tweak.xm (arm64)…
==> Linking tweak AlipayHook (arm64)…
ld: warning: building for iOS, but linking in .tbd file (/Users/zaizai/.HotpotCat/theos/vendor/lib/CydiaSubstrate.framework/CydiaSubstrate.tbd) built for iOS Simulator
==> Generating debug symbols for AlipayHook…
rm /Users/zaizai/HPProject/alipayhook/.theos/obj/debug/arm64/Tweak.xm.mm
==> Merging tweak AlipayHook…
==> Signing AlipayHook…

打包make package

➜  alipayhook make package
==> Notice: Build may be slow as Theos isn’t using all available CPU cores on this computer. Consider upgrading GNU Make: https://github.com/theos/theos/wiki/Parallel-Building
> Making all for tweak AlipayHook…
make[2]: Nothing to be done for `internal-library-compile'.
> Making stage for tweak AlipayHook…
dm.pl: building package `com.hotpotcat.alipayhook:iphoneos-arm' in `./packages/com.hotpotcat.alipayhook_0.0.1-1+debug_iphoneos-arm.deb'

打包完成后生成.deb文件。

安装 make install

➜  alipayhook make install
==> Installing…
Selecting previously unselected package com.hotpotcat.alipayhook.
(Reading database ... 1927 files and directories currently installed.)
Preparing to unpack /tmp/_theos_install.deb ...
Unpacking com.hotpotcat.alipayhook (0.0.1-4+debug) ...
Setting up com.hotpotcat.alipayhook (0.0.1-4+debug) ...
==> Unloading AlipayWallet…

安装好之后正常对应的进程会被杀掉,安装的插件会出现在cydia已安装中:

AlipayHook插件

  • make编译
  • make package打包
  • make install安装
  • 工程目录中不能有中文
  • make clean清空缓存
  • 如果有多个XCode需要选择XCode
➜  alipayhook xcode-select -p
/Applications/Xcode.app/Contents/Developer
➜  alipayhook xcode-select --switch /Applications/Xcode.app/Contents/Developer

⚠️在makefile同级目录编译。
make package;make install可以同时进行。
如果安装没有杀掉进程,发现没有Hook成功,那么创建工程的时候直接
[iphone/tweak] List of applications to terminate upon installation (space-separated, '-' for none) [SpringBoard]直接给默认值SpringBoard

运行

通过console查看日志看是否获取账户密码成功。

image.png

这个时候就成功获得了账号密码。

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

推荐阅读更多精彩内容