吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1157|回复: 22
上一主题 下一主题
收起左侧

[iOS 原创] iOS逆向开发(一) 时隔8年分享些知识

  [复制链接]
跳转到指定楼层
楼主
清新 发表于 2026-1-6 23:12 回帖奖励
本帖最后由 清新 于 2026-1-6 23:21 编辑

声明:所有分享的知识都是这些年从一个小白慢慢积累获得,分享的内容都是热乎的

前期内容适合小白稍微会一点编程语言的,中期内容适合能看懂汇编语言能写C++代码的,
后期看情况分享,需要会的东西比较多,本来就不咋会说话,打几个字分享已经是极限,见谅。

请注意!!!
该篇文章只适合已经有一点基础的小白,会theos,我只分享逆向过程,至于实现
我也会贴代码,如果有问题都需要你自己解决。


关于更新:闲了就更新,不要太期待,做自己。


我的准备工作:
手机:iphone 13 +
电脑:mac
软件:超级手电筒(App Store直接下载)


这是一个最简单的App,里面可供初学者学习的地方很多,以下是说的一些内容:
1、网络关闭后也能进入
2、去除相关广告
自己应该去学习的地方:
1、framework 注入 dylib
2、hook 其他库对指定的库hook
3、通过汇编代码更改代码跳转
4、通过工具进行调试、搜索、寻找有用的东西
5、能用工具尽量用成熟工具,不要想着自己写
提供几个简单易用的(看不懂就搜索一下,这些东西自己想办法搞定,不会就去搜索):
1、frIDA(objection)
2、mac初学暂时用hopper
3、越狱了的手机或者可以安装巨魔的(可能会卡)


开始正题:


我会以最简单的方式达到目的,过程如下:


首先从AppStore下载这个软件:

下载好后我们需要将这个app里面的内容分享到电脑,并且在手机上完成脱壳
安装AppsDump,之后脱壳传到电脑在电脑上进行解压,在superlight.app中寻找到可执行文件,一般比较大的就是。
查看是否脱壳(终端):otool -l superlight | grep -i crypt 0脱壳、1没有、空的脱壳了)


现在我们来导出头文件,头文件可以用很多方式导出,小白暂时使用class-dump(不要用旧的,尽量寻找已经
修改过支持swift的,否则很多软件没法用),或者找个熟悉的人分享自用的工具给你。


图如下:



header文件中就是导出来的文件


现在基本的工作已经算完成了,但是怎么才知道自己需要分析哪个代码呢?


很简单我们依然使用工具,暂时我们不说命令行之类的查看,估计对于初学者有难度。


我们继续安装一个电脑软件Reveal,或者手机直接安装一个FLEX插件(自己寻找,软件长这样,提示:在越狱商店就可以下载)


安装之后点击进入App主屏幕你会发现,关闭网络和打开网络都是同一个页面用的都是HomeViewController:

[Objective-C] 纯文本查看 复制代码
[url=home.php?mod=space&uid=593715]@interface[/url] HomeViewController : UIViewController <UIScrollViewDelegate, UITextFieldDelegate, GADBannerViewDelegate, GADFullScreenContentDelegate, SKStoreProductViewControllerDelegate>
{
    UIScrollView *Scrollview;
    UIView *TopbarView;
    UIView *AdjustLightView;
    UIView *flashLightView;
    NSMutableArray *CellViewArray;
    NSMutableArray *buttonArray;
    UITextField *MosiTextFiled;
    UIButton *LightButton;
    UIView *WhiteScreen;
    float brightlevel;
    UIButton *blackcancelBtn;
    NSArray *codearray;
    NSTimer *timer1;
    NSTimer *timer2;
    int flashindex;
    double flashtime;
    UIImageView *adsImage;
    AVCaptureDevice *_device;
    GADBannerView *_bannerView;
    GADInterstitialAd *_interstitial;
}

- (void).cxx_destruct;
@property(retain, nonatomic) GADInterstitialAd *interstitial; // @synthesize interstitial=_interstitial;
@property(retain, nonatomic) GADBannerView *bannerView; // @synthesize bannerView=_bannerView;
@property(retain, nonatomic) AVCaptureDevice *device; // @synthesize device=_device;
- (void)productViewControllerDidFinish:(id)arg1;
- (void)OpenUrl;
- (void)CancelBannerAds;
- (void)ShowCuntomads;
- (void)adDidDismissFullScreenContent:(id)arg1;
- (void)adDidPresentFullScreenContent:(id)arg1;
- (void)ad:(id)arg1 didFailToPresentFullScreenContentWithError:(id)arg2;
- (void)showInterAds;
- (void)InterAds;
- (void)bannerViewDidDismissScreen:(id)arg1;
- (void)bannerViewWillDismissScreen:(id)arg1;
- (void)bannerViewWillPresentScreen:(id)arg1;
- (void)bannerViewDidRecordImpression:(id)arg1;
- (void)bannerView:(id)arg1 didFailToReceiveAdWithError:(id)arg2;
- (void)bannerViewDidReceiveAd:(id)arg1;
- (void)addBannerViewToView:(id)arg1;
- (void)BannerAds;
- (void)ShowAdsType;
- (void)ReloadHomeView;
- (void)NoInternetView;
- (void)GetAppSettingInfo;
- (void)StopFlashLight;
- (void)flashon;
- (void)flashoff;
- (void)sliderChange:(id)arg1;
- (void)FlashLightView;
- (void)GE;
- (void)GM;
- (void)LOVE;
- (void)SOS;
- (void)NormalMorseCode;
- (void)TurnOffLight;
- (void)TurnOnLight;
- (_Bool)prefersStatusBarHidden;
- (void)TurnBack;
- (void)TurnOnFront;
- (void)FrontLightView;
- (void)LightButtonResponse:(id)arg1;
- (void)AdjustLightResponse:(id)arg1;
- (void)CancelAdjust;
- (void)CreateAdjustLightView;
- (void)MoreFunction:(id)arg1;
- (void)codeflashoff;
- (void)codeflashon;
- (id)CharToCode:(id)arg1;
- (void)SendMorse;
- (void)TopButtonResponse:(id)arg1;
- (void)viewTapped:(id)arg1;
- (void)CreateMainView;
- (void)viewDidLoad;

