iOS - 逆向工程

公司最近搞得物联网项目,很注重安全,对于我这种架构师,当然考虑到APP使用上的安全。分享一篇逆向基础文章.


1.ios逆向工程指的是在软件层面上进行逆向分析的一个过程
。如果想要达到对ios软件较强的逆向分析能力,最好能非常熟悉ios设备的硬件构成、ios系统的运行原理,还要具备丰富的ios开发经验,比如:拿到一个App之后能清晰的推断出这个App使用的技术,包括引用了那些FrameWork,那些经典的第三方代码,以及整个App工程大致的文件个数等。

2.逆向工程的主要两个作用:首先是攻破目标程序,拿到关键信息,可以归类于安全相关的逆向工程,其次是借鉴他人的程序功能来开发自己的软件,可以归类于开发相关的逆向工程

3.与安全相关的ios逆向工程
ios 逆向工程最突出的应用领域就是与安全相关的,比如:通过逆向一个金融App,来评定这个软件的安全等级,安全专家通过逆向ios病毒,来找到杀毒的方法,安全公司通过逆向ios系统电话、短信功能,来构建一个手机防火墙

a.评定安全等级
ios中那些具有交易功能的App一般会先加密敏感数据,然后将加密过的数据存储在本地或通过互联网传输,而如果安全意识不够强,就完全有可能将重要信息直接用明文保存或传输,安全隐患极大。App虽然可以将低维的攻击防守得如铜墙铁壁一般,但是挡不住高维的逆向攻击,不过不可以据此得出App不安全的结论,因为ios逆向工程的使用均来自一个前提:ios越狱,在这种环境下,我们使用这些逆向工程技术来分析评估目标App中可被攻击点有多少,可攻击点越少的自然就越安全。

b. 逆向恶意软件
ios 是只能移动终端操作系统,它同计算机操作系统没有本质区别,恶意软件就是通过逆向工程定位系统和软件漏洞,利用漏洞渗透进目标主机,获取敏感数据

4.与开发相关的ios逆向工程
开发者可以逆向系统调用,在自己的程序里使用一些文档中没有提及的私有功能,还可以逆向一些经典的软件等

a.逆向系统调用
开发者编写的软件能够运行在操作系统中,提供各种各样的功能,是因为操作系统本身已经内嵌了这些功能,软件只是拿来重组使用。绝大多数的App的实现都源于公开的开发文档,而不能使用诸如锁屏,关机等文档中不涉及的功能,如果你的程序面向Cydia,那么不采用非公开功能将导致程序几乎没有竞争力,故可以通过逆向ios系统调用,还原系统实现相应功能的代码,并应用到自己的程序中。

b.借鉴别的软件
逆向工程最受欢迎的应用场合就是“借鉴”他人的软件功能。

如何判断是否越狱成功?

?      桌面是否有cydia

?      工具判断(比如pp助手)

如何使用cydia安装软件

二、 Mac远程登录到iphone

我们经常在Mac的终端上,通过敲一下命令来完成一些操作,iOS 和Mac OSX 都是基于Drawin(苹果的一个基于Unix的开源系统内核),所以ios中同样支持终端的命令行操作,在逆向工程中,可以使用命令行来操纵iphone。

Mac 和 iphone 建立连接如下图

为了建立连接需要用到 SSH 和OpenSSH
SSH: Secure Shell的缩写,表示“安全外壳协议”,是一种可以为远程登录提供安全保障的协议,使用SSH,可以把所有传输的数据进行加密,"中间人"攻击方式就不可能实现,能防止DNS 欺骗和IP欺骗

OpenSSH: 是SSH协议的免费开源实现,可以通过OpenSSH的方式让Mac远程登录到iphone,此时进行访问时,Mac 是客户端 iphone是服务器

