内容简介:逆向APP思路:1,代码分析 2,对Mach-O文件的静态分析MachOView、class-dump、Hopper Disassembler、ida等 3,动态调试 对运行中的APP进行代码调试 p debugserver、LLDB
逆向APP思路:1,代码分析
2,对Mach-O文件的静态分析MachOView、class-dump、Hopper Disassembler、ida等
3,动态调试 对运行中的APP进行代码调试 p debugserver、LLDB
4,代码编写
5,注入代码到APP中
6,必要时还可能需要重新签名、打包ipa
一、Mac远程登录iPhone
-
SSH (Secure Shell) 是“安全外壳协议”
OpenSSH 是SSH协议的免费开源实现 (在iPhone上通过Cydia安装OpenSSH工具(软件源http://apt.saurik.com))
可以通过OpenSSH的方式让Mac远程登录到iPhone
-
SSH是通过TCP协议通信,所以要确保Mac和iPhone在同一局域网下,比如连接着同一个WiFi下
在终端输入
ssh 账户名@服务器主机地址 复制代码
例如:
ssh root@192.168.8.157 然后输入密码(默认是alpine ) 复制代码
这种方式wifi登录,受到网速限制
- usb连接 (不需要网络,速度快,安全) 1.1 sh usb.sh (注: python2 usbmuxd-1.0.8/python-client/tcprelay.py -t 22:10010 8888:8888)
1.2 sh login.sh (注:ssh -p 10010 root@localhost)
上面的命令生效是因为已经把 usb.sh 和 login.sh 两个文件做了端口映射并放到了根目录 (映射需要usbmuxd工具包)
另外: 1.echo $PATH 查看设置的根目录,如果自己想写脚本在其他地方都能执行,也可以放在PATH路径下
2.手机和电脑能连接是因为,手机的授权文件 /var/root/.ssh/authorized_keys 中 添加了电脑的公钥 ~/.ssh/id_rsa.pub
Mac上有个服务程序usbmuxd(它会开机自动启动),可以将Mac的数据通过USB传输到iPhone
/System/Library/PrivateFrameworks/MobileDevice.framework/Resources/usbmuxd
下载usbmuxd工具包(下载v1.0.8版本,主要用到里面的一个 python 脚本:tcprelay.py)
cgit.sukimashita.com/usbmuxd.git…
二、获取手机上软件的ipa包
-
Cycript 安装到手机上
Cycript是Objective-C++、ES6(JavaScript)、 Java 等语法的混合物,可以用来探索、修改、调试正在运行的Mac\iOS APP
官网:www.cycript.org/
通过Cydia安装Cycript,即可在iPhone上调试运行中的APP
使用: cycript -p 进程ID 比如:cycript -p NewsBoard
cycript -p 进程名称
取消输入:Ctrl + C
退出:Ctrl + D
清屏:Command + R
Github 上有基于cycript封装了一些函数 参考
@import mjcript --->MJAppId、MJFrontVC()、MJDocPath、MJAppPath 等
-
Clutch -i 获取加壳软件的appid
-
PS命令 (手机上安装adv-cmds)
ps –A 列出所有的进程
ps命令是process status
可以过滤关键词,比如 : ps -A | grep WeChat
-
也可以用github 上 工具 获取 github.com/CoderMJLee/…
MJAppTools 可以获取到架构,名称,是否加壳,安装包路径,数据库路径等
三、脱壳
- iOS中有很多好用的脱壳工具
Clutch: github.com/KJCracks/Cl…
dumpdecrypted: github.com/stefanesser…
AppCrackr、Crackulous
-
Clutch -i 获取到appid之后,Clutch -d (APP序号) 导出app包 eg: Clutch -d 1 会打印出脱壳路径
-
DYLD_INSERT_LIBRARIES 脱壳
例如:MJAppTools 获取 到 【网易新闻】 <com.netease.news> /private/var/mobile/Containers/Bundle/Application/64F0B25C-062E-4A89-8834-3F534C24E70D/NewsBoard.app
执行:
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /private/var/mobile/Containers/Bundle/Application/64F0B25C-062E-4A89-8834-3F534C24E70D/NewsBoard.app/NewsBoard
获取到的脱壳文件再当前目录下 (Device/var/root)
-
查看是否脱壳
otool -l 名称 | grep crypt 例如: otool -l NewsBoard | grep crypt 查看网易新闻是否脱壳
也可以用hopper看是否脱壳
cryptid 0 为脱壳 cryptid 1 是加壳
四、反编译出头文件
-
class-dump
顾名思义,它的作用就是把Mach-O文件的class信息给dump出来(把类信息给导出来),生成对应的.h头文件
官方地址: stevenygard.com/projects/cl…
下载完工具包后将class-dump文件复制到Mac的/usr/local/bin目录,这样在终端就能识别class-dump命令了
常用格式:
class-dump -H Mach-O文件路径 -o 头文件存放目录 -H表示要生成头文件 -o用于制定头文件的存放目录
例如:当前目录下 class-dump -H NewsBoard -o Header (新建一个Header的文件夹) 这时候可以用hopper 等分析代码了
五、theos
-
安装签名工具ldid
1.先确保安装brew
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 复制代码
2.利用brew安装ldid
$ brew install ldid 复制代码
- 修改环境变量
- 编辑用户配置文件
$ vim ~/.bash_profile 复制代码
- 在.bash_profile文件后面加入下面两行
export THEOS=~/theos export PATH=$THEOS/bin:$PATH 复制代码
- 让bash_profiel配置的环境变量立即生效(或者重新打开终端)
$ source ~/.bash_profile 复制代码
-
下载theos
建议在$PATH 目录下载代码(就是刚才配置的)
$ git clone --recursive https://github.com/theos/theos.git $THEOS 复制代码
-
新建tweak 项目
- cd到放文件的目录下(比如桌面)
$ cd ~/Desktop $ nic.pl 复制代码
-
选择选项[13.] iphone/tweak
-
填写项目信息
名称 项目ID随便写, MobileSubstrate Bundle filter 写应用的id 其他回车
六、编写代码
具体情况具体分析
七、打包编译安装
当前tweak文件目录下make clean && make && make package && make install (已经写好了文件,可以直接 sh ~/tweak.sh
自己做的插件在 Device/Library/MobileSubstrate/DynamicLibraries
八、theos资料
-
目录结构: github.com/theos/theos…
-
Logoes语法: iphonedevwiki.net/index.php/L…
-
%hook %end : hook一个类的开始和结束
-
%log : 打印方法调用详情 可以再Xcode -> Window -> Devices and Simulators中查看
-
HBDebugLog 类似NSLog
-
%new: 添加一个新的方法
-
%c(className): 生成一个class对象,比如Class%c(NSObject),类似于NSStringFromClass()、objc_getClass()
-
%orig: 函数调用原来的逻辑
-
%ctor : 在加载动态库时候调用
-
%dtor : 程序退出时调用
-
logify.pl: 可以将一个头文件快速转成已经包含打印信息的xm文件
-
logify.pl xx.h > xx.xm 复制代码
1,在 UserCenterViewController.h 目录下执行
logify.pl UserCenterViewController.h > UserCenterViewController.xm
2, UserCenterViewController.xm 拷贝到Makefile(Tweak.xm) 所在目录
3, 新建一个src目录,把.xm文件放进去,修改路径 YZRongxin_FILES = $(wildcard src/*.xm)
4,不认识的类 替换为void 删除__weak 删除协议
5, 不想太详细 %log 换成NSLog(@"%@",NSStringFromSelector(_cmd));
6,HBLogDebug(@" = 0x%x", (unsigned int)r) 改为 HBLogDebug(@" = 0x%@", r)
-
-
九、MAC、IPhone 软件破解
例:PC软件破解 ./YZCTest
例:网易新闻去广告 NTESNBNewsListController hasAd
例:优酷去掉90s开头广告 XAdEnginePreAdModule setupVideoAd needAd
如果是未越狱的IPhone 则还需要打包签名等操作。
十、动态调试
十一、签名打包
-
准备一个embedded.mobileprovision文件(必须是付费证书产生的,appid,device一定要匹配)并放入到.app包中。
- 可以通过Xcode自动生成,然后再编译后的APP包中找到
- 可以去开发者网站生成证书下载
-
从embedded.mobileprovision文件中提取出entitlements.plist权限文件
- security cms -D -i embedded.mobileprovision > temp.plist
- /usr/libexec/PlistBuddy -x -c'Print :Entitlements' temp.plist > entilements.plist
-
查看可用的证书
- security find-identity -v -p codesigning
-
对.app内的动态库、AppExtension等进行签名
- codesign -f -s 证书ID XXX.dylib
-
对.app包进行签名
- codesign -f -s 证书id --entitlements entitlements.plist xxx.app
-
重签名工具
-
iOS App Signer
-
https://github.com/DanTheMan827/ios-app-signer 复制代码
-
对.app重签名,打包成ipa
-
需要再.app包中提供对应的embedded.mobileprovision文件
-
-
iReSign
- github.com/maciekish/i…
- 可以对ipa进行重签名,打包成ipa
- 需要提供embedded.mobileprovision、entitlements.plist文件的路径
-
iOS App Signer
十二、其他笔记:
Tweak 技巧
1,加载 图片资源 创建 layout 文件夹 相当于Device/Library
图片会放在 在Device/Library/PreferenceLoader/Preference
2,自己做的插件在 Device/Library/MobileSubstrate/DynamicLibraries
3,#define YZFile(path) @"/Library/PreferenceLoader/Preferences/yzxmly/" #path
4,多个文件,多个目录,引用头文件要使用路径比如 @import “abc/def/person.h”
5,路径 全路径,或者 代替 比如:src/test.xm src/ .m (中间一个空格)
6,如果自己增加类,方法属性等,要声明的话
eg:
@interface yzdefine - (void)vipReOpenPlayer; @end 复制代码
参考资料
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 【Tomcat学习笔记】启动流程分析--总体流程
- 【Tomcat学习笔记】启动流程分析--总体流程
- 从0到1创建高效的产品缺陷管理流程(1):缺陷是什么? 如何建立缺陷管理流程?
- Activiti6.0教程(2) - 初始化表, 部署流程, 启动流程, 创建的表介绍
- 网卡收包流程
- Launcher 启动流程
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
产品经理必懂的技术那点事儿
唐韧 / 电子工业出版社 / 2017-1 / 59
《产品经理必懂的技术那点事儿》以非技术背景产品经理了解技术为主题,将技术知识以简单并且易于理解的方式讲述出来,帮助非技术背景产品经理了解技术、学习技术,旨在帮助产品经理高效地与技术人员进行沟通与合作。 《产品经理必懂的技术那点事儿》的主要内容围绕产品经理需要了解的互联网基础技术知识展开,涉及客户端、服务器端、数据库及一些数据处理知识。同时,还就产品经理需具备的一些软实力,例如沟通能力和解决问......一起来看看 《产品经理必懂的技术那点事儿》 这本书的介绍吧!