ios逆向_ios逆向工程 - CSDN
  • ios逆向傻瓜入门教程(一)

    万次阅读 2018-01-03 09:19:00
    1.准备工作: (1)一台越狱手机,并装有以下软件:cycript,openssh (2)下载工具库,内容列表: ...(1)打开Mac的终端窗口,运行工具库的USBSSH目录下的tcprelay.py,执行命令: ... /Users/fujin/

    1.准备工作:

    (1)一台越狱手机,并装有以下软件:cycript,openssh

    (2)下载工具库,内容列表:


    (3)在越狱手机上,从appstore上,下载WeChat(微信)。

    2.ssh到手机终端

    (1)打开Mac的终端窗口,运行工具库的USBSSH目录下的tcprelay.py,执行命令:

              /Users/fujin/Desktop/USBSSH/tcprelay.py -t 22:2222


    (2)另打开一个Mac的终端窗口,执行命令:

             ssh root@127.0.0.1 -p 2222

            运行后,提示输入密码:alpine(默认密码)


    3.安装Theos开发工具:

    (1)另开启一个Mac终端窗口,cd到Theos-Script-master目录,执行命令:

           ./TheosScript.sh    回车,运行效果如图,输入 1  回车:



    (2)安装完毕后,在终端输入cd /opt/theos,如果有内容说明安装成功 ,如图:


    4.砸壳和导出微信头文件:

    (1)手机运行微信,保持在前台。找到刚才ssh成功的终端窗口,执行命令:ps -e,然后找到微信运行的进程id。



    (2)追加微信进程id ,执行命令:cycript -p 5409,继续执行命令(注意保持微信在前台运行):[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory   inDomains:NSUserDomainMask][0],如图


    (3)按快捷键control+D,退出cycript。

    (4)拷贝dumpdecrypted.dylib到微信的Documents目录下,dumpdecrypted.dylib在工具库的Crack-file-master目录下。另开启一个终端窗口,执行命令:

    scp -P 2222 /Users/fujin/Desktop/逆向/Crack-file-master/crack\ file/dumpdecrypted.dylib  root@127.0.0.1:/var/mobile/Containers/Data/Application/3F928AD9-8FE7-4BA0-BDD9-568F101B542F/Documents

    运行后输入密码:alpine


    (5)砸微信的壳,找到之前ssh手机的那个终端窗口,执行命令:

              命令1 :cd /var/mobile/Containers/Data/Application/3F928AD9-8FE7-4BA0-BDD9-568F101B542F/Documents/

              命令2: DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/containers/Bundle/Application/C698FCB3-AB86-4E06-BAE2-9765AECA5998/WeChat.app/WeChat(注意:“/var/containers/Bundle/Application/C698FCB3-AB86-4E06-BAE2-9765AECA5998/WeChat.app/WeChat” 这个是之前让记下来的地址!)


    (6)蒋砸壳后的文件和微信的安装app拷贝到到Mac上。操作步骤,在另一个终端窗口,执行命令:

          1.首先在Mac上建立一个文件夹,名字任意。

          2.在终端窗口,执行命令:

              (a)scp -P 2222 root@127.0.0.1:/var/mobile/Containers/Data/Application/3F928AD9-8FE7-4BA0-BDD9-568F101B542F/Documents/WeChat.decrypted /Users/fujin/Desktop/逆向/wechat


            (b)scp -r -P 2222 root@127.0.0.1:/var/containers/Bundle/Application/C698FCB3-AB86-4E06-BAE2-9765AECA5998/WeChat.app  /Users/fujin/Desktop/逆向/wechat


    (7)导出微信头文件:

        1.继续执行命令:cd Theos-Script-master/ 到这个目录下

        2.执行命令:./TheosScript.sh  ,回车,输入 2 ,回车,然后新建一个文件夹(我的叫头文件),然后按终端窗口的提示拖拽文件,WeChat.decrypted和上面刚建的头文件夹,回车。




      3.成功以后,会在头文件夹内有文件生成:


    (8)hook微信的登陆页的某个按钮的逻辑:

        1. 回到刚才ssh成功到手机的终端窗口,手机运行微信,并返回到微信的登陆页,然后终端执行命令:ps aux | grep WeChat (查看微信的进程)


      2.执行命令:cycript -p 6416 (注入微信进程)

                            UIApp.keyWindow.recursiveDescription().toString()(查看当前页view层级)


    我们可以随机的选取一个节点不要太靠树叶,也不要太靠树根,例如我选的是标红的部分,把这个节点的内存地址copy出来,这个内存地址,就代表了这个节点的view对象,ios开发的老油条们都知道,通过view的nextResponder方法,可以找出它所属的视图控制器ViewController,所以我么在cycript的控制台中持续输入如下的命令:


    结果发现,登陆页是WCAccountLoginFirstViewController这个控制器。

    3.在header文件夹内找到WCAccountLoginFirstViewController.h文件,发现有个函数叫-     (void)onChangeLanguage;我们准备hook这个函数。现在使用Logify,它是theos的一个模块,作用就是根据头文件自动生成tweak,生成的tweak会在头文件的所有方法中注入NSLog来     打印方法的入参和出参,非常适合追踪方法的调用和数据传递。

    在pc端的终端窗口执行命令:/opt/theos/bin/logify.pl /Users/fujin/Desktop/逆  向/weixin/header/WCAccountLoginFirstViewController.h >Tweak.xm,然后修改Tweak.xm内容,成下图这样(其实就是内部加了alert对话框).


    4.创建theos项目:

    我们进入终端,然后cd进入你要放工程的文件夹目录比如桌面上我新建好的一个文件夹“逆向”,然后执行启动 NIC(New Instance Creator)。如下:


    我们可以看到iphone/tweak,所以我们输入 11 选择一个tweak工程,然后回车确定后,会让我们输入一些名字 id 等等信息,如图:


    注意,要被hook的app的bundleId,也就是微信app的bundleId,可以在咱们导出来的WeChat.app的里面找到info.plist,查看bundleId。创建成功以后:


    然把上一步生成的Tweak.xm和这里的Tweak.xm进行替换。

    接下来修改Makefile文件内容跟下图一样:


    最后打包运行,执行命令:cd  到wachatapp目录下,

                                                  export THEOS=/opt/theos,

                                                  make package install (期间会提示输入两次ssh密码:alpine)


    运行以后,手机会自动重启,打开微信,进入到登陆页,点击右上角的切换语言(简体中文)按钮,会弹出alert提示框,如下图:


    这个alert弹出框,就是Tweak.xm文件里写的内容!

    那本章的内容就结束了,主要了解一下,大致的逆向的流程,下一篇(ios逆向傻瓜入门教程(二)),会讲一下把逆向的程序,打成ipa包,便于发布


    展开全文
  • IOS逆向工程,Tweak,走进iOS逆向的世界。 IOS逆向工程,Tweak,走进iOS逆向的世界。
  • iOS逆向研究01

    千次阅读 2017-09-06 14:53:09
    iOS逆向环境介绍 Drawin体系 Cydia - 越狱iOS的软件管理平台 Cydia 之父 - Jay Freeman杰 弗里曼 Cycript工具介绍作者saurik官网httpwwwcycriptorg 逆向的你基本思路 程序进程线程内存结构的概念 逆向工具集和安装和...

    ==iOS逆向环境介绍==

    * 越狱环境:iphone5s iOS 8.3*

    luz-iphone:~ root# uname -a
    Darwin luz-iphone 14.0.0 Darwin Kernel Version 14.0.0: Sun Mar 29 19:47:37 PDT 2015; root:xnu-2784.20.34~2/RELEASE_ARM64_S5L8960X iPhone6,2 arm64 N53AP Darwin
    1.Drawin体系
    • Darwin是一种类似unix的操作系统,他的核心XNU,XNU是一种混合式内核,结合了mach与BSD两种内核

      • 主流的类unix:
      • Linux 由Linus Torvalds研发的,代表发行版本CenOS,Redhat,Ubuntu,Debian,openWRT等

      • Mac OS X的Intel部分

      • freeBSD 由加州大学伯克利分校基于UNIX研发的(UNIX变种,当时如果不是与贝尔实验室打官司,可能就不会有现在的Linux什么事)

      • Solaris 由Sun(现为Oracel)开发的UNIX商业版本

    • BSD 实现在Mach的上层,这一层提供的API 支持了POSIX标准模型。在XNU中主要实现了一些高级的API与模块

      • UNIX 进程模型
        == e.g fork,vfork,wait,waitpid,exec等 ==

      • POSIX 线程模型即pthread,以及相关的同步功能
        == e.g pthread_create,pthread_mutex(线程互斥锁)==

      • UNIX的用户与组管理
        ==e.g root用户,mobile用户,chmod等==

      • 网络协议栈(BSD Socket API),符合POSIX 模型
        == e.g socket();bind(); listen();accept();connect(); gethostbyname(); gethostbyaddr()等伯克利套接字API==

      • 文件系统/设备系统
        == e.g Filesystem Hierarchy Standard(文件系统层次化标准)==

    • iOS,OSI,ISO的含义

      • iOS 苹果公司开发的移动操作系统

      • OSI 是Open System Interconnection的缩写,意为开放式系统互联。OSI模型把网络通信的工作分为7层,分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。

      • IOS是国际标准化组织。上面的OSI模型由该组织制定。一般类UNIX系统都基本符合POSIX标准和IOS C标准

      • POSIX表示可移植操作系统接口(Portable Operating System Interface)

      • IOS C标准,C语言标准库接口

    • 为什么越狱

    • 突破iOS沙盒机制的限制(sandbox)
      == 沙盒是一种安全机制,为运行中的程序提供隔离环境。沙盒在启动的时候可以设置运行的程序是否可以访问网络、文件、目录等==
      这里写图片描述
    2.Cydia - 越狱iOS的软件管理平台 (Cydia 之父 - Jay Freeman(杰 弗里曼))
    • 越狱iOS是合法的

    • 安装OpenSSH
      == 在Cydia中搜索OpenSSH并安装,这样iOS上面就可以开启SSH服务。SSH服务默认绑定端口号22 ==

      • 使用SSH命令连接iOS,默认登录密码”alpine”
         ssh root@xx.xx.xx.xx       //iOS连接wifi,设置中可以看到ip地址,也可以改成静态IP地址
    • 使用scp命令可以传输文件
      “`
      scp filename root@xx.xx.xx.xx:/tmp //拷贝本地文件到远端

      scp root@xx.xx.xx.xx:/tmp/filename /tmp/ //从远端拷贝文件到本地

    
     - 修改默认密码
      ```
        passwd root
    
       passwd mobile
     ```
    
    * 安装软件包管理工具apt-get
      == 在Cydia中搜索 APT 0.6 Transitional并安装 ==
    
      - 命令介绍
          ```
             apt-get update                    【更新所有的源】
    
             apt-get upgrade                 【更新所有通过apt-get安装的程序】
    
             apt-get install  packagename         【安装软件包】
    
             apt-get remove  packagename      【删除软件包,不删除依赖包,不删除配置文件】
    
             apt-get remove --purge packagename  【删除该软件包,不删除依赖包,删除配置文件】
    
             apt-get autoremove packagename       [删除该软件包,删除依赖包,不删除配置文件]
    
             apt-get autoremove --purge packagname    【可以删除所有依赖包+配置文件】
    
             apt-cache search string             【搜索含有该string字段的软件包】
    
             apt-cache show packagename     【详细显示该软件包的信息】
    
             apt-get clean                   【清除apt-get安装的软件包备份,可以释放储存空间,不影响软件正常使用】
        ```
    
    
     - 使用apt-get 安装软件包
        == e.g 安装traceroute ==
        ```
            apt-get install traceroute  //发现找不到软件包
    
            //如果不知道软件包名称,也可以用关键字搜索
            apt-cache search traceroute
    
            apt-get install  network-cmds
        ```
    
     - 安装必要工具
    
        ```
            apt-get install  ping
    
            apt-get install  ps
    
            apt-get install  find
    
            apt-get install tcpdump
    
            apt-get install top
    
            apt-get install vim
    
            apt-get install  network-cmds   //-arp, ifconfig, netstat, route, traceroute
        ```
    
      - 工具的使用
       ```
           ping www.baidu.com -c 4 -s 600  //发送icmp报文,检查网络状况
    
           ps aux                          //查看进程信息
           ps -e                           
    
           find / -name ping       //在根目录开始查找文件名为ping的文件
    
           grep -r 'hello*' /tmp   //在/tmp目录中查找包含'hello'字符的文件,-r表示包含子目录
    
           top
           top -l 1 | head -n 10 | grep PhysMem  //显示系统内存使用情况
    
           tcpdump -i en0 src host 192.168.1.137
           tcpdump -i en0 dst host 192.168.1.137
           tcpdump -w /tmp/ssh.cap -i en0 tcp port 22 and dst host 192.168.1.137
           tcpdump -w /tmp/ssh.cap -i en0 -t -s 0 -c 100 tcp port ! 22 and dst host 192.168.1.137
             解释:
            (1)-w /tmp/ssh.cap : 保存成cap文件,方便用ethereal(即wireshark)分析
            (2)-i en0 : 只抓经过接口en0的包
            (3)-t : 不显示时间戳
            (4)-s 0 : 抓取数据包时默认抓取长度为68字节。加上-S 0 后可以抓到完整的数据包
            (5)-c 100 : 只抓取100个数据包
            (6) tcp port ! 22  : 不抓tcp端口22的数据包
            (7) dst port ! 22 : 不抓取目标端口是22的数据包
            (8)dst host 192.168.1.137 : 抓取目标地址为192.168.1.137的包
            (9)src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24
       ```  
    
    #####  3.iOS文件系统结构
    - 可视化方式常看iOS系统文件
      ==在iOS通过Cydia安装Apple File Conduit 2,在OS X使用iFunBox可以查看iOS系统文件(iOS和OS X需要在通一个局域网内)==
    
    - 通过SSH远程登录iOS来查看
    
    - Filesystem Hierarchy Standard 文件系统层次化标准(以下简称FHS)
       ==FHS为类UNIX操作系统的文件目录结构制定了一套标准,目的是让用户预知文件或目录的存放位置。UNIX操作系统的常见目录结构如下所示。==
    
        ```
           /:根目录,以斜杠表示,其他所有文件和目录在根目录下展开。
    
           /bin:"binary"的简写,存放提供用户级基础功能的二进制文件,如ls、ps等。
    
           /boot:存放能使系统成功启动的所有文件。iOS中此目录为空。
    
           /dev:"device"的简写,存放BSD设备文件。每个文件代表系统的一个块设备或字符设备,一般来说,“块设备”以块为单位传输数据,如硬盘;而“字符设备”以字符为单位传输数据,如调制解调器。
    
           /sbin:"system binaries"的简写,存放提供系统级基础功能的二进制文件,如netstat、reboot等。
    
           /etc:"Et Cetera"的简写,存放系统脚本及配置文件,如passwd、hosts等。在iOS中,/etc是一个符号链接,实际指向/private/etc。
    
           /lib:存放系统库文件、内核模块及设备驱动等。iOS中此目录为空。
    
           /mnt:"mount"的简写,存放临时的文件系统挂载点。iOS中此目录为空。
    
           /private:存放两个目录,分别是/private/etc和/private/var。
    
           /tmp:临时目录。在iOS中,/tmp是一个符号链接,实际指向/private/var/tmp。
    
           /usr:包含了大多数用户工具和程序。/usr/bin包含那些/bin和/sbin中未出现的基础功能,如nm、killall等;/usr/include包含所有的标准C头文件;/usr/lib存放库文件。
    
          /var"variable"的简写,存放一些经常更改的文件,比如日志、用户数据、临时文件等。其中/var/mobile和/var/root分别存放了mobile用户和root用户的文件,是重点关注的目录。
        ```
    
    * UNIX系统文件权限简介(UNIX一切皆文件:读写普通文件、目录、设备、socket、管道、CPU信息、进程信息等)  
     -  系统用3位(bit)来表示文件的权限,从高位到低位分别是r(read)权限、w(write)权限,以及x(execute)权限。文件与用户的关系存在以下三种可能性:
       - 此用户是属主用户(文件所有者的权限)
       - 此用户不是属主用户,但在属主组里(组用户权限)
       - 此用户既不是属主用户,又不在属主组里(Other用户权限)
    
        ```
        1111 1111  = 2^0*1 + 2^1*1 + 2^2*1 + 2^3*1 + ...+2^7*1 = 2^8 - 1 
    
        8421
        1111  = 8+4+2+1 = 15
        1011  = 8+2+1 = 11
    
        rwx      r-x    r--
        111      101    100 
        所有者   属组   其他
    
        用3*3位来表示一个文件的权限,如果某一位为1,则这一位代表的权限生效,否则无效。例如,111101101代表rwxr-xr-x,即该文件的属主用户拥有r、w、x权限,而属主组和其他所有人只具有r和x权限;同时,二进制的111101101转换成十六进制是755,也是一种常见的权限表示法。
    
        可以使用chmod 命令修改文件权限,如 chmod  755  filename
      ```
    
    * iOS的独有目录
        ```
            /Applications:存放所有的系统App和来自于Cydia的App,但不包括StoreApp。
    
            /Developer:如果一台设备连接Xcode后被指定为调试用机,Xcode就会在iOS中生成这个目录,其中会含有一些调试需要的工具和数据。
    
            /Library:存放一些提供系统支持的数据。其中/Library/MobileSubstrate下存放了所有基于CydiaSubstrate(原名MobileSubstrate)的插件(如:tweak编写的插件)。
    
            /System/Library:iOS文件系统中最重要的目录之一,存放大量系统组件。
    
            /System/Library/Frameworks和/System/Library/PrivateFrameworks:存放iOS中的各种framework
    
            /System/Library/CoreServices里的SpringBoard.app:iOS桌面管理器(类似于Windows里的explorer),是用户与系统交流的最重要中介。
    
            /User:用户目录(其实就是mobile用户的home目录),实际指向/var/mobile,这个目录里存放大量用户数据,比如:
    
            /var/mobile/Media/DCIM下存放照片;
    
            /var/mobile/Media/Recordings下存放录音文件;
    
            /var/mobile/Library/SMS下存放短信数据库;
    
            /var/mobile/Library/Mail下存放邮件数据。
    
            /var/mobile/Containers,存放StoreApp。值得注意的是,App的可执行文件在bundle与App中的数据目录被分别存放在/var/mobile/Containers/Bundle和/var/mobile/Containers/Data这两个不同目录下。其中/var/mobile/Containers/Data是我们常用的应用沙盒目录的起始目录:NSString *directory = NSHomeDirectory(); //获取沙盒根目录
    
        ```
    
    
    * iOS应用(Store App)沙盒目录:
     - Application Bundle  包含应用可执行文件和资源文件
      ```
      如获取iOS上微信程序的Bundle路径,可以通过ps -e | grep  appname  
      luz-iphone:/ root# ps -e | grep WeChat
       1368 ??         5:41.43 /var/mobile/Containers/Bundle/Application/749DC69A-3A8D-4B5C-9926-1220E69FC85F/WeChat.app/WeChat
    • Application Data 包含App运行生产的数据和配置信息等

      如获取iOS上微信程序的Date路径,可以通过cycript工具
      luz-iphone:~ root# cycript -p WeChat
      cy# directory = NSHomeDirectory()
      @"/var/mobile/Containers/Data/Application/986376B5-EF08-4CAF-81FB-CAE48D1FE4AE"
      cy# 

      Date目录结构如下:

      luz-iphone:/var/mobile/Containers/Data/Application/986376B5-EF08-4CAF-81FB-CAE48D1FE4AE root# ls
      Documents/  Library/  tmp/
      • Document 存放应用运行时生成的并且需要保存的数据。注:iTunes或iCloud同步设备时会备份该目录

      • Library/Caches 存放应用运行时生成的并且需要保存的数据。iTunes或iCloud不同步。

      • Library/Preferences 存放偏好设置。iOS的偏好设置(settings)应用也会在该目录查找应用的设置信息。NSUserDefaults保存在该目录下。iTunes或iCloud同步设备时备份该目录。

      • tmp 存放应用运行时所需的临时数据。当某个应用没运行时,iOS系统可能会清除该目录下的文件。但不可依赖这种自动清除机制,应该及时手动清除。

    4.Cycript工具介绍(作者:saurik,官网:http://www.cycript.org/
    • Cycript是一款脚本语言,可以看作是Objective-JavaScript,它可以帮助我们轻松测试和验证函数效果。

      • 在越狱手机中可以通过注入方式在第三方应用中运行

      • 也可以用静态库的方式把cycript集成到自己的应用(MonkeyDev,可以给非越狱iOS第三方App写插件,但是权限受沙盒限制)

    • 在越狱手机中安装Cycript

      • 在Cydia上搜索Cycript进行安装

      • apt-get install cycript

    • Cycript使用(注入到第三方进程空间)

      • 注入Cycript模块到第三方进程

        //确认进程名或者进程PID
        luz-iphone:/ root# ps -e | grep WeChat 
        1368 ??         6:17.44 /var/mobile/Containers/Bundle/Application/749DC69A-3A8D-4B5C-9926-1220E69FC85F/WeChat.app/WeChat
        
        //打开方式1
        luz-iphone:/ root# cycript -p WeChat
        cy# 
        
        //打开方式2
        luz-iphone:/ root# cycript -p 1368  
        cy# 
      • 退出cycript
        Control+D

      • 实战演练

      //WeChat  cycript -p WeChat
      [[UIApplication sharedApplication] setStatusBarHidden:YES]   //隐藏状态栏
      [[UIApplication sharedApplication] setStatusBarHidden:NO]    //显示状态栏
      
      [[[UIAlertView alloc]initWithTitle:@"Tanzhou" message:@"Hello luz" delegate:ni cancelButtonTitle:@"ok" otherButtonTitles:nil, nil] show]            //弹框
      
      [[UIApplication sharedApplication] setApplicationIconBadgeNumber:1000]   //设置badge数字 
      [[UIApplication sharedApplication] setApplicationIconBadgeNumber:1]
      [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0]
      [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0]
      
      //SpringBroad cycript -p SpringBroad
      [[SBScreenShotter sharedInstance] saveScreenshot:YES]   截屏,闪光
      [[SBScreenShotter sharedInstance] saveScreenshot:NO]   截屏,不闪光
      [[SBScreenFlash mainScreenFlasher] flashColor:[UIColor magentaColor] withCompletion:nil] 屏幕闪紫色光
      
    5.逆向的你基本思路
    • 正向工程(Forward Engineering)
      抽象的逻辑设计 => 具体的物理实现

      设计概念和算法 => 编写源代码 => 编译成二进制机器码

      将想法和设计理念变成具体实现的过程

    • 逆向工程(Reverse Engineering)
      具体的物理实现 => 抽象的逻辑设计
      反编译机器码 => 汇编代码(类似的高级语言代码) => 理解其算法和设计概念

      从二进制码中提取设计概念和算法

    • 程序的编译和反编译
      高级语言(C/C++/Oc/Java/Python/C#) -> 中间语言(如:汇编等) -> 目标代码(exe/lib/dll/sys/dylib等二进制文件)

                编译链接   
      高级语言   ------->    机器码   
                <------     机器码  
               反汇编/反编译
      
            编译链接
      高级语言  ===>     机器码  
              <===
            反汇编/反编译
    • 逆向的思路

      • 逆向必须是有目的的、有针对性的(明确你要做的事情)

      • 先熟悉你要逆向的目标程序,从正向的思路去猜测他可能的实现方法(使用的框架、调用的系统API等)

      • 定位关键代码

      • 通过监控UI事件的响应定位关键代码

      • 通过监控底层API的调用定位关键代码(如网络访问接口、文件读写接口等)

      • 通过观察数据的变化来定位关键代码和地址

      逆向是一个试错的过程,需要不停的猜测、查找和进行验证,既考验耐心也考验动手能力

      6.程序、进程、线程、内存结构的概念
    • 程序(静态的,磁盘上)
      程序是完成某个功能的指令集。程序一般是指可执行的二进制文件。

    • 进程(动态的,内存中)

      • 进程的概念
        进程是程序的运行实例,是系统进行资源分配和调度运行的基本单位。

      换句话说进程是一个容器,包含程序执行需要的代码、数据还有资源等信息。多任务的操作系统,可以同时执行多个进程。

      • 进程虚拟地址空间
        多任务操作系统中的每一个进程都运行在一个属于它自己的内存沙盘中,这个沙盘就是虚拟地址空间
        (virtual addressspace), 在32位经典模式下,它总是一个4GB的内存地址块。这些虚拟地址通过页表(pagetable)
        映射到物理内存,页表由操作系统维护并被处理器引用。每个进程都拥有一套属于它自己的页表,但是还有一个隐情,
        只要虚拟地址被使能,那么它将会作用于这台机器上运行的所有软件,包括内核本身,因此,有一部分虚拟地址必须保
        留给内核使用。
    • 线程
      轻量级进程,是进程内一个相对独立的、可调度的执行单元,是CPU调度的基本单元。

    • 函数
      包含某个特定功能的代码块,可以叫做子程序。

    • 典型的内存空间布局

      • 从低地址到高地址依次为:代码区、只读常量区、全局区/数据区、BSS段、堆区、栈区。
      代码区:存放可执行指令。
      
      只读常量区:存放字面值常量、具有常属性且被初始化的全局和静态局部变量(如:字符串字面值、被const关键字修饰的全局变量和被const关键字修饰的静态局部变量)。
      
      全局区/数据区:存放已初始化的全局变量和静态局部变量。
      
      BBS段:存放未初始化的全局变量和静态局部变量,并把它们的值初始化为0。
      
      堆区:存放动态分配的内存。
      
      栈区:自动变量和函数调用时需要保存的信息(逆向分析的重点)
      
      补充:
        代码区和只读常量区一般统称为代码段
      
        栈区和堆区之间相对生长的,堆区的分配一般按照地址从小到大进行,而栈区的分配一般按照地址从大到小进行分配。

      这里写图片描述

    7.逆向工具集和安装和使用
    • iOS逆向工程的工具大致可分为四类:

      • 检测工具
        如:Reveal、tcpdump等

      • 反编译工具(反汇编工具 - 分析二进制文件并得到一些信息)
        如:IDA、Hopper Disassembler、classdump等

      • 调试工具
        如:lldb、Cycript等

      • 开发工具
        如:Xcode、theos等

      • classdump
        可以将Mach-O文件中的Objective-C运行时的声明的信息导出,即编写OC代码时的 .h文件。class-dump只能导出未经加密的App的头文件。classdump是对”otool -ov” 信息的翻译,以一种我们熟悉的易读的方式呈现。官网http://stevenygard.com/projects/class-dump/

        where options are:
            -a             show instance variable offsets
            -A             show implementation addresses
            --arch <arch>  choose a specific architecture from a universal binary (ppc, ppc64, i386, x86_64)
            -C <regex>     only display classes matching regular expression
            -f <str>       find string in method name
            -H             generate header files in current directory, or directory specified with -o
            -I             sort classes, categories, and protocols by inheritance (overrides -s)
            -o <dir>       output directory used for -H
            -r             recursively expand frameworks and fixed VM shared libraries
            -s             sort classes and categories by name
            -S             sort methods by name
            -t             suppress header in output, for testing
            --list-arches  list the arches in the file, then exit
            --sdk-ios      specify iOS SDK version (will look in /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS<version>.sdk
            --sdk-mac      specify Mac OS X version (will look in /Developer/SDKs/MacOSX<version>.sdk
            --sdk-root     specify the full SDK root path (or use --sdk-ios/--sdk-mac for a shortcut)
    • otool工具简介
      otool(object file displaying tool) :目标文件的展示工具。可以用来发现应用中使用到了哪些系统库,调用了其中哪些方法,使用了库中哪些对象及属性,它是Xcode自带的常用工具。


      -f print the fat headers
      -a print the archive header
      -h print the mach header
      -l print the load commands
      -L print shared libraries used
      -D print shared library id name
      -t print the text section (disassemble with -v)
      -p <routine name> start dissassemble from routine name
      -s <segname> <sectname> print contents of section
      -d print the data section
      -o print the Objective-C segment
      -r print the relocation entries
      -S print the table of contents of a library
      -T print the table of contents of a dynamic shared library
      -M print the module table of a dynamic shared library
      -R print the reference table of a dynamic shared library
      -I print the indirect symbol table
      -H print the two-level hints table
      -G print the data in code table
      -v print verbosely (symbolically) when possible
      -V print disassembled operands symbolically
      -c print argument strings of a core file
      -X print no leading addresses or headers
      -m don't use archive(member) syntax
      -B force Thumb disassembly (ARM objects only)
      -q use llvm's disassembler (the default)
      -Q use otool(1)'s disassembler
      -mcpu=arg use `arg' as the cpu for disassembly
      -j print opcode bytes
      -P print the info plist section as strings
      -C print linker optimization hints
      --version print the version of /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/otool

      • 依赖库的查询
        如: otool -L WeChart

      • 是否加壳
        如:otool -l WeChart | grep -B 2 crypt

    • classdump的使用
      class-dump -s -S -H /Applications/Memenet/Memenet.app/Contents/MacOS/memenet -o ./MyHeaders

      “`
      查看某文件夹下文件的个数,包括子文件夹里的。
      ls -lR|grep “^-“|wc -l

      查看某文件夹下文件夹的个数,包括子文件夹里的。
      ls -lR|grep "^d"|wc -l
      

      “`

        定位要砸壳的StoreApp的执行文件名字TargetApp (ps -e 可以得到全路径)  
    
        定位要砸壳的StoreApp的Document目录:
        cycript -p TargetApp
        [[NSFileManager defaultManager]URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0]
    
        得到路径:#"file:///var/mobile/Containers/Data/Application/986376B5-EF08-4CAF-81FB-CAE48D1FE4AE/Documents/"
    
        进入Document目录: cd  /var/mobile/Containers/Data/Application/986376B5-EF08-4CAF-81FB-CAE48D1FE4AE/Documents/
        拷贝dumpdecrypted.dylib: cp  dumpdecrypted.dylib .
    
        DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Containers/Bundle/Application/749DC69A-3A8D-4B5C-9926-1220E69FC85F/WeChat.app/WeChat
    
     ```
    
     * theos(作者:@DHowett)
       越狱开发工具包
    
      - xcode工具集的路径需要设置正确
         查看命令: xcode-select --print-path   
    
        设置命令: xcode-select --switch /Applications/Xcode-beta.app/Contents/Developer 
    
      - 通过github安装theos
         https://github.com/theos/theos/wiki/Installation
    
      - 修改所有者
        sudo chown -R $(id -u):$(id -g) theos 
    
        theos维基百科:
        http://iphonedevwiki.net/index.php/Theos/Setup#For_Mac_OS_X
        http://iphonedevwiki.net/index.php/Theos
    
      - 环境变量
         export THEOS=/opt/theos
    
        可以写入~/.bash_profile
        source ~/.bash_profile 
    
        echo $THEOS
    
    - ldid(作者:saurik )
       维基百科:http://iphonedevwiki.net/index.php/Ldid
    
       越狱iPhone下的签名工具(更改授权entitlements),可以为thos开发的程序进程签名(支持在OS X和iOS上运行)。
    
     - 安装ldid
       $ brew install ldid fakeroot
    
     -  加密算法
       - 对称加密算法:RC4DES3DES、AES128AES256等。加解密双方密钥相同。
    
       - 非对称加密算法:RSAElgamal等。加解密双方使用密钥对。
    
       - 哈希算法:MD5(16Byte)、SHA1(20Byte)等。任意长度的信息转换成到某一固定长度的信息摘要(具有唯一性,不可逆性),主要作用是对数据数据完整性校验。
    
      -  数字签名  (苹果官方的私钥签名,公钥验证)
          - 数字签名是非对称密钥加密技术与数字摘要技术的应用。对指定信息使用哈希算法,得到一个固定长度的信息摘要,然后再使用 私钥 (注意必须是私钥)对该摘要加密,就得到了数字签名。
    
     - 数字证书
       数字证书是一个文件,由苹果的 Apple Worldwide Developer Relations Certification Authority(WWDR)证书认证中心进行签名,其的主要作用是用来标示身份。证书文件主要包含两部分内容:证书信息和证书签名
        - 证书信息
           包含用户的公钥、用户个人信息、证书颁发机构信息、证书有效期等信息。(这里的用户主要指开发者)
    
        - 证书签名
           WWDR将上述证书本身内容的使用哈希算法得到一个固定长度的信息摘要,然后使用自己的私钥对该信息摘要加密生成数字签名。
    
        - 证书的验证
       iOS系统原本就持有WWDR的公钥,系统首先会对证书内容通过指定的哈希算法计算得到一个信息摘要;然后使用WWDR的公钥对证书中包含的数字签名解密,从而得到经过WWDR的私钥加密过的信息摘要;最后对比两个信息摘要,如果内容相同就说明该证书可信。在验证了证书是可信的以后,iOS系统就可以获取到证书中包含的开发者的公钥,并使用该公钥来判断代码签名的可用性了。
    
        - 证书存在的意义
        通过证书使用过程可以看出,证书本身只是一个容器,用来承载开发者的公钥。iOS通过验证证书的合法性来确保开发者公钥的合法性。
    
      - 代码签名与验证(开发者的私钥签名,公钥验证)
          打包过程中使用开发者私钥对应用进行签名。   
    
          开发者的公钥被包含在数字证书里,数字证书又被包含在描述文件(Provisioning File)中,描述文件在应用被安装的时候会被拷贝到iOS设备中。iOS安全系统通过证书就能够确定开发者身份,就能够通过从证书中获取到的公钥来验证开发者用该公钥对应的私钥签名后的代码、资源文件等有没有被更改破坏,最终确定应用能否合法的在iOS设备上合法运行。
    
      - 工具的使用
    
        ```
        查看codesign load command 
        otool -l WeChat | grep -A 5 SIGNATURE
    
        查看签名信息
        ➜  tmp codesign -dvvv WeChat
        Executable=/private/tmp/WeChat
        Identifier=com.tencent.xin
        Format=Mach-O universal (armv7 arm64)
        CodeDirectory v=20200 size=448783 flags=0x0(none) hashes=14017+5 location=embedded
        Hash type=sha256 size=32
        CandidateCDHash sha1=6e2f8a93dbe63c17ea3b3a3dc032826b9eddf2b7
        CandidateCDHash sha256=d6f1afe23b598a76301711a4a62a5505a749a12a
        Hash choices=sha1,sha256
        CDHash=d6f1afe23b598a76301711a4a62a5505a749a12a
        Signature size=3925
        Authority=Apple iPhone OS Application Signing
        Authority=Apple iPhone Certification Authority
        Authority=Apple Root CA
        Info.plist=not bound
        TeamIdentifier=88L2Q4487U
        Sealed Resources=none
        Internal requirements count=1 size=96
    
        查看entitlement内容 
        codesign -d --entitlements - WeChat
        ldid -e WeChat
    
        修改entitlement内容 
        ldid -Sentitlement.xml  WeChat
        ```
    
    - dpkg工具
    
     - 安装

    $ brew install –from-bottle https://raw.githubusercontent.com/Homebrew/homebrew-core/7a4dabfc1a2acd9f01a1670fde4f0094c4fb6ffa/Formula/dpkg.rb
    $ brew pin dpkg

    
      - 使用

    dpkg -i/-r deb包安装/卸载
    dpkg -s com.iosre.myiosreproject 查看安装包信息
    “`

    展开全文
  • iOS逆向工程之App脱壳

    千次阅读 2017-03-15 14:39:28
    "砸壳"在iOS逆向工程中是经常做的一件事情,,因为从AppStore直接下载安装的App是加壳的,其实就是经过加密的,这个“砸壳”的过程就是一个解密的过程。未砸壳的App是无法在Class-dump、Hopper等工具中使用的。所以...

    本篇博客以微信为例,给微信脱壳。"砸壳"在iOS逆向工程中是经常做的一件事情,,因为从AppStore直接下载安装的App是加壳的,其实就是经过加密的,这个“砸壳”的过程就是一个解密的过程。未砸壳的App是无法在Class-dump、Hopper等工具中使用的。所以我们要将App进行砸壳处理。在Android开发中也存在App加壳的处理,比如什么360加固了,其实就是给App加一层壳。

    本篇博客我们就以WeChat(微信)为例,从AppStore上下载微信并安装,然后使用dumpdecrypted工具(当然你也可以使用其他砸壳工具)进行砸壳处理。砸壳后会生成解密后的App文件,然后我们就可以使用Class-dump和Hopper处理解密后的文件了。废话少说,就开始今天的主题。

     

    一、生成dumpdecrypted.dylib动态库

    首先我们要生成“砸壳”用的动态库dumpdecrypted.dylib,我们“砸壳”时主要用到这个动态库。该动态库的源码在github上是开源的(Github地址),要想得到dumpdecrypted.dylib这个动态库,只需要从github上下载代码,然后进行编译,生成dumpdecrypted.dylib即可。下方就是使用make命令对dumpdecrypted的源码进行编译。

    进入到dumpdecrypted文件夹下,运行make命令即可。

      

    编译完成后,dumpdecrypted文件夹中就会多一个dumpdecrypted.dylib动态库,该动态库就是稍后我们砸壳使用的工具。

      

     

    二、“砸壳”前的准备工作

    接下来就是要在越狱手机上寻找要“砸壳”的app路径了,首先使用ssh连接到你的越狱设备,然后在越狱设备中打开你要砸壳的App, 此处我们以微信为例。从AippStore中下载安装的应用都会位于/var/mobile/Applications中,下方的截图就是我手机上从AppStore中下载的应用的安装路径。当然,下方是使用iExplore工具进行查看的,下方内容中,文件的拷贝我们都会用到iExplorer,当然你也可以使用之前提到过的iFunBox

      

     

    从上方的截图中要找出微信所在的目录是非常困难的,应用少的话你可以点开一个个的看。向上面这种应用比较多的情况的话,一个个文件夹点开是不太现实的,所以我们得通过另一种方式来定位“微信”App所在的目录。

    这种快捷定位“微信”所在目录的方式就是“查看应用进程”的方式,首先你需要打开微信,然后运行下方的命令,来查看文件目录/var/mobile/目录下的所有正在运行的App进行,具体要用到的命令如下所示:

     ps -e | grep /var/mobile

      

     

    上方截图就是上述命令运行后所输出的内容,从上述内容中我们轻而易举的就可以找到“WeChat”所在目录。我们可以通过iExplore打开该目录,更直观的来看一下微信App所在的目录,具体内容如下所示. 上面这个进程的绝对路径我们要记下来,因为后边砸壳的时候会使用到该路径

      

    接下来我们就要使用Cycript工具来寻找WeChat的Document路径了,如果你的越狱设备上没有安装Cycript工具的话,那么请前往Cydia下载安装Cycript工具。下方步骤就是使用Cycript工具来查看附加进程的Document目录的步骤。

     

    1.使用Cycript注入目标进程中

    cycript -p WeChat

    上述命令执行完毕后,会进入到cycript模式中,如下所示。当然,在iOS9.2.1上的越狱设备执行上述命令会报错,可能是目前Cycript这个强大的工具还不支持iOS9.2吧。所以我是在iOS7.2上做的该实验。

      

     

    2.获取该进程的Document目录

    [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectoryinDomains:NSUserDomainMask][0]

    输入上述内容,然后点击回车,就会输出WeChat进程的Document目录,输出结果如下所示。下方的红色部分就是WeChat的Document目录的绝对路径。

      

     

    找到上述目录后,使用iExplore进入到该目录下,将上面我们生成的dumpdecripted.dylib动态库拷贝到该目录下即可,如下所示:

      

     

    三、开始砸壳

    上述“砸壳”的准备工作就绪后,接下来我们就要开始砸壳了。进入到WeChat的Document目录中,执行下方的命令进行砸壳。

    DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Applications/3DC16044-E5BB-4038-9E31-CFE3C7134A7B/WeChat.app/WeChat

    在上述命令中,DYLD_INSERT_LIBRARIES后边这个动态库就是我们上面生成的动态库,后边这个路径就是WeChat执行文件的绝对路径,运行上述命令后,就开始砸壳了,下方截图就是我们砸壳的过程。
       

     

    砸壳过程完成后,会在我们的Document目录下生成一个WeChat.decrypted文件,如下截图所示。该文件就是脱壳后的文件,我们可以将该文件拷贝到我们的Mac上,以备使用。

      

     

    四、导出脱壳App的头文件

    将上面生成的WeChat.decrypted脱壳文件拷贝的我们的Mac上,接下来就是我们class-dump出厂的时刻了。接下来我们要使用class-dump导出该脱壳文件的所有头文件。具体步骤如下所示。

     

    1.前奏

    WeChat.decrypted文件后,我执行了下方的命令来导出其头文件,下方的命令在没有加壳的app中是好使的,直接就可以导出相应App的头文件,如下所示:

    class-dump -S -s -H WeChat.decrypted -o ./Headers

    执行上述命令结束后是下方这个结果, 并没有导出想要的头文件,Google了一下,是ARM的架构不对,所以就没导出成功。

      

     

    2.开始导出头文件

    从上述截图中我们可看到,Headers文件夹中并没有生成相应的头文件。是我们解密的文件有问题吗?于是乎,我使用了Hopper打开了解密后的文件,是可以正常打开的,于是乎又Google一下,原来是我们在导出头文件时指定的ARM架构不正确,于是乎使用class-dump的--arch配置项来指定了armv7的架构,这样的话,头文件就导出成功了。

    class-dump --arch armv7 -S -s -H WeChat.decrypted -o ./Headers

    操作步骤和结果如下图所示, 导出成功,你可以慢慢的分析了。

       

     

    五、Hopper

    上面使用了class-dump来操作我们脱壳的文件,木有问题。那么接下来来看一下在Hopper上的效果如何,下方就是使用Hopper打开“脱壳”文件的效果。当然,你也可以使用IDA Pro来查看,当然此处我们使用的是Hopper。从下方的截图来看,结果是Perfect的。

      

     

    至此呢,我们脱壳的过程就这么愉快的结束了,你可以去分析你想分析的东西了。

     

    展开全文
  • iOS逆向开发案例

    万人学习 2019-08-20 17:16:49
    本套课程相信能够帮助到想学习逆向的你,为你节约大量的时间,将时间充分运用到实践的过程中,并非在逆向的“门前”爬坑。在这个系列里,我们从密码学入手,了解常见加密算法,通过数字签名等技术学习iOS应用签名。...
  • IOS逆向-浅析越狱

    2020-04-25 11:19:40
    iOS 越狱(iOS Jailbreaking),是用于获取苹果公司便携装置操作系统iOS最高权限(root权限)的一种技术手段,用户使用这种技术及软件可以获取到 iOS 的最高权限。 用户越狱完毕之后,可以透过如Cydia(越狱是否成功的...

    IOS越狱

    iOS 越狱(iOS Jailbreaking),是用于获取苹果公司便携装置操作系统iOS最高权限(root权限)的一种技术手段,用户使用这种技术及软件可以获取到 iOS 的最高权限。

    用户越狱完毕之后,可以透过如Cydia(越狱是否成功的一个标志)这一类包管理器,来安装 App Store 以外的扩展软件及外观主题;或是完成越狱前无可能进行的动作,如安装Linux系统;也可以使用命令行shell程序;同时可以访问 root 内部的文件。

    越狱类型

    越狱的质量在很大部分依赖于发现的安全漏洞,这些漏洞被用来解除设备的强制约束。一旦一个越狱的漏洞被知晓,苹果公司自然会尽快在下一版本的iOS中进行修补,所以几乎每个新版本的iOS都需要一套新的漏洞来进行越狱。

    依赖越狱使用的漏洞,越狱的效果可能长期的,也可能在设备关机再开启后消失。为了描述两种不同的越狱,越狱社区把这两种方式叫做 完美越狱(tethered jailbreak)和 非完美越狱(untethered jailbreak)。

    iOS 12.4

    已激活的 iOS 设备可尝试直接通过 爱思助手 结合 yalu102 工具一键越狱( iOS 10.1亲测有效),本人手头的iOS测试机为一台未激活的 iPhone 6 plus,操作系统为 iOS 12.4,无法使用爱思助手直接越狱,故下面使用checkra1n工具进行越狱。

    一直以来,CheckRa1n越狱工具只能在 Mac 或者“黑苹果”系统上使用,没有Mac的 Windows 用户想越狱怎么办?下面给大家分享:无需MAC电脑,直接使用Windows通过使用Linux U盘checkra1n越狱教程。越狱文件下载地址:百度网盘,提取码:aa9g。
    在这里插入图片描述越狱需知:

    1. 本工具基于ubuntu制作,镜像大小176MB,支持Legacy与UEFI启动,不挑CPU和主板平台。
    2. 精简的原因删除了视窗界面,打开越狱工具后使用上下左右方向键和回车键
    3. 如果遇到usb error code -77 错误,不妨试试插拔手机,等待手机重启。因为checkra1n本身还是有bug的。

    越狱步骤

    1、准备好1G以上U盘一个,下载好百度网盘中的 Win32DiskImager 和 checkra1nLinux.iso 文件;

    2、打开Win32DiskImager, 选择 checkra1nLinux.iso(选择对话框要选择全部文件 ),点击write,等待写入完成;
    在这里插入图片描述3、重启电脑,进入BIOS选择U盘启动(具体操作百度不同型号的电脑);
    在这里插入图片描述
    4、等待启动至命令行, 输入checkra1n即可打开越狱工具,若要重启电脑输入reboot,关机输入poweroff;
    在这里插入图片描述
    5、移动光标至start即可开始越狱。
    在这里插入图片描述
    6、最后按照系统提示的方法,重启手机便可发现越狱成功,能正常使用Cydia。

    Cydia

    Cydia 是 iOS设备上的一种破解软件,类似苹果在线软件商店iTunes Store的软件平台的客户端,在越狱的过程中被装入到系统中的。Cydia的主要目的是为越狱的iOS用户提供一个高级包装工具的图形界面前端以安装不被App Store接受的程序。

    Terminal

    MobileTerminal 是一款在iOS设备中的终端管理软件(提供类似于UNIX的Shell环境),采用类似于命令行的非图形界接口理您的iOS设备的进程,以及运行一些专门为命令行下工作的软件。越狱后在 Cydia 搜索 Terminal 可进行安装:
    在这里插入图片描述

    安装完在桌面点击应用图标进入终端,输入su 命令可提升到 root 管理员权限,提示输入root账户的密码时输入“alpine”:
    在这里插入图片描述

    OpenSSH

    Secure Shell(安全外壳协议,简称SSH)是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境。SSH协议可以用来进行远程控制, 或在计算机之间传送文件。

    OpenSSH 是SSH协议的免费开源实现,在 iOS 设备中可以通过 OpenSSH 的方式让 PC 主机远程登录到 iOS设备,此时进行访问时,PC 是客户端,而iOS设备相当于一台 Unix服务器。安装 OpenSSH 首先需要将设备越狱,越狱完成之后,就可以在 Cydia 中直接查找和安装 OpenSSH。

    下面演示通过OpenSSH来远程连接IOS设备:

    1、首先让 PC 和 IOS 设备连接同一 WIFI 处于同一局域网内,确定 IOS设备的IP地址:192.168.68.254,然后在Win 10主机上打开 Xshell 6远程连接工具,配置要连接的 iOS设备的地址:
    在这里插入图片描述
    2、配置登录 root 账号的用户名和密码(密码默认为alpine):
    在这里插入图片描述
    3、成功连接设备,可以开始使用命令行对 iOS设备进行远程管理了:
    在这里插入图片描述

    IPA安装

    成功越狱之后发现了一个问题,我的 iPhone 6 plus测试机由于原机主未解绑Apple ID,导致手机无法激活……虽然可以注册自己的Apple ID完善资料后登录即可在App Store安装 iOS 官方应用,但是却没办法直接安装客户提供的ipa安装文件……

    使用爱思助手或者iTools直接尝试安装ipa文件时,均会提示先使用原机主的Apple ID(邮箱和密码)激活手机后才能安装……
    在这里插入图片描述经过百般折腾,最后找到一种不需要激活 iOS 设备即可直接安装 ipa 文件的方法:

    1、通过蓝奏云平台(https://www.lanzou.com/)上传ipa文件:
    在这里插入图片描述

    2、然后在IOS测试机上的safari浏览器访问文件地址,即可成功安装客户提供的ipa文件,不需要原机主的Applie ID激活机子:
    在这里插入图片描述

    展开全文
  • 1.准备工作: (1)一台越狱手机,并装有以下软件:cycript,openssh (2)下载工具库,内容列表: (3)在越狱手机上,从appstore上,下载WeChat(微信)。 ...(1)打开Mac的终端窗口,运行工具库的USBSSH目录下...
  • iOS逆向工程-工具篇

    千次阅读 2018-05-27 08:46:26
    对于初开始学习iOS逆向工程的人来说,实现一个tweak可以算是入门逆向工程了。 当然了,可能你现在还不知道tweak是什么。简单来说,你可以把一个tweak当作某一个app的一个插件(类似于浏览器广告屏蔽插件)。在app...
  • ios逆向

    千次阅读 2016-05-03 11:56:34
    虽然iOS系统相比于其他手机操作系统相对安全,但是这个安全并不是绝对的。此文想以实际例子出发,告诉大家,如何去反编译一个app。
  • IOS逆向笔记之HOOK实现(非越狱)

    万次阅读 2017-08-26 22:55:29
    HOOK是越狱的最终目标,目的是给应用添加功能如插件或者是更改应用的某个功能来满足我们的需求,如微信中添加抢红包插件。本文将以最近比较火的“快看”漫画为例子去除付费漫画中的收费弹窗,实现免费看漫画的功能,...
  • 移动App入侵与逆向破解技术-iOS

    万次阅读 多人点赞 2016-11-22 11:43:24
    - 简单介绍ios二进制文件结构与入侵的原理 - 介绍入侵常用的工具和方法,包括pc端和手机端 - 讲解黑客技术中的静态分析和动态分析法 - 通过一个简单的实例,来介绍如何综合运用砸壳、寻找注入点、lldb远程调试、追踪...
  • 3、iOS越狱(iOS Jailbreak)的优点和缺点 4、完美越狱和非完美越狱以及如何判断是否越狱成功? 5、Cydia(越狱后的App Store) 6、iphone/Mac必备软件安装以及安装包 7、代码判断设备是否越狱 8、提高工作效率的...
  • iOS逆向之旅 — 总纲

    2018-10-15 16:59:40
    学习iOS逆向的用处 学习路线 逆向杂谈 因为我大学期间开发游戏外挂,对于逆向的强大有过不小的认识。能让别人的代码照着自己的思路去走,感觉是蛮优秀的一件事。所以带着好奇心去研究了iOS逆向。对于iOS逆向,...
  • 提到iOS逆向,网上的文章铺天盖地,创作时间从2014年到2019年不等。绝大部分的工具或命令都过时了。书籍更不用说。 我刚刚结束了为期1月的零基础iOS逆向研究,现已经成功逆向了微信的一些复杂逻辑。现在分享一下我的...
  • IOS逆向需要的工具

    2017-08-11 18:41:06
    以下进行罗列一些IOS逆向需要的帮助工具,加快我们的逆向过程,和方便我们进行相应的逆向操作。同时可以起到画点成面的效果。这正是我们再分析和理清思路的必要过程。接下来我只进行罗列。后期有时间 我会把对应的...
  • ios逆向工程-静态分析

    千次阅读 2014-12-06 17:32:06
    最近在学习IOS逆向工程,查看网络上的资料也不是太多,边学边总结一下。 首先学习资料: 念茜(大神)的博客: http://nianxi.net 《ios应用逆向工程 分析与实战》 --------------------------...
  • iOS 逆向-非越狱手机Hook App

    万次阅读 2018-05-10 17:35:04
    由于对iOS逆向分析很感兴趣,所以也花了很长一段时间学习了iOS逆向相关知识,并积累了一些相关经验, 这几天又到看雪论坛逛了一下,看看最近有没有什么大牛分享心得成果的!还真让我看到一篇有意思的文章【原创】...
  • 初探iOS逆向工程+微信小牛试刀

    千次阅读 2017-02-17 13:35:14
    何为逆向工程?逆向工程,指的是通过分析一个程序或...推荐的书籍:iOS逆向交流论坛:http://iosre.com/开始尝试简单的微信抢红包应用脱壳:准备工作 一台已越狱的iPhone5s以上机器(已安装OpenSSH和Cycript,砸壳用)
  • IOS逆向之旅

    2016-01-02 16:34:02
    #1 iOS逆向工程简介 1.1 介绍 1.2 iOS逆向工程的作用 1.3 iOS逆向工程的2种分析方法 1.4 iOS逆向工程用到的工具简介 1.5 小结 #2 iOS文件目录及程序类型
  • IOS 逆向开发(六)代码注入
1 2 3 4 5 ... 20
收藏数 8,579
精华内容 3,431
关键字:

ios逆向