使用OpenSSH远程登录步骤如下
* 在iphone上安装cydia 安装OpenSSH工具(软件源http://apt.saurik.com)

登录方式 通过USB进行SSH登录

? 22端口

? 端口就是设备对外提供服务的窗口,每个端口都有个端口号,范围是0--65535,共216个

? 有些端口是保留的,已经规定了用途,比如 21端口提供FTP服务,80端口是提供HTTP服务,22端口提供SSH服务,更多保留端口号课参考 链接

? iphone 默认是使用22端口进行SSH通信,采用的是TCP协议

? 默认情况下,由于SSH走的是TCP协议,Mac是通过网络连接的方式SSH登录到iphone,要求iPhone连接WIFI,为了加快传输速度,也可以通过USB连接的方式进行SSH登录,Mac上有个服务程序usbmuxd(开机自动启动),可以将Mac的数据通过USB传输到iphone,路径是/System/Library/PrivateFrameworks/mobileDevice.framework/Resources/usbmuxd

? usbmuxd的使用

? 下载usbmuxd工具包,下载v1.0.8版本,主要用到里面的一个python脚本: tcprelay.py, 下载链接

? 将iphone的22端口(SSH端口)映射到Mac本地的10010端口
cd ~/Documents/usbmux-1.08/python-client
python tcprelay.py -t 22:10010
加上 -t 参数是为了能够同时支持多个SSH连接,端口映射完毕后,以后如果想跟iphone的22端口通信,直接跟Mac本地的10010端口通信就可以了,新开一个终端界面,SSH登录到Mac本地的10010端口,usbmuxd会将Mac本地10010端口的TCP协议数据,通过USB连接转发到iphone的22 端口,远程拷贝文件也可以直接跟Mac本地的10010端口通信,如:scp -p 10010 ~/Desktop/1.txt [email protected]:~/test 将Mac上的~/Desktop/1.txt文件,拷贝到iphone上的~/test路径。

? 先开一个终端,先完成端口映射 
  *cd 到usbmuxd文件夹路径

?python tcprelay.py -t 22:10010

? 再开一个端口 注入手机

? ssh [email protected] -p 10010

? Zhanghua123:~ root# cycript -p SpringBoard

ps: 切记第一个终端不可以关闭,才可以保持端口映射状态

三、 Cycript的使用

Cycript 是Objective-C++ JavaScript Java等语法的混合物,可以用来探索,修改,调试正在运行的Mac\ios App

官网:http://www.cycript.org/
文档: http://www.cycript.org/manual
通过Cycdia 安装Cycript,就可以在iphone上调试运行中的APP

使用上面usb链接的方式进入iphone
Zhanghua123:~ root# ps -e,会出现很多进程,看var开头的,可以看到开的进程,退出cy# 可以使用快捷键 control + D

? cycript 基本语法

? https://segmentfault.com/a/1190000011720125

? 定义变量

? var 变量名 = 变量值

? 用内存地址获取对象

? #内存地址

? 查看已经加载的所有OC类

? ObjectiveC.classes

? 查看对象的所有成员变量

? 对象

? 递归打印view的所有子控件

? view.recursiveDescription().toString()

? 筛选出某种类型的对象

? choose(UIViewController)

? choose(UITableViewCell)

注入手机
cycript Zhanghua123:~ root# cycript -p SpringBoard

添加一个view

cy# v2 = [[UIView alloc]init]

#"<UIView: 0x111b90ab0; frame = (0 0; 0 0); layer = <CALayer: 0x11002fe40>>"

cy# v2.frame

(extern "C" struct CGRect ":frame"(id, SEL))

cy# [v2 frame]

{0:{0:0,1:0},1:{0:0,1:0}}

cy# v2.frame = {0:{0:0,1:0},1:{0:320,1:200}}

{0:{0:0,1:0},1:{0:320,1:200}}

cy# [view addSubview: v2]

cy# v2

#"<UIView: 0x111b90ab0; frame = (0 0; 320 200); layer = <CALayer: 0x11002fe40>>"

cy# v2.backgroundColor = [UIColor redColor]

#"UIExtendedSRGBColorSpace 1 0 0 1"

cy#

Cycript 封装的一些库
从下面地址下载资源
https://github.com/CoderMJLee/mjcript
然后安装在手机的 Device/usr/lib路径下

具体使用如下:

Zhanghua123:~ root# cycript -p SpringBoard

cy# @import mjcript

{}

cy# MJAppId

@"com.apple.springboard"

cy# MJAppPath

@"/System/Library/CoreServices/SpringBoard.app"

cy# MJDocPath

@"/var/mobile/Documents"

cy# MJCachesPath

@"/var/mobile/Library/Caches"

cy#

四、sh脚本文件

? 将经常执行的一系列终端命令行放到sh脚本文件中(shell),然后执行脚本文件,可以通过sh、bash、source命令来执行sh脚本文件

? sh bash

? 当前shell环境会启动一个子进程来执行脚本文件,执行后返回到父进程的shell环境,执行cd时,在子进程中会进入到cd目录,但是在父进程中环境并没有改变,也就是说目录没有改变

? source

? 在当前的shell环境下执行脚本文件,执行cd后会跳转到cd的目录,source可以用一个点.来代替,比如“.test.sh”

cuilinhaodeMacBook-Pro:~ cuilinhao$ vim usb.sh

cd /Users/cuilinhao/Desktop/usbmuxd-1.0.8

python tcprelay.py -t 22:10010

? 使用: 命令行直接执行 sh usb.sh

五、 ios 脱壳

? 脱壳就是摘掉壳程序,加未加密的可执行文件还原出来,脱壳主要有2种方法:硬脱壳,动态脱壳
硬脱壳就是直接执行解密算法,动态脱壳,执行壳程序,将真实的内容解密出来,即热内存中的可执行文件是已经解密过的,则我们可以直接导出,由于手机程序比较复杂,ios 中常用的是硬脱壳。

? ios 中有很多好用的脱壳工具

? Clutch:

https://github.com/KJCracks/Clutch

? dumpdecrypted:

https://github.com/stefanesser/dumpdecrypted/

? class-dump
class-dump的作用就是把Mach-O文件的class信息给dump出来(把类信息给导出来),生成对应的.h头文件
官方网址:

http://stevenygard.com/projects/class-dump/

下载完工具包以后将class-dump文件复制到Mac的/usr/local/bin目录,这样在终端就能识别class-dump命令了
常用的格式:class-dump -H Mach-O文件路径 -o 头文件存放目录
ps: -H表示要生成头文件 -O用于制定头文件的存放目录 
权限问题:

cuilinhaodeMacBook-Pro:脱壳 cuilinhao$ class-dump -H To-Do -o Headers

-bash: /usr/local/bin/class-dump: Permission denied

解决方法:在终端输入如下命令

cuilinhaodeMacBook-Pro:脱壳 cuilinhao$ chmod +x /usr/local/bin/class-dump

1)下载源代码,然后在源代码目录执行make指令进行编译,获得dylib动态库文件

