您的位置:首页 > 移动开发 > IOS开发

iOS逆向笔记汇总

2018-11-06 13:11 141 查看

####一.砸壳dumpdecrypted
1, ssh root@[设备ip] (iP地址为设备的iP地址)
2, ps -e (查看需要砸壳的进程)
3, cycript -p (附加进程)
4, [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory
inDomains:NSUserDomainMask][0] (查看app在documents的地址)
5.scp ~/dumpdecrypted.dylib root@[设备ip]:/var/mobile/Containers/Data/Application/2B4C6281-C015-4FF3-A8EC-5E5C7554D447/Documents (将砸壳的动态库文件存入到documets目录下)
6.DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib/var/mobile/Containers/Bundle/Application/3F00BB3C-F56E-46B1-A785-562E0C130002/WeChat.app/WeChat (砸壳)
7.documents下的WeChat.decrypted为砸壳后的文件

作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:656315826,不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!希望帮助开发者少走弯路。

####二.导出头文件class-dump
class-dump -s -S -H <砸壳后的文件> -o <文件存放的目录>

####三.THEOS越狱开发工具包
1.sudo git clone --recursive https://github.com/theos/theos.git /opt/theos (下载直接安装到/opt/theos目录下)
2.安装dkkg ldid(安装前需要下载homebrew套件管理工具)
homebrew:/usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”
brew install dpkg
brew install ldid
3.创建nic.pl工程。
export THEOS=/opt/theos
$THEOS/bin/nic.pl
4.根据不同的需求创建不同的包,然后make package install 执行3个步骤 编译,打包,安装(Makefile编译的文件后面会有文档)
5.将生成的deb安装包放入/var/root/Media/Cydia/AutoInstall目录下面。

####四.常用Tweak.xm预处理指令.(可以去http://iphonedevwiki.net/index.php/Logos查看)

%hook classname   需要hook的类名字

%hook a
%end

%orig 打印原始函数,可以修改原始参数
%orig(@“fix the param”,param);

%log  该指令在%hook内部使用  将函数的类名,参数等信息写入到syslog
%log((NSString *)@“iosre”,(NSString *)@“debug”)

%group
hook分组需要%init来初始化这个分组,

%group a
%hook
-(void)a{
NSLog(@“aaaaa”);
}
%end
%end

%group b
%hook
-(void)b{
NSLog(@“bbbb”);
}
%end
%end

%hook springboard
-(void)method{
if(true){
%init(a);
}else{
%init(b);
}
}

%ctor  完成初始化init方法的作用(不需要以%end结尾)

%ctor{
%init();
}

%new

%hook c 动态创建一个c的class(相当于重新创建一个c的class)
%new
-(void)namespacenewmethod{
NSLog(@“We’ve added a new method to c”);
}
%end

%c
该指令的等同于objc_getclass或NSClassFromString,即动态获取一个类的定义,在%hook或%ctor内使用

####五.cycript脚本语言
可以通过获取这个对象的内存地址来操作它的函数或者属性.

uialertview:0x166b4fb0   比如说这个uialertview在内存中的地址是0x166b4fb0,可以直接调用它的api
[#0x166b4fb0 show]
#查看当前布局
UIApp.keyWindow.recursiveDescription().toString()
#查看当前控件的父级元素
#控件在内存中的16进制数地址.nextResponder()
control+d  退出cycript
cycript -p [进程id]    编辑这个进程中的脚本

####六.openssh
ssh root@[ios设备ip] (连接越狱手机的设备)
openssh默认密码:alpine
scp命令:
将本地文件拷贝到远程:
scp <本地文件> root@<远程ip地址>:<远程目录>
将远程文件拷贝到本地:
scp root@<远程ip>:<远程文件目录> <本地目录>

####七.iFiles,iFunBox文件管理工具
iFiles ios设备查看文件系统
iFunBox mac设备查看ios设备的文件系统

####八.syslogd日志清空
cydia下载syslogd插件
cat /dev/null > /var/log/syslog

####九.二进制文件提取dyld_decache
因为ios 很多二进制库文件被隐藏许多framwork库文件放进了cache里面
chmod 777 /path/to/dyld_decache 9 (添加权限)
导出framework隐藏的二进制文件
./dyld_decache[v0.1c] -o <输出目录> dyld_shared_cache_armx

####十.reveal逆向分析
cydia中的插件
Reveal Loader 1.0.0
安装后,请重启手机
连接调试的进程就可以看到当前的ui

####十一.debugserver (动态调试,附加子进程)
debugserver

  1. scp root@[iosip]:/Developer/user/bin/debugserver ~/debugserver
  2. lipo -thin armv7s ~/debugserver -output ~/debugserver (帮它减肥)
  3. /opt/theos/bin/ldid -Sent.xml debugserver (http://iosre.com/ent.xml) (添加task_fore_pid权限)
    4.scp ~/debugserver root@iosip:/user/bin/debugserver(将处理好的debugserver放回去)
    5.debugserver ip:port -a “mobilesms” (附加mobilesms进程)
    debugserver -x background ip:port /application/mobilesms.app/mobilesms(启动mobilesms进程)

####十二.lldb
/Applications/Xcode.app/Contents/Developer/usr/bin/lldb
使用usbmuxd能提升ssh的速度,lldb连接debugserver时间缩短至15秒内

usbmuxd

1./Users/beyond/Code/USBSSH (将python-client目录下的tcprelay.py和usbmuxd.py两文件,复制到工作目录)
2./Users/beyond/Code/USBSSH/tcprelay.py -t iOS的端口:mac上的端口 (即可将mac上的端口转发到iOS上的端口)
3.debugserver附加springboard
ssh root@localhost -p mac端口
debugserver *:1234 -a “springboard”
4.将本地mac端口转发到ios

5.lldb调试
/Applications/Xcode.app/Contents/Developer/usr/bin/lldb

作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的iOS交流群:656315826,不管你是小白还是大牛欢迎入驻 ,分享BAT,阿里面试题、面试经验,讨论技术, 大家一起交流学习成长!希望帮助开发者少走弯路。

文章转自:https://bbs.pediy.com/thread-223442.htm

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: