ios 逆向总结 (一)

rvictl -s -l -x
rvictl -s //开启虚拟网卡

1、列出所有app
PS -A 
MJToolApps
/frida-ios-dump/dump.py -l

2、砸壳:Crypt ID: 1 加壳 0 脱壳
clutch:clutch i:列出所有加壳app  clutch -d 加壳app
dumpdecrypted.dylid: DYLD_INSERT_LIBRARIES=dumpdecrypted.dylid app路径
/frida-ios-dump/dump.py  App

3、导出所有头文件
class-dump:class-dump -H Mach-O文件路径 -o 头文件存放目录

4、theos:
nic.pl:
       选择:iPhone/tweak 后 填写以下步骤:--- 项目名-----项目BundleId-------作者----原项目BundleId----Enter
5、tweak代码:
在makefile文件配置ip和port:
  export THEOS_DEVICE_IP=127.0.0.1
  export THEOS_DEVICE_PORT=10010


cycript -p Mach-O文件
@import mjcript (导入需要使用的文件)

%hook 类名

tweak 语法:

%orig:保留原始代码

%new:添加新方法
如果要调用 出现找不到该方法 需要重新声明,才能调用 如:
@class  类名
@interface xxx
- (void)test;
@end


#difine:定义宏 如:
#define WYFDefaults [NSUserDefaults standardUserDefaults]
#define WYFKey @"wyf_key"

加载图片资源: 创建 “layout/Library/PreferenceLoader/Preferences/XXXApp/” 或者 “layout/Library/Caches/XXXApp/” 目录,图片放该目录下,然后定义宏
#define XXXFFile(path) @"/Library/PreferenceLoader/Preferences/XXXApp/" #path 
或者
#define XXXFile(path) @"/Library/Caches/XXXApp/" #path

添加其他类:(多文件开发)
创建 “src/Model/xxx类文件” 在makefile文件中 “tweak_xxxapp_FILES = src/*.xm src/Model/*.m” 或者 “tweak_xxxapp_FILES = $(wildcard src/*.xm )”, 在Tweak.xm #import "Model/MJPerson.h" 导入可调用

release 版本: make package debug = 0 && make install

终止进程: exit(0)或者abort();

%ctor:%ctor {......}   在加载动态库时调用
%dtor:%dtor {......}   在进程即将结束时调用

logify.pl---%log: 把头文件快速转换成包含打印信息的xm文件
logify.pl xxxxxx.h > xxxxxx.xm

%end

最后执行命令 make&&make package&&make install
6、debugserver
环境搭建
ldid -e debugserver > debugserver.entitlements (导出权限文件)
ldid -Sdebugserver.entitlements debugserver (重新签名debugserver)
debugserver *:10011 -a xxxxApp
lldb:
process connect connect://手机ip地址:10011 (Wi-Fi)
process connect connect://localhost:10011 (usb)
命令:
help 帮助命令:
help breakpoint
expression 表达式命令:
expression -O -- self   = po self
expression -O -- arrary = po array
expression/p/call/print self.view.backgroundColor = [UIColor redColor];
(掌握 p / po 就可以了)

thread backtrace:打印当前函数的堆栈信息 (简写 bt)
frame:栈帧 一个栈帧是一个函数
thread return:函数返回 (不执行当前函数)
frame variable:打印当前栈帧的变量
thread continue、continue、c:程序继续运行
thread step-in、next、n:单步运行,遇到子函数会进入子函数
thread step-over、step、s:单步运行,遇到子函数会把子函数当作一个整体一步执行
thread step-out、 finish:直接执行完当前函数的所有代码,返回上一个函数
指令级别命令:
thread step-inst-over、nexti、ni:一句一句汇编执行
thread step-inst、stepi、si:
断点:
breakpoint set -n test 给函数test设置断点
breakpoint set -a  函数地址 根据函数地址给函数设置断点
breakpoint list :列出所有的断点
breakpoint disable 断点编号:禁用断点
breakpoint enable 断点编号:启用断点
breakpoint delete 断点编号:删除断点
breakpoint command add 断点编号:给断点预先设置需要执行的命令 以DONE结束,到触发断点时,会按顺序执行
breakpoint command list 断点编号:查看某个断点设置的命令
breakpoint command delete 断点编号:删除某个断点设置的命令
内存断点:
watchpoint set variable self->_age
watchpoint set expression 内存地址 或者(&self->_age)
watchpoint 。。。。(同断点)。。

模块(镜像)查找 image lookup
image list:列出所有模块
image list -o -f:打印模块的偏移地址、全路径
image lookup -t 类型:查找某个类型的信息
image lookup -a 内存地址:根据内存地址查找在模块中的位置
image lookup -n 符号或者函数名:查找某个符号或者函数的位置

ASLR:Mach-O文件主要分四个段:Header,Load commands __TEXT(函数代码保存段),__DATA(全局变量保存段)
函数的内存地址:0x1241212535-0x100000000(虚拟内存地址)
arm64:0x10000000(_PAGEZERO)(虚拟内存地址)
非arm64:0x4000(_PAGEZERO)(虚拟内存地址)


Image list -o -f 打印出所有的 内存模块 可以查到到app的偏移地址
size -l -m -x Mach-O 打印出Mach-o
蜂鸟众包:
ASLP:0x0000000100f98000
total: 0x1034d0000
本地Mach-O:0x1034d0000 - 0x100000000 = 0x34d0000
Mach-O:0x34d0000 + 0x0000000100f98000 = 0x104468000
函数地址:本地mach-o函数地址 + ASLP

你可能感兴趣的:(Ios,逆向)