2) 将dylib文件拷贝到iphone上,放到/var/root目录
3) 终端进入dylib所在的目录
4) 使用环境变量DYLD_INSERT_LIBARIES将dylib注入到需要脱壳的可执行文件(可执行文件路径可以通过ps -A查看获取)
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib + 可执行文件路径

5) 后缀.decrpted文件就是脱壳后的可执行文件,该文件在var/root路径下

6)检验一下是否脱壳成功

otool -l To-Do | grep crypt

cryptoff 16384

cycptsize 2490368

cryptid 0

通过查看cryptid字段为0,故脱壳成功。

7)导出头文件

class-dump -H To-Do -o Headers

MJAppTools 使用

1.下载

https://github.com/CoderMJLee/MJAppTools.git

2.放到Device/usr/bin目录下

3.如果权限不够则执行 chmod +x /usr/bin/MJAppTools

Zhanghua123:~ root# MJAppTools

-sh: /usr/bin/MJAppTools: Permission denied

Zhanghua123:~ root# chomd +x /usr/bin/MJAppTools

-sh: chomd: command not found

Zhanghua123:~ root# chmod +x /usr/bin/MJAppTools

Zhanghua123:~ root# MJAppTools

-l  <regex>   列出用户安装的应用

-le <regex>   列出用户安装的加壳应用

