文档章节

ios逆向小试牛刀之操作手记

stormm
 stormm
发布于 2016/04/01 13:09
字数 1083
阅读 454
收藏 2

一、环境准备

    1、vmware中安装osx系统,参照链接:http://jingyan.baidu.com/article/ff411625b9011212e48237b4.html

    2、osx上安装lldb命令行版(安装xcode6.4后lldb版本太低,会造成调试时指令解析错误)

$xcode-select --install
;打印命令行工具路径
$xcode-select -p
/Library/Developer/CommandLineTools

$cd /Library/Developer/CommandLineTools/usr/bin
$./lldb -v

;查找文件目录
;/var/mobile/Containers/Bundle/Application/
;/var/mobile/Containers/Data/Application/
$find . -name "appname" -print

;导出头文件
class-dump -S -s -H ./WeChat -o ./headers/

;砸壳
Clutch -b com.tencent.xin
https://github.com/KJCracks/Clutch/releases/latest

   3、ios设备上安装debugserver,参考:http://bbs.iosre.com/t/debugserver-lldb-gdb/65

   4、安装facebook的chisel.py插件,支持更多高级命令

;安装brew
$/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
;更新
$brew update

;安装chisel
$brew install chisel

二、开始调试

    1、附加进程调试

        (1)附加进程

;*.1234 端口号 -a 附加(appname/进程id)
$debugserver *:1234 -a "SpringBoard" 
$debugserver *:1234 -a procID

        (2)osx使用lldb连接

$lldb
lldb)platform select remote-ios                     ;没有sdk效果不好
lldb)po [[UIApp keyWindow] recursiveDescription] ;all view
lldb)hide/show 0xffffffff  ;show/hide view
lldb)presponder 0x13fae98a0 ;找到button响应链
lldb)command script import /usr/local/opt/chisel/libexec/fblldb.py ;加载chisel脚本支持bmessage命令
lldb)bmessage -[MyViewController viewDidAppear:]
lldb)process connect connect://(iosip):1234
lldb)image list -o -f             ;列出所有加载的模块基地址
lldb)di -s addr;                  ;-f 反汇编整个函数块 -A thumb/arm模式切换
lldb)b -[T1CommerceOfferHowWorksView setHiddenObserver:] ;下函数名断点
lldb)process continue        ;进程继续执行,类似c
lldb)br s -a base+offset     ;直接根据IDA中获取的函数偏移下函数断点
lldb)br mod -c '*(int*) ($esp+4) == 10'
lldb)br command add 1        ;给断点1增加命令
    command>p i
    command>bt
    command>DONE
