small-q 发表于 2020-6-28 15:47:07

《Enlight 全家桶》 进阶破解教程

本帖最后由 small-q 于 2020-6-28 19:09 编辑

大家好,我又来教学iOS破解了!
起因:
    2020飘云阁原创:《iOS应用逆向与安全之道》购买地址:https://item.jd.com/12800426.html
    我第一时间购买了坛主的书,然后看了好几章节,手非常之痒痒的,想找些目标练习,话说之前,打开 App Store ,由于之前我购买过图片处理软件,
    苹果推荐了 Enlight 给我,我随手下载 Quickshot Pro 好家伙,是内购应用,然后随即下载了全家桶,包括 "Enlight-Photos" 即 Quickshot,"Enlight-Video",
    "Enlight-Editor","Enlight-Phoenix",话说这软件处理图片视频特效非常不错!可惜内购影响了使用,我的目的是解除它!开始:

第一步:
    一台MBP和越狱的机器( iOS 13.5 真香),有些基础内容,本文章将一笔带过,可先观看之前我的文章:https://www.chinapyg.com/thread-136317-1-1.html
    ,然后根据《iOS应用逆向与安全之道》第二篇 第4章 用任意一种方法脱壳得到无壳ipa备用.
第二步:
    猜,Frida 使用你应该了解一下,我们得知内购有一个强大的关键字: receipt (凭据)
    先行目标:"Enlight-Phoenix".   
    frida-trace -U -f com.lightricks.Enlight-Phoenix -m "*[* receipt]"
    果然有调用:
   
    此时的小朋友,你是不是非常多????{:lol:},无法继续? 是的我也是,Frida 只是告诉了我们,这方法有在调用,那解决方案只能IDA
    搬出IDA:
   
    ...
   
   双击到了

{:cry:}哭,还是一脸问号???? 看来此路不通啊!
   后来从C版那里得知,此应用是ReactiveCocoa SDK写的{:funk:},好吧,转换思维一下,有舍关键字呢???
   猜到没: 订阅 (名词:subscription 动词:subscribe)

在芒芒大海中,我捞到关键一针:

意思大体是这样:
    NSNumber *boolNumber = ;//方法写死了
    if ( & 1)
    {
    //有订阅跑这里
    }esle
    {
    //执行了关键,所以要买....
    }
研究sdk太过复杂,我不玩,那我们尝试,不执行 - 方法,让它的会话状态设置不上,那是不是就把功能打开了呢?
下面Frida代码测试(感谢B.S)
//frida -U -f com.lightricks.Enlight-Phoenix -l QS.js
if(ObjC.available){
var hook = ObjC.classes['PNXSubscriptionModel']["- setSessionState:"];
var add = new NativeFunction(hook.implementation,'void', []);
// 进行替换
Interceptor.replace(add, new NativeCallback(function(num2) {
   console.log("你调了我,我不给你东西!");
   // 调用原函数
},'void', []));
}
永久代码:
%hook PNXSubscriptionModel
- (void) setSessionState: (id)a1{
   NSLog(@"[+] Enlight-Phoenix setSessionState");   
    %log;
    //%orig;
}
%end
好家伙功能全部打开,并且可用.
但是,软件启动后有toolbar还有PRO标记图标,并显示了618触销界面! "导出" 功能按钮两字不见了(成了一个空按钮),我们要解决这些问题!


这样,功能说算是打开了,但我个完美主义者,必须修理!

上面三个过程处理如下:
    1.去除toolbar里PRO标记图标
还记得我们的猜关键字么? 用动词: Subscribe 去捞下

-
方法里面,isSubscriber影响了toolbar还有PRO标记,我们要做的就是返回:YES,{:victory:}好!
永久代码:
%hook PNXToolbarTreeGenerator
- (id) toolbarNodeForFeatureNode:(id)a1 featureObjects:(id)a2 isSubscriber:(bool)a3 freeAssetsIdentifiers:(id)a4 remoteCellState:(id)a5 featureTree:(id)a6{

    NSLog(@"[+] Enlight-Phoenix toolbarNodeForFeatureNode");
    %log;
    return %orig(a1,a2,(bool)YES,a4,a5,a6);
}
%end

   
    2. 去除618广告界面

在调试此软件时间在618前,肯定有618关键字,继续猜!捞到:-
永久代码:
%hook PNXSubscriptionModel
- (void) bindIsPartOf618Promotion {
    NSLog(@"[+] Enlight-Phoenix bindIsPartOf618Promotion");
    %log;
}
%end

    3.导出按钮文字消失,补回显示!
最后,导出那里没有文字的按钮啊,是我的心头痛!
我的想法是没有,那我就主动写,主动插入!然后继续猜,关键字导出(export)