-ld <regex>   列出用户安装的未加壳应用

-ls <regex>   列出系统的应用

1.因为该工具含有正则表达式,还可以指定查找

Zhanghua123:~ root# MJAppTools -l WeChat

# 一共1个应用

-----

# 01 【微信】 <com.tencent.xin>

/private/var/containers/Bundle/Application/D1F83FA2-BC91-4584-B459-4E1F926003BF/WeChat.app

/private/var/mobile/Containers/Data/Application/A8964D5A-0046-4C27-AFA1-37882F27F17F

Universal binary

arm_v7

arm_64

Zhanghua123:~ root#

七、 Reveal 安装

? Reveal 是一款调试ios程序UI界面的神器

? 官网: https://revealapp.com

? 下载: https://revealapp.com/download

? 破解版 https://pan.baidu.com/s/1lz9lwTKXD9bS8DnvT9gkBQ

提取密码:b31u

? 建议下载至少Reveal4版本,支持USB连接调试

? 调试环境配置

? iphone上安装Reveal Loader

? 软件源: http://apt.so/codermjlee,不要安装其他源的版本,有可能不支持新版Reveal

? 安装完Reveal Loader后,打开[设置], 选择需要调试的APP

? 找到Mac的Reveal中RevealServer文件,覆盖iphone的/Library/RHRevealLoader/RevealServer文件

? ps: 在iPhone上没有RHRevealLoader文件夹,可以自己创建

? 重启SpringBoard

Zhanghua123:~ root# killall SpringBoard

八、Hopper 安装

?   百度下载安装

九、安装theos

? Theos是一个越狱开发工具包,Theos是越狱开发工具的首先,这个工具是为了后面对逆向的app进行代码编写使用。后面再讲tweak时会说到。

一、 安装签名工具ldid

?      先确保安装了brew, 点我

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

?      利用brew 安装ldid

brew install ldid

二、 修改环境变量

? 编辑用户的配置文件

vim ~/.bash_profile

? 在.bash_profile 文件后面加入以下2行

vim ~/.bash_profile

? 让.bash_profile配置的环境变量立即生效

vim ~/.bash_profile

三、 下载theos

? 建议在$THEOS目录下载代码(就是上面配置的~/theos目录)

git clone --recursive https://github.com/theos/theos.git $THEOS

使用Theos来创建一个使用工具,并进行编译,编译后安装到我们的越狱手机上,使用theos目录中bin下的nic.pl命令,在执行nic.pl命令后,会让你选择新建工程的模板。目前theos中内置的是12套模板,创建tweak,那么就选11即可,编译完成后,我们要将项目进行打包,这样我们的越狱设备才能进行安装。
cd 到一个存放项目代码的文件夹。

四、 新建tweak项目

?  iOS越狱开发中,各种破解补丁的统称为Tweak,通常意义上我们说的越狱开发,都是指开发一个Tweak.

基本上,tweak都依赖于一个名叫cydia Substrate (以前名字也叫mobile Substrate)的动态库,Mobile Substrate是Cydia的作者Jay Freeman (@saurik)的作品,也叫Cydia Substrate,它的主要功能是hook某个App,修改代码比如替换其中方法的实现,Cydia上的tweak都是基于Mobile Substrate实现的.