lldb)po $r0                  ;ios中特别支持的打印对象数据,特别好用
lldb)x/10xw addr             ;查看内存,类型gdb length 10 x hex w word
lldb)process interrupt       ;强制进程中断
lldb)register read all       ;读取所有的寄存器
lldb)exit                    ;退出
lldb)memory read --force --outfile ~/data.dump  0x000d6000  0x000d2000+0x00000000000d6000 ;dump内存
lldb)watchpoint set expression -w read -s 1 -- 0xbfffcbd8     ;地址执行断点
lldb)watchpoint set variable -w read  myvar     ;地址执行断点
lldb)memory find addr addrend -s 'xx' ;内存查找
lldb)memory write -s 4 'addr+4' 'abcdef15' ;内存修改 
lldb) im loo -n puts
1 match found in /usr/lib/system/libsystem_c.dylib:
        Address: libsystem_c.dylib[0x0000000000011d9a] (libsystem_c.dylib.__TEXT.__text + 69850)
        Summary: libsystem_c.dylib`puts

lldb)(lldb) settings set target.run-args 1 2 3
(lldb) run
or:

(lldb) process launch -- <args>
(lldb) process launch --stop-at-entry -- -program_arg value

    2、启动进程调试,断在函数入口

         (1) ios上使用debugserver启动可执行程序

$debugserver -x backboard *:1234 /var/mobile/Containers/Bundle/Application/3F55C4D3-FC36-4A08-85D4-287BED0D0B06/APP.app/APP
/private/var/mobile/Containers/Data/Application/306D682A-0A72-4765-AA4B-1881001FE306

        (2)osx上lldb连接调试

$lldb
lldb)process connect connect://192.168.1.104:1234
lldb)ni                ;ni多次直到出现下面
invalid thread
lldb)process interrupt ;此时将进程中断,稍等片刻即可中断
lldb)image list -o -f  ;模块都已经加载,此时是进程最开始时候,可以随便下断点

    3、有符号支持的调试(因没有sdk有条件的同学可以一试)

;将ios设备上的可执行程序下载到osx可以使用scp吧
$target create -arch armv7 ~/APP
$b -[T1CommerceOfferHowWorksView setHiddenObserver:]
$image lookup --address 0x100123aa3 --verbose

三、问题与总结

1、lldb版本太低造成指令解析与ida中不对称

>卸载xcode,使用xcode-select --install直接安装最新的命令行工具,我安装后的版本是340,之前的330会有这个问题

2、脱壳app

>在终端执行下面这条命令,前提是下载好dumpdecrypted.dylib文件即可

;cycsrit附加要调试的进程
$cycsrit -p pid

;获取进程的临时目录
cy# [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0]
#"file:///var/mobile/Containers/Data/Application/D41C4343-63AA-4BFF-904B-2146128611EE/Documents/"

;将dumpdecrypted.dylib拷贝到进程的目录下
$cd /var/mobile/Containers/Data/Application/D41C4343-63AA-4BFF-904B-2146128611EE/Documents/
$cp /var/root/dumpdecrypted.dylib dumpdecrypted.dylib
$DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /private/var/mobile/Containers/Bundle/Application/1E821425-7743-4D5A-B704-6515694D420A/APP.app/APP 

;执行完成后会在目录下生成APP_decrypted


 

3、怎么知道app的架构?

>

查看架构

otool -f app

查看架构

lipo -info Twitter

4、osx+wireshark抓包

>在终端执行下面这条命令,前提是下载好dumpdecrypted.dylib文件即可

$rvictl -s
$instruments -s devices
$brew install ideviceinstaller
$idevice_id -l
$rvictl -s 07c815ece77928322b48aaadbf3599d521eb5fb1


 

参与链接:

http://versprite.com/og/ios-reverse-engineering-part-one-configuring-lldb/

https://aigudao.net/archives/244.html

http://casatwy.com/shi-yong-lldbdiao-shi-cheng-xu.html

http://bbs.iosre.com/t/debugserver-lldb-gdb/65

© 著作权归作者所有

下一篇: gdb调试总结
stormm
粉丝 32
博文 22
码字总数 14557
作品 0
昌平
运维
私信 提问
IOS IPhone 开发需要的开源库[编辑中.. 不断更新]

前言 我是 java & php 程序员,遇到了坑爹的iPhone,被逼无奈在崩溃的边缘下学习object-c ,在学习中遇到了很多 奇葩,无知,龌蹉,呕吐的问题(弱弱的说 : 有的些问题到现在还不知道具体的原...

海参
2013/06/03
2.1K
6
iOS开发,我的2018进阶之路总结!

4G改变了生活,抓住机会的人已经在这个社会有了立足之地,马上迎来5G的时代,你做好准备了吗! 对于即将迎来的5G时代,无疑会是音视频的又一个高潮!那么作为程序员的我们,应该怎么样去迎接...

_小迷糊
01/08
0
0
iOS开发经验总结,我的2019进阶之路!

4G改变了生活,抓住机会的人已经在这个社会有了立足之地,马上迎来5G的时代,你做好准备了吗!对于即将迎来的5G时代,无疑会是音视频的又一个高潮!那么作为程序员的我们,应该怎么样去迎接它...

卓远
04/11
0
0
《 iOS 应用逆向工程》作者沙梓社专访:运用逆向工程思维来优化自己的产品

小编语 本文为 DevLink 专访系列,本期采访嘉宾是 iDev 苹果开发者大会 iOS 逆向工程讲师——沙梓社。在即将到来的 iDev 大会上,他将和大家分享对逆向工程的理解,以此激发大家的思路和灵感...

DevLink
2016/10/21
205
1
iOS逆向工程- 学习整理(工具详解)

前言 一、逆向工程的要求 具备丰富的 iOS 开发经验 最好能非常熟悉 iOS 设备的硬件构成,iOS 系统的运行原理。 拿到任意一个 App 之后能够大致推断出它的项目规模和使用的技术,比如它的MVC模...

_小迷糊
2018/05/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
19分钟前
2
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
4
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
13
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
13
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部