iOS逆向实战之多彩截屏闪烁

这里通过一个非常简单的小项目来梳理前几天提到的工具, 如名字所说, 就是让截屏时闪烁的白光变成随机的颜色, 下面一步步开始.

运行环境

macOS10.13.4
iPhone5c 10.3.3/h3lix越狱

工具依赖

macOS端

class-dump
Theos

iOS端

OPENSSH
Cycript
CydiaSubstrate
均为cydia安装

实战阶段

需求其实很简单, 就是改变截屏时的颜色, 那么我们就从寻找对应的头文件开始.

dump头文件并定位函数

截屏的操作是在SpringBoard中完成的, 那么我们需要找到SpringBoard的app文件, 然后拷贝到本地, 进行dump.
因为系统app没有从App Store加壳, 所以这里不需要用到dumpdecrypted.

寻找app文件所在的目录

可以参考Unix和iOS的常用目录整理
也可以直接使用查看进行的命令迅速定位

$ ps -e | grep SpringBoard
 4156 ??         0:38.88 /System/Library/CoreServices/SpringBoard.app/SpringBoard
 4457 ttys000    0:00.01 grep SpringBoard

可以定位到/System/Library/CoreServices/SpringBoard.app/SpringBoard就是执行文件所在, 那么就复制下来

$ scp root@192.168.6.79:/System/Library/CoreServices/SpringBoard.app/SpringBoard ~/Desktop/tmp 
root@192.168.6.79's password: 

现在拿到了对应的执行文件开始dump

$ class-dump -S -s -H SpringBoard -o ./SpringBoardHeaders
$ ls SpringBoardHeaders 
AVExternalDeviceDelegate-Protocol.h                                            SBLockScreenTimerViewController.h
BBAccessoryIcon-SBUtilities.h                                                  SBLockScreenTimerViewControllerDelegate-Protocol.h
BBBulletin-SBBulletinBanner.h                                                  SBLockScreenToAlertWorkspaceTransaction.h
BBBulletin-SBUtilities.h                                                       SBLockScreenToAppsWorkspaceTransaction.h
BBBulletinRequest-SBBulletinBannerControllerTest.h                             SBLockScreenUnlockRequest.h
BBDataProvider-Protocol.h                                                      SBLockScreenUserPictureView.h
BBObserverDelegate-Protocol.h                                                  SBLockScreenUserPictureViewController.h
BBRemoteDataProvider-Protocol.h                                                SBLockScreenView.h
....

我们在这一堆头文件中寻找那么一个截屏的函数的确有点大海捞针的意思的了, 当然我们不能一个一个函数的寻找, 现在就得使用一点发散思维, 比如截屏的闪光一般你如何定义呢, 试试flash关键字的搜索吧!

当你在SpringBoardHeaders文件夹搜索flash的时候, 会发现只有五个头文件包含flash, 而最显眼的那个就是SBScreenFlash.h, 从名字看起来我们已经很接近要寻找的目标了, 那么打开它一探究竟.

#import <objc/NSObject.h>

@class NSMutableArray, UIScreen, UIView, UIWindow;

@interface SBScreenFlash : NSObject
{
    NSMutableArray *_flashCompletionBlocks;
    UIScreen *_screen;
    UIWindow *_flashWindow;
    UIView *_flashView;
    BOOL _windowVisible;
}

+ (id)mainScreenFlasher;
- (void).cxx_destruct;
- (void)_createUIWithColor:(id)arg1;
- (void)_orderWindowFrontAndThenOut:(id)arg1 withColor:(id)arg2;
- (void)_orderWindowOut:(id)arg1;
- (void)_tearDown;
- (void)flashColor:(id)arg1 withCompletion:(CDUnknownBlockType)arg2;
- (void)flashWhiteWithCompletion:(CDUnknownBlockType)arg1;
- (id)initWithScreen:(id)arg1;

@end

这就是整个SBScreenFlash.h的内容, 令我们兴奋的是我们发现了(void)flashColor:(id)arg1 withCompletion:(CDUnknownBlockType)arg2;函数! 它看起来的确就是我们要寻找的函数了.

使用Cycript实时调试以验证我们的猜测
$ cycript -p 4156
cy# [[SBScreenFlash mainScreenFlasher] flashColor:[UIColor redColor] withCompletion:nil]

然后你会发现手机屏幕会闪烁红色的亮光, 那么可以肯定我们寻找的函数是正确的, 当然你可以换成任意你希望的颜色.

编写tweak插件来实现随机的自动的更换闪烁颜色

$ $THEOS/bin/nic.pl 

选择 [11.] iphone/tweak模板创建项目
作用包 MobileSubstrate Bundle filter [com.apple.springboard]
关于Theos的详细介绍详见

Makefile内容
include $(THEOS)/makefiles/common.mk
  
TWEAK_NAME = ColorfulScreenShots
ColorfulScreenShots_FILES = Tweak.xm
THEOS_DEVICE_IP = 192.168.6.47

include $(THEOS_MAKE_PATH)/tweak.mk

after-install::
        install.exec "killall -9 SpringBoard"

其中THEOS_DEVICE_IP为你自己手机的IP
TWEAK_NAME 为你自己项目的名字
controll和 ColorfulScreenShots.plist在这里不需要修改

Tweak.xm内容
%hook SBScreenFlash
-(void)flashColor:(id)arg1 withCompletion:(id)arg2 {


        CGFloat red = (arc4random() % 256) / 255.0;
        CGFloat green = (arc4random() % 256) / 255.0;
        CGFloat blue = (arc4random() % 256) / 255.0;

        UIColor *c = [UIColor colorWithRed:red green:green blue:blue alpha:1.0];
        %orig(c, arg2);
}
%end

这里稍微解释一下
%hook SBScreenFlash声明要勾住刚刚我们找到SBScreenFlash.h的实例对象
%end为结束符
然后我们将-(void)flashColor:(id)arg1 withCompletion:(id)arg2重写
UIColor *c = [UIColor colorWithRed:red green:green blue:blue alpha:1.0]
获得了一个通过随机RGB生成的的颜色.
%orig(c, arg2);
执行原始函数并且把第一个函数替换成我们刚才的颜色
大功告成!

安装

在tweak目录下
make
make package install
输入两次密码, 等待手机桌面重启后截屏看看效果吧!

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

推荐阅读更多精彩内容