iOS的tweak开发可以有两种发布方式。一种是只能在越狱设备上安装的打包成deb格式的安装包,另一种是直接使用开发者自己的证书/企业证书直接将补丁打包成ipa,这样不需要越狱也是可以安装的,只是这种非越狱的限制比较大,通常只是用来给某个app打个补丁或者类似的功能啥的。

?  tweak的实质就是ios平台的动态库。IOS平台上有两种形势的动态库,dylib与framework。Framework这种开发者用的比较多,而dylib这种就相对比较少一点,比如libsqlite.dylib,libz.dylib等。而tweak用的正是dylib这种形势的动态库。我们可以在设备的/Library/MobileSubstrate/DynamicLibraries

目录下查看手机上存在着的所有tweak。这个目录下除dylib外还存在着plist与bundle两种格式的文件,plist文件是用来标识该tweak的作用范围,而bundle是tweak所用到的资源文件

cd ~/Desktop

nic.pl

选择 iphone/tweak

填写项目信息
Project Name

项目名称

Package Name

项目ID (随便写)

Author/Maintainer Name
作者, 直接敲回车按照默认

[iphone/tweak] MobileSubstrate Bundle filter
需要修改APP的Bundle Identifier (喜马拉雅的是com.gemd.iting )
可以通过Cycript 查看APP 的Bundle Identifier
[iphone/tweak] List of applications to terminate upon installation
直接敲回车就可以

Project Name (required): ting_tweak

Package Name [com.yourcompany.ting_tweak]: com.mj.ting

Author/Maintainer Name [MJ Lee]:

[iphone/tweak] MobileSubstrate Bundle filter [com.apple.springboard]:

com.gemd.iting

[iphone/tweak] List of applications to terminate upon installation (space-

separated, ‘-‘ for none) [SpringBoard]:

Instantiating iphone/tweak in ting_tweak/...

Done.

 

五、编辑Makefile
* 该文件类似于配置文件,用来指定工程用到的文件、框架、库、使用的SDK等等,将整个编译、打包、安装的过程进行自动化,在前面加入环境变量, 写清楚通过那个ip和端口访问手机
THEOS_DEVICE_IP THEOS_DEVICE_PORT

export THEOS_DEVICE_IP=127.0.0.1

export THEOS_DEVICE_PORT=10010

include $(THEOS)/makefiles/common.mk

TWEAK_NAME = ting_tweak

ting_tweak_FILES = Tweak.xm

include $(THEOS_MAKE_PATH)/tweak.mk

after-install::

install.exec "killall -9 SpringBoard"

如果不希望每个项目的Makefile都编写环境变量,也可以添加到用户配置文件中,编辑完毕之后 source ~/.bash_profile 让配置生效

$ vim ~/.bash_profile

export THEOS=~/theos

export PATH=$THEOS/bin:$PATH

export THEOS_DEVICE_IP=127.0.0.1

export THEOS_DEVICE_PORT=10010

$ source ~/.bash_profile

安装完成之后

cuilinhaodeMacBook-Pro:~ cuilinhao$ cd theos/

cuilinhaodeMacBook-Pro:theos cuilinhao$ ls

LICENSE.md  bin     lib     package.json    toolchain

Prefix.pch  extras      makefiles   sdks        vendor

README.md   include     mod     templates

cuilinhaodeMacBook-Pro:theos cuilinhao$ ls -l

total 96

-rw-r--r--   1 cuilinhao  staff  35367  4 26 10:04 LICENSE.md

-rw-r--r--   1 cuilinhao  staff    754  4 26 10:04 Prefix.pch

-rw-r--r--   1 cuilinhao  staff    829  4 26 10:04 README.md

drwxr-xr-x  19 cuilinhao  staff    608  4 26 10:04 bin

drwxr-xr-x   3 cuilinhao  staff     96  4 26 10:04 extras

drwxr-xr-x   3 cuilinhao  staff     96  4 26 10:04 include

drwxr-xr-x   3 cuilinhao  staff     96  4 26 10:04 lib

