iOS开发——逆向工程OC篇&静态分析及使用

逆向工程-静态分析及使用

看到一篇装逼技术,有机会好好研究一下。。。。。

最近在学习IOS逆向工程,查看网络上的资料也不是太多,边学边总结一下。

首先学习资料:

  1. 念茜(大神)的博客: http://nianxi.net
  2. 《ios应用逆向工程 分析与实战》

----------------------------------------------------凌乱的分割线------------------------------------------

其次讲讲要用到的工具(ios安装工具使用Cydia中搜索安装,有些需要数据源可以自行查找):

  1. 已经越狱的IOS设备:这是必须的
  2. OpenSSH(数据源:http://apt.saurik.com):用于远程登录ssh和文件传输scp
  3. class-dump-z: 用于简单分析出工程中的类名和函数名
  4. IDA:强大的反编译工具
  5. Hopper Disassembler:类似IDA 我比较喜欢,能简单转换成OC的功能
  6. Reveal:UI层解析工具
  7. iFunBox 、 iTools :两个都是强大的ios设备管理工具,越狱后能轻松读取应用文件等功能

----------------------------------------------------凌乱的分割线------------------------------------------

恩,差不多就这么多了!上面的工具大部分都是收费的,不过都是有试用版的,接下来我们一个个分析:

  1. ios设备越狱,这个我就不讲了吧,不过我要赞@盘古团队一个,目前所有ios系统都可以越狱(包括ios8.x)
  2. 在ios设备上下载OpenSSH (数据源:http://apt.saurik.com),然后用电脑远程登录ios:

1 ACA80166:~ yuchenghai$ ssh [email protected]172.168.1.100

然后输入密码,@后面是手机的IP号,越狱后默认密码好像是123456.

传输文件的命令是

scp gdbinit [email protected]172.168.1.100:/var/root
scp [email protected]172.168.1.100:/var/root/123.txt ~/

3. class-dump-z 是一个强大的函数提取工具,非常好用,也是基础工具

下载地址:http://stevenygard.com/projects/class-dump

https://code.google.com/p/networkpx/wiki/class_dump_z

可以发到手机里调用,也可以在电脑上调用,要解析的文件是在应用目录下x.app(里面还有用到的所有文件资源)下面的x(x是你要分析的应用名)以唱吧为例,用ifunbox找到应用进入应用目录就可以看到ktv.app了打开包文件就能找到ktv。

$ class-dump-z ktv > ktv.txt       //导出所有内容到文件
$ class-dump-z -H ktv -o ktvdir/   //导出所有内容目录到文件夹(首先要创建ktvdir文件夹)

*这里会有一个问题,就是从app store下载的应用解析出来会是乱码,因为应用被加密了。解决办法

  1. 去渠道上下应用如同步推、91
  2. 解密工具 如AppCrackr(源http://cydia.xsellize.com)、Crackulous、Clutch

class-dump 只能解析出类名和函数名,不能看到具体的实现逻辑。但是很直观

4.IDA和Hopper Disassembler差不多,能看到每个函数的具体逻辑(但是-都是汇编)IDA很强大,能在后面标记的oc的函数名,但是我更喜欢Hopper Disassembler,因为他能简单的模拟出oc源码,但是也是非常简单的。两者按空格键都能显示出分支逻辑来。

汇编非常难看懂,我们需要的是耐心+耐心。后面可以加上动态工具联合分析能更有效

5.Reveal的功能就更强大了,能表明出UI的具体结构来,告诉你每个View的类型是什么,这通常也是我们常用的分析一个app的切入点。

下载地址:http://revealapp.com

下载完后打开reveal在菜单目录中help-show reveal library in finder打开库文件,将两个文件发到手机里

scp -r /Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/Reveal.framework [email protected]192.168.0.X:/System/Library/Frameworks
scp /Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/libReveal.dylib [email protected]192.168.0.X:/Library/MobileSubstrate/DynamicLibraries

接下来编辑libReveal.plist文件

在/Library/MobileSubstrate/DynamicLibraries/下创建文件libReveal.plist,指定app的Bundle,可以指定多个

{
    Filter = {
         Bundles = ("com.changba.ktv");
    };
}

同学们会问了,app 的bundleID怎么查看呢,我们还是用ifunbox工具找到应用目录,在x.app文件夹中会有info.plist文件,打开就能找到。

最后重启设备-打开想分析的应用-电脑打开reveal接口,就可以点击分析了

总结一下吧,分析一个应用的逻辑是这样的:

  1. 拿个越狱机-下好工具
  2. 去越狱平台下个想分析的应用(或者去app store下,用解密工具解密一下)
  3. 导入reveal分析页面,得到想要的知道的具体视图类或者大致范围
  4. 分析class-dump中,找到想要的类和函数
  5. 在IDA中找到具体函数,查看逻辑

单纯的静态分析只能知道个大概,想知道框架和具体内容还需要动态分析(下面分析)的帮助。不过想知道一个应用用到了什么库,界面是什么结构,有什么图片资源,上面的绝对够用了。总之逆向工程是比较枯燥无味的东西,资料又少,需要的是。。。。。加油

时间: 2024-10-15 22:46:48

iOS开发——逆向工程OC篇&静态分析及使用的相关文章

iOS开发——实战OC篇&环境搭建之Xib(玩转UINavigationController与UITabBarController)

iOS开发——实战OC篇&环境搭建之Xib(玩转UINavigationController与UITabBarController) 前面我们介绍了StoryBoard这个新技术,和纯技术编程的代码创建界面,本篇我们将介绍一个老的技术,但是在很多的公司或者库里面还是使用这个技术,既然如此它肯定有他的好处,至于好处这里我就不一一介绍了.在Xcode5之前是只能使用Xib或者代码的,而代码又对于很多初学者来说算是一个难题.毕竟不知道怎么下手.所以我就总结了一下这段时间自己编写程序的一个实例来说明怎么

iOS开发——实战OC篇&环境搭建之纯代码(玩转UINavigationController与UITabBarController)

iOS开发——实战OC篇&环境搭建之纯代码(玩转UINavigationController与UITabBarController) 这里我们就直接上实例: 一:新建一个项目singleView Controller,命名未iCocos 二:由于我们使用的纯代码实现的,所以删除其中的StoryBoard和Viewtroller的两个文件 三:新建一个继承自TabBar Controller的类,我们命名问iCocos ViewController 三:在Appdelegate的实现文件中导入刚刚

iOS开发——实用技术OC篇&单例模式的实实现(ACR&MRC)

单例模式的实实现(ACR&MRC) 在iOS开发中单例模式是一种非常常见的模式,虽然我们自己实现的比较少,但是,系统却提供了不少的到来模式给我们用,比如最常见的UIApplication,Notification等, 那么这篇文章就简单介绍一下,我们开发中如果想要实现单例模式要怎么去实现! 单例模式顾名思义就是只有一个实例,它确保一个类只有一个实例,并且自行实例化并向整个系统提供这个实例.它经常用来做应用程序级别的共享资源控制.这个模式使用频率非常高,通过一个单例类,可以实现在不同窗口之间传递数

iOS开发——多线程OC篇&(三)线程安全

线程安全 一.多线程的安全隐患 资源共享 1块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源 比如多个线程访问同一个对象.同一个变量.同一个文件 当多个线程访问同一块资源时,很容易引发数据错乱和数据安全问题 问题代码: 1 // 2 // YYViewController.m 3 // 05-线程安全 4 // 5 // Created by apple on 14-6-23. 6 // Copyright (c) 2014年 itcase. All rights reserved

iOS开发——实战OC篇&环境搭建之StoryBoard(玩转UINavigationController与UITabBarController)

环境搭建之StoryBoard(玩转UINavigationController与UITabBarController) 研究了这么就IOS开发,都没有所处一个像样或者自己忙一点的项目.最近自己正打算开始着手做一个项目,可是不知道怎么下手,感觉前面学了好多,可是回头想想却又很难下手,其中最主要的就是第一步环境的搭建,当然在这之前还有选题和素材,但是那些对于ios开发来说都不是技术上的问题或者在以后公司里面一半都不是我们所考虑的.所以今天开始我将以三篇简短但又实用的文章给大家介绍一下,怎么搭建一个

iOS开发——控制器OC篇&UINavigationController&UITabBarController详解

UINavigationController&UITabBarController详解 一:UINavigationController 控制器的属性: UINavigationController以栈的形式保存子控制器 @property(nonatomic,copy) NSArray *viewControllers; @property(nonatomic,readonly) NSArray *childViewControllers; 导航控制器之间的跳转: 使用push方法能将某个控制

iOS开发——多线程OC篇&GCD实用总结

GCD实用总结 图片下载 注:iOS开发中常见GCD的实用也就这些了, 先来看看之前我们经常使用的方式: 1 static NSOperationQueue * queue; 2 3 - (IBAction)someClick:(id)sender { 4 self.indicator.hidden = NO; 5 [self.indicator startAnimating]; 6 queue = [[NSOperationQueue alloc] init]; 7 NSInvocationO

iOS开发——多线程OC篇&(一)多线程介绍

多线程简单介绍 一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcode,系统就会分别启动2个进程 通过“活动监视器”可以查看Mac系统中所开启的进程 2.什么是线程 1个进程要想执行任务,必须得有线程(每1个进程至少要有1条线程) 线程是进程的基本执行单元,一个进程(程序)的所有任务都在线程中执行 比如使用酷狗播放音乐.使用迅雷下载电影,都需要在线程中执行 3.线程的串行 1个线程中任

iOS开发——动画OC篇&所有常用动画总结

所有常用动画总结 先来装下B,看不懂没关系,其实我也看不懂-?? iOS provides several different frameworks for adding graphics and animations to your apps. UIKit is an Objective-C API that provides basic 2D drawing, image handling, and ways to animate user interface objects. Core G