// Remaining properties
@property(readonly, copy) NSString *debugDescription;
@property(readonly, copy) NSString *description;
@property(readonly) unsigned long long hash;
@property(readonly) Class superclass;


现在你得到了这些方法,就很容易解决问题了,接下来就是写代码hook掉,贴上代码:

[Objective-C] 纯文本查看 复制代码
#import <UIKit/UIKit.h>
#import "AlertWindowHelper.h"

@interface HomeViewController : UIViewController
@end
 

%hook HomeViewController

-(void)NoInternetView {
        NSLog(@"没有网络");  
        SEL createMainViewSel = NSSelectorFromString(@"CreateMainView");
    if ([self respondsToSelector:createMainViewSel]) { 
        ((void (*)(id, SEL))objc_msgSend)(self, createMainViewSel); 
    }
}

- (void)BannerAds{
        NSLog(@"[Light插件] BannerAds");
}

- (void)addBannerViewToView:(id)arg1{
        NSLog(@"[Light插件] addBannerViewToView");
}

- (void)ShowCuntomads{
        NSLog(@"[Light插件] ShowCuntomads");
}

- (void)showInterAds{
        NSLog(@"[Light插件] showInterAds");
}

- (void)InterAds{
        NSLog(@"[Light插件] InterAds");
} 

%end





是不是很简单,不会的话下次看评论,我会将所有问题都会统计出来,然后进行
解答。

下次分享的内容:
1、framework 注入 dylib
2、hook 指定的库
3、找到目标调用的类
4、更改函数中的逻辑,变成自己的逻辑(可能打字不太好表述)


初学者阶段我会分享这些内容(工具怎么使用都需自己搞定):
1、hook 函数
2、改变函数
3、修改汇编代码
4、分析加解密
5、修改函数内部逻辑


已脱壳的App,懒人请下载
down.txt (72 Bytes, 下载次数: 0, 售价: 5 CB吾爱币)



IMG_2358(20260106-222839).PNG (17.71 KB, 下载次数: 0)

IMG_2358(20260106-222839).PNG

image.png (317.53 KB, 下载次数: 0)

image.png

image.png (157.99 KB, 下载次数: 0)

image.png

免费评分

参与人数 5吾爱币 +11 热心值 +5 收起 理由
VNRKDOEA + 1 + 1 谢谢@Thanks!
盼星星 + 1 + 1 用心讨论,共获提升!
正己 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
laotzudao0 + 1 + 1 我很赞同!
buluo533 + 1 + 1 用心讨论,共获提升!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
炫迈 发表于 2026-1-8 14:23
提醒下新手,theos环境配置最容易卡住,我当初在Mac上折腾了三天,老哥用手机装FLEX比Reveal方便,Reveal要配证书太麻烦,FLEX直接越狱商店装就行,不过要注意版本兼容性,iOS15以后的系统FLEX要下最新版

你hook HomeViewController的方法很聪明,其实NoInternetView这个函数我见过好几个App都有,基本套路就是检测网络状态然后弹窗,直接跳过CreateMainView是最稳的,比改网络检测逻辑简单多了

广告部分hook得干净,GADBannerView这些谷歌广告组件在很多App里都通用,老哥记下这几个函数名,以后遇到类似App直接抄作业,BannerAds和InterAds是重灾区,特别是showInterAds这个函数,很多App会在退出时弹全屏广告

新手容易踩的坑是脱壳,AppsDump有时候会漏掉Swift符号,class-dump最好用最新版,支持-d参数导出协议,不然头文件看着费劲,还有hopper看汇编时注意ARM64的寄存器命名,x0-x30这些和x86不一样
沙发
ZhangK 发表于 2026-1-6 23:19
3#
 楼主| 清新 发表于 2026-1-6 23:23 |楼主
本帖最后由 清新 于 2026-1-6 23:25 编辑
ZhangK 发表于 2026-1-6 23:19
必须要有苹果&#127822;机吗?

你可以用IDA汇编分析。
4#
mw26973 发表于 2026-1-6 23:31
感谢大佬!
5#
devsol 发表于 2026-1-6 23:53
感谢大佬!
6#
a7539514862 发表于 2026-1-7 01:28
感谢大佬
7#
猫携 发表于 2026-1-7 08:12
收藏了  到时候学习的时候用
8#
rrdish 发表于 2026-1-7 08:36
大佬有没有入门的课程推荐
9#
zhe2333 发表于 2026-1-7 08:38
感谢楼主分享,作为小白虽看不懂,但特来表达下支持~
10#
kulouxiaohai 发表于 2026-1-7 11:32
这个软件涉及到的逆向知识能发出来学习下吗?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-1-8 21:18

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表