drwxr-xr-x  25 cuilinhao  staff    800  4 26 10:04 makefiles

drwxr-xr-x   3 cuilinhao  staff     96  4 26 10:04 mod

-rw-r--r--   1 cuilinhao  staff    655  4 26 10:04 package.json

drwxr-xr-x   3 cuilinhao  staff     96  4 26 10:04 sdks

drwxr-xr-x   3 cuilinhao  staff     96  4 26 10:04 templates

drwxr-xr-x   3 cuilinhao  staff     96  4 26 10:04 toolchain

drwxr-xr-x   7 cuilinhao  staff    224  4 26 10:04 vendor

进入bin 进行查看

cuilinhaodeMacBook-Pro:theos cuilinhao$ cd bin

cuilinhaodeMacBook-Pro:bin cuilinhao$ ls -l

total 80

-rwxr-xr-x  1 cuilinhao  staff   491  4 26 10:04 deb_build_num.sh

lrwxr-xr-x  1 cuilinhao  staff    29  4 26 10:04 denicify.pl -> ../vendor/nic/bin/denicify.pl

lrwxr-xr-x  1 cuilinhao  staff    21  4 26 10:04 dm.pl -> ../vendor/dm.pl/dm.pl

-rwxr-xr-x  1 cuilinhao  staff   892  4 26 10:04 fakeroot.sh

-rwxr-xr-x  1 cuilinhao  staff   148  4 26 10:04 install.copyFile

-rwxr-xr-x  1 cuilinhao  staff   313  4 26 10:04 install.exec

-rwxr-xr-x  1 cuilinhao  staff   213  4 26 10:04 install.mergeDir

lrwxr-xr-x  1 cuilinhao  staff    29  4 26 10:04 logify.pl -> ../vendor/logos/bin/logify.pl

lrwxr-xr-x  1 cuilinhao  staff    28  4 26 10:04 logos.pl -> ../vendor/logos/bin/logos.pl

lrwxr-xr-x  1 cuilinhao  staff    24  4 26 10:04 nic.pl -> ../vendor/nic/bin/nic.pl

lrwxr-xr-x  1 cuilinhao  staff    27  4 26 10:04 nicify.pl -> ../vendor/nic/bin/nicify.pl

-rwxr-xr-x  1 cuilinhao  staff   980  4 26 10:04 package_version.sh

-rwxr-xr-x  1 cuilinhao  staff   801  4 26 10:04 post-update

-rwxr-xr-x  1 cuilinhao  staff   437  4 26 10:04 target.pl

lrwxr-xr-x  1 cuilinhao  staff    12  4 26 10:04 update-git-repo -> update-theos

-rwxr-xr-x  1 cuilinhao  staff  1030  4 26 10:04 update-theos

-rwxr-xr-x  1 cuilinhao  staff   552  4 26 10:04 vercmp.pl

cuilinhaodeMacBook-Pro:bin cuilinhao$

配置路径,使nic.pl 让在任何地方访问到
在cuilinhaodeMacBook-Pro:~ cuilinhao\(下
ls -alvim .bash_profile
: 表示路径是并行的。
\)PATH 是引用环境变量的值
PATH = ~/theos/bin:$PATH

export THEOS=~/theos

export PATH=$THEOS/bin:$PATH

配置完之后查看

cuilinhaodeMacBook-Pro:~ cuilinhao$ echo $PATH

/Users/cuilinhao/.rvm/gems/ruby-2.2.2/bin:/Users/cuilinhao/.rvm/gems/[email protected]/bin:/Users/cuilinhao/.rvm/rubies/ruby-2.2.2/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/cuilinhao/.rvm/bin

cuilinhaodeMacBook-Pro:~ cuilinhao$

ps: 如果配置完之后,还没有出现路径,执行命令 source .bash_profile 使路径生效

* 参考:http://3code.info/blog/2016/11/2_Theos_-install&run.html