在IDA看到:
UIButton *__cdecl -(PNXExportView *self, SEL a2)
{
return self->_exportButton;
}
这个就是导出按钮实例:UIButton *
经C版一指导永久代码如下:
%hook PNXExportView
- (void) setupExportButton{
    %orig;
    NSLog(@"[+] Enlight-Phoenix setupExportButton");
    %log;
    UIAlertView *alertView1 = [ initWithTitle:@"提示" message:@"出品!\n www.chinapyg.com" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
    ;
}
%end

%hook PNXExportView
- (id) exportButton{
      NSLog(@"[+] Enlight-Phoenix exportButton");
      %log;
      UIButton* btn = %orig;
      ;
      return btn;
      }
%end

经这么一折腾,完美!

文章最后附赠全家桶中的另三款永久代码
一个字,都是猜的结果,都没有处理关于处
%hook PNXMainViewModel
- (void) bindSubscription {
    NSLog(@"[+] Enlight-Phoenix bindSubscription");
    %log;
    UIAlertView *alertView1 = [ initWithTitle:@"提示" message:@"完美破解! 功能全部可用." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
    ;
}
%end

/////////////////////////////////////////////////////////////////

%hook OWLUserSubscriptionStateProvider
- (bool) isSubscriber {
      NSLog(@"[+] Enlight-photo OWLUserSubscriptionStateProvider isSubscriber");
      %log;
      return YES;
}
%end

/////////////////////////////////////////////////////////////////

%hook ENSubscriberInfo
- (bool) isSubscribed {
      NSLog(@"[+] Enlight-Editor ENSubscriberInfo isSubscribed");
      %log;
      return YES;
}
%end

/////////////////////////////////////////////////////////////////

%hook EVDSubscriptionState
- (bool) isSubscriber {
      NSLog(@"[+] Enlight-video EVDSubscriptionState isSubscriber");
      %log;
      return YES;
}
%end

/////////////////////////////////////////////////////////////////
然后,你要做的就是把所有永久代码组合在一个Tweak.x文件里面
再然后.plist文件里写上全家桶就能通杀了
{
      Filter = {
                Bundles = (
                        "com.lightricks.Enlight-Photos",
                        "com.lightricks.Enlight-Video",
                        "com.lightricks.Enlight-Editor",
                        "com.lightricks.Enlight-Phoenix",      
                );
      };
}
生成过程,请看上一遍文章,论坛不能给出Bin文件! 感谢你的理解.
第三步 总结:
    全家桶里面,最不好搞的就是Phoenix,全程就是一个字:猜!!! 因为作者更本不按套路出牌(不能通过一个全局变量来搞定破解.遇到断头路) 但方法名称又是通往大道之路,猜出一遍天地!
    全程感谢吊大的C版不厌其烦的回答我无脑提问,在此深刻感受到学好OC正向编程的重要性,有了正向编程经验再分析破解会做到事伴功倍的效果!
    最后感谢飘云编写的 《iOS应用逆向与安全之道》帮助了我很多,书里面有非常多的解决方案,是值得深入学习的一本好书!深入学习方能: 大道至简!












dryzh 发表于 2020-6-28 18:23:58

woc,666啊!膜拜!Q总全平台妓能。

smallhorse 发表于 2020-6-28 18:37:28

我屮艸芔茻.....难怪不见发车,Q神果然妓压群X.......!

不破不立 发表于 2020-6-28 19:27:33

ios 8.x以后我就未越狱了

gblgbl 发表于 2020-7-1 08:48:22

大神好嘢!{:victory:}

rainzhang 发表于 2020-7-1 16:08:36

666,大佬就是666

szhorse 发表于 2020-7-1 17:57:19

手残,上次越狱越残了,不敢再造次了

nenhall 发表于 2020-7-2 00:30:06

不错,不错,分析得很全面!
我当时分析就比较暴力,脱壳后,先查了关键字:isVip,isPro,isSubscriber发现真的有,那直接开撸了,果然有用
如果只有要使用高级功能只要hook:ENFeatureItem -> isPro函数就行了,但会有引导购买的弹窗
完整代码:
%hook ENFeatureViewModel

- (BOOL)isRestrictedProContentActive {
    return NO;
}

- (BOOL)isSubscriber {
    return YES;
}

- (BOOL)isProFeature {
    return YES;
}

%end


%hook ENFeatureProUsageInfoProvider

- (BOOL)isRestrictedProContentActive {
    return NO;
}

- (BOOL)isSubscriber {
    return YES;
}

- (BOOL)isProFeature {
    return YES;
}

%end


%hook ENFeatureItem

- (BOOL)isPro {
    return NO;
}

- (BOOL)hasProSteps{
    return YES;
}

%end


%hook ENSubscriberInfo

- (BOOL)isSubscribed {
    return YES;
}

%end

绞尽乳汁6 发表于 2020-7-3 21:04:51

本帖最后由 绞尽乳汁6 于 2020-8-2 12:50 编辑

第4章 用任意一种方法脱壳得到无壳ipa备用
用各种放脱壳还是不行,framework库文件解不了密。安装闪退

Loopher 发表于 2020-7-6 09:44:45

正开始准备学习ios逆向分析,已经入手安全之道,谢谢分享{:biggrin:}
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 《Enlight 全家桶》 进阶破解教程