逆向-分析别人的APP界面

0.398字数 711阅读 701

1.可以使用cycript 在cydia里安装cycript插件,用于运行时分析,修改界面。但是操作比较麻烦,所以如果只想分析别人的界面可以使用Reveal软件,如果想修改界面还是得用cycript

2.Reveal下载地址?https://revealapp.com/

下载Free trial试用版本,但是需要使用邮箱接收激活码,每个邮箱只能使用一次,每次试用15天,好在网上有临时邮箱,所以就相当于可以永久免费使用了,临时邮箱网站 http://24mail.chacuo.net/

  • 下载完之后发现新版本没有libReveal.dylib了,所以需要按下图所示,找到library,拷贝RevealServer.framework下的RevealServer到手机里 /Library/MobileSubstrate/DynamicLibraries/目录下,然后修改名称为libReveal.dylib,
屏幕快照-2018-03-22-下午1.26.23.png
屏幕快照-2018-03-22-下午1.26.39.png

然后创建一个libReveal.plist文件,内容如下,也存放到上面的那个目录下,”com.apple.UIKit”代码可以查看所有的app,即手机里打开哪个app就可以查看哪个app,如果修改成其他的则为可以查看固定的app

{
    Filter = {
        Bundles = (
                   "com.apple.UIKit",
                   );
    };
}

但是在reveal 18版本 iOS8.1.1的情况下越狱,设置查看所有app,导致safari无法打开网页,以及有些应用使用WKWebView的界面也无法打开网页,所以不能使用 com.apple.UIKit 查看所有app,需要指定bundleId来查看指定app,这样就可以打开网页,这点需要大家注意,下面是微信和掌上生活的bundleId

{
    Filter = {
        Bundles = (
            "com.cmbchina.cmblife",
            "com.tencent.xin",
        );
    };
}

如果不想查询,想自动生成这个plist列表,写个demo把以下代码放入即可自动生成,控制台会打印生成的plist文件在哪个目录,然后手动将文件拷贝到 /Library/MobileSubstrate/DynamicLibraries/ 目录下

  NSMutableDictionary *appBundleIds=[NSMutableDictionary dictionary];
    NSMutableDictionary *filter=[NSMutableDictionary dictionary];
    appBundleIds[@"Filter"]=filter;
    NSMutableArray *bundles=[NSMutableArray array];
    filter[@"Bundles"]=bundles;

    Class LSApplicationWorkspace_class = objc_getClass("LSApplicationWorkspace");
    NSObject* workspace = [LSApplicationWorkspace_class performSelector:@selector(defaultWorkspace)];
    NSLog(@"apps: %@", [workspace performSelector:@selector(allApplications)]);
    //设备安装的app列表
    NSArray *appList = [workspace performSelector:@selector(allApplications)];
    Class LSApplicationProxy_class = object_getClass(@"LSApplicationProxy");
    for (LSApplicationProxy_class in appList)
    {
        //这里可以查看一些信息
        NSString *bundleID = [LSApplicationProxy_class performSelector:@selector(applicationIdentifier)];
        NSString *version =  [LSApplicationProxy_class performSelector:@selector(bundleVersion)];
        NSString *shortVersionString =  [LSApplicationProxy_class performSelector:@selector(shortVersionString)];
        NSLog(@"bundleID:%@\n version: %@\n ,shortVersionString:%@\n", bundleID,version,shortVersionString);
        [bundles addObject:bundleID];
    }
    NSString *path=[NSHomeDirectory() stringByAppendingString:@"/Documents/libReveal.plist"];
    BOOL v= [[appBundleIds description] writeToFile:path atomically:YES];
    NSLog(@"path:   %@",path);
  • 操作完以上步骤后,重启设备,重启reveal,打开指定app,发现reveal里已经出现可以查看的app了

  • 发现有2个今日头条,因为一个是wifi连接的一个是usb连接的,建议选择usb因为传输快

  • 然后选择一个即可查看此应用的层级结构,如果查看不了,cmd+R 刷新

或者直接使用MJ大佬写的插件可以避免上面的情况发生

屏幕快照 2018-11-28 下午11.29.53.png
屏幕快照 2018-11-28 下午11.30.00.png
屏幕快照 2018-11-28 下午11.30.09.png
  • 注意修改完可以查看某个app后。杀掉app重新打开,在reveal里即可发现app出现了

  • 如果想屏蔽一些软件越狱检测,可以添加雷锋源 apt.abcydia.com

  • 然后搜索liberty安装,安装成功后在设置里 找到librety,可以设置某个app屏蔽越狱检测,以及某个app屏蔽注入插件

image
image

推荐阅读更多精彩内容