六、编写代码
下方就是在Tweak.xm中的所有代码。是Logos语法,使用起来是比较简单的。%hook与%end成对出现,%hook后方跟的是我们要修改的类名
打开tweak.xm 文件

%hook SBIconParallaxBadgeView

- (id)init

{

return nil;

}

%end

七、 编译-打包-安装
* 编译

make

? 打包成deb

make package

? 安装(默认会自动重启Springboard)

make install

八、可能遇到的问题
1. -make package的错误

Can‘t locate IO/Compress/Lzma.pm in @INC (you may need to install the

IO::Compress::Lzma module) (@INC contains: /Library/Perl/5.18/darwin-

thread-multi-2level /Library/Perl/5.18 /Network/Library/Perl/5.18/darwin-

thread-multi-2level /Network/Library/Perl/5.18 /Library/Perl/Updates/5.18.2

/System/Library/Perl/5.18/darwin-thread-multi-2level

/System/Library/Perl/5.18 /System/Library/Perl/Extras/5.18/darwin-thread-

multi-2level /System/Library/Perl/Extras/5.18 .) at

/Users/mj/theos/bin/dm.pl line 12.

BEGIN failed--compilation aborted at /Users/mj/theos/bin/dm.pl line 12.

make: *** [internal-package] Error 2

? 错误是因为打包压缩方式有问题,改成gzip压缩就可以了

? 修改dm.pl 文件,用#号注释掉下面两句

vim $THEOS/vendor/dm.pl/dm.pl

#use IO::Compress::Lzma;

#use IO::Compress::Xz;

? 修改deb.mk 文件第6行的压缩方式为gzp

vim $THEOS/makefiles/package/deb.mk

_THEOS_PLATFORM_DPKG_DEB_COMPRESSION ?= gzip

2 -make 错误

Error: You do not have an SDK in

/Library/Developer/CommandLineTools/Platforms/iPhoneOS.platform/Developer/SDKs

? 是因为xcode 导致路径(有可能安装了好几个xcode),需要指定一下xcode

sudo xcode-select --switch

/Applications/Xcode.app/Contents/Developer/

1. 在make是出现Nothing

> Making all for tweak xxx...

make[2]: Nothing to be done for `internal-library-compile‘.

? 是因为之前已经编译过,有缓存导致的,clean一下即可

make clean

make

原文地址:https://www.cnblogs.com/baitongtong/p/9578916.html

时间: 2024-10-09 13:44:14

iOS - 逆向工程的相关文章

ios逆向工程-静态分析

最近在学习IOS逆向工程,查看网络上的资料也不是太多,边学边总结一下. 首先学习资料: 念茜(大神)的博客: http://nianxi.net <ios应用逆向工程 分析与实战> ----------------------------------------------------凌乱的分割线------------------------------------------ 其次讲讲要用到的工具(ios安装工具使用Cydia中搜索安装,有些需要数据源可以自行查找): 已经越狱的IOS设备

iOS逆向工程的一些资料

Apple开发.调试工具下载链接  https://developer.apple.com/downloads/index.action 逆向工具下载  http://pan.baidu.com/s/1nt3BKyX iOS运行时工具-cycript http://blog.csdn.net/sakulafly/article/details/29633627 DEMO http://bbs.iosre.com/forum.php?mod=viewthread&tid=123 http://bb

ARM指令集应该也算得上是iOS逆向工程的基础

当然,如果读者仅仅是想阅读污点跟踪相关的代码,可以去github中按照自己的需要下载对应部分源码即可.如实现变量级.Native级污点跟踪的代码基本都在dalvik目录下,单个函数调用操作所使用的栈部分被称为栈帧(stack frame)结构,其一般结构如上图所示.栈帧结构的两端由两个指针来指定.寄存器ebp通常用做帧指针(frame pointer),而esp则用作栈指针(stack pointer).在函数执行过程中,栈指针esp会随着数据的入栈和出栈而移动,因此函数中对大部分数据的访问都基

iOS逆向工程之给App脱壳

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

iOS逆向工程之使用LLDB的USB连接调试第三方App

LLDB是Low Level Debugger的简称,在iOS开发的调试中LLDB是经常使用的,LLDB是Xcode内置的动态调试工具.使用LLDB可以动态的调试你的应用程序,如果你不做其他的额外处理,因为debugserver缺少task_for_pid权限,所以你只能使用LLDB来调试你自己的App.那么本篇博客中就要使用LLDB来调试从AppStore下载安装的App,并且结合着Hopper来分析第三方App内部的结构.LLDB与Hopper的结合,会让你看到不一样的东西,本篇博客就会和你

我也要学IOS逆向工程--全局变量

大家好!很久不见了.我之前去音乐学院进修爵士吉他去了.现在回来了.之前我一直在学windows开发和逆向.后来到了音乐学院,老师推荐了1个录音软件叫logic prox.可惜啊!当时我只有个索尼的笔记本电脑,后来我在淘宝上找了个卖家,专门安装黑苹果的,结果我的电脑声卡驱动不了.这下完蛋了.后来.只有花血本买了个15寸视网膜macbook.再后来我安装了个xcode.哈哈!再后来没想到,MACOS,IOS 开发比 Windows 开发好玩多了.然后学了半年的 IOS 开发.觉得非常有意思.以至于l

iOS逆向工程-工具篇

对于初开始学习iOS逆向工程的人来说,实现一个tweak可以算是入门逆向工程了.当然了,可能你现在还不知道tweak是什么.简单来说,你可以把一个tweak当作某一个app的一个插件(类似于浏览器广告屏蔽插件).在app运行的时候,tweak会hook住某个函数,然后在hook的函数里面,你可以插入你的代码.比如用户在登陆微信账号的时候,tweak可以hook住登录函数,dump出用户的账号密码.那问题来了,我们要如何知道哪个函数是账号登录函数咧?这就涉及到我们如何去分析一个iOS app 要进

(iOS逆向工程)class-dump 安装与使用

class-dump,是可以把OC运行时的声明的信息导出来的工具.说白了,就是可以导出.h文件.用class-dump可以把未经加密的app的头文件导出来.废话不多说.class-dump的下载地址是 http://stevenygard.com/download/class-dump-3.5.tar.gz 点击下载后解压后会有class-dump和源码文件.将class-dump 复制到/usr/bin/class-dump.同时打开Terminal,执行: sudo chmod 777 /u

iOS逆向工程概述(转)

逆向工程一词,对很多人来说可能很陌生,在android领域,我们经常会听到"反编译某个apk",那么逆向工程从某种角度讲也包括反编译这项技术,这样一对比,可能我们就更容易理解逆向工程的定义了. 我们引用百度百科对这个词更加精准地解释: 逆向工程(又称逆向技术),是一种产品设计技术再现过程,即对一项目标产品进行逆向分析及研究,从而演绎并得出该产品的处理流程.组织结构.功能特性及技术规格等设计要素,以制作出功能相近,但又不完全一样的产品.逆向工程源于商业及军事领域中的硬件分析.其主要目的是

iOS逆向工程分析与实战-开篇

前言: 专题主要用来记录学习iOS逆向工程分析与实战的过程,参读书籍<iOS应用逆向工程-分析与实战>作者:沙梓社.吴航.刘瑾 目录: 第一部分 概念篇 第1章 iOS逆向工程简介 1.1 iOS软件逆向工程的要求 1.2 iOS软件逆向工程的作用 1.3 iOS软件逆向工程的一般过程 1.4 iOS软件逆向工程用到的工具 1.5 小结 第2章越狱iOS平台简介 第二部分 工具篇 第3章 Mac工具集 第4章 iOS工具集 第三部分 理论篇 第5章 Objectvie-C相关的iOS逆向理论基