书本《ios应用逆向工程》
很久之前接触过pc的逆向 asm反汇编 ida等 抽点时间学习ios平台上的
下面的笔记留给自己查看
ssh 进去
ps -e
/var/mobile/Containers/Bundle/Application/D4764B09-EBBB-4E16-A340-C23697FF66DD/iQiYiPhoneVideo.app/iQiYiPhoneVideo
cycript -p iQiYiPhoneVideo
拿到路径
[[NSFileManager defaultManager]URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask][0]
获得路径 scp 砸壳工具拷进去
scp dumpdecrypted.dylib root@192.168.2.15:/var/mobile/Containers/Data/Application/00D0C999-B488-43A8-9342-83D5EB68801E/Documents/
到路径下 执行 砸壳
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/Containers/Bundle/Application/D4764B09-EBBB-4E16-A340-C23697FF66DD/iQiYiPhoneVideo.app/iQiYiPhoneVideo
解密文件再拷贝出来
scp root@192.168.2.15:/var/mobile/Containers/Data/Application/00D0C999-B488-43A8-9342-83D5EB68801E/Documents/iQiYiPhoneVideo.decrypted /Users/damou/Desktop/xxx
导出头文件
class-dump -H iQiYiPhoneVideo.decrypted -o ./
lldb +debugserver 调试
手机执行:debugserver *:1234 -a "iQiYiPhoneVideo"
lldb连接 process connectconnect://192.168.2.15:1234
otool -l WeChat |grep crypt 是否加壳
image list -o -f
br s -a xxx choose() po ,p/x , p (char*)x1
grep xxxx /var/log/syslog
[[UIApp keyWindow]recursiveDescription]
nextResponder
export THEOS_DEVICE_IP=192.168.2.15
export THEOS=/opt/theos
/opt/theos/bin/nic.pl
make package install
cycript 拿到bundle id
[[NSBundle mainBundle] bundleIdentifier]
b readdir
%orig;
%hook
tcpdump -i en0 -X -s0 -w /data.pcap
logify.pl 生成Tweak.xm 然后创建tweak
/opt/theos/bin/logify.pl LoginViewController.h >Tweak.xm
tip1:使用xcode调试第三方app
- 将应用程序从设备上拷贝到本地
- 利用
ldid
将应用程序的 code sign 导出:ldid -e WeChat >> WeChat.xml
- 在
WeChat.xml
文件中添加get-task-allow
权限 <key>get-task-allow</key> <true/> - 利用
ldid
对应用进行重签名ldid -SWeChat.xml ./WeChat
- 将应用拷回设备,将设置可执行权限
chmod 755 WeChat
- 完成
tip2: __RESTRICT,__restrict
保护
在Project的 Other Linker Flags
增加
-Wl,-sectcreate,__RESTRICT,__restrict,/dev/null
下面是修改之后 重新导入
ps -e | grep /var
找到AppBinary路径- 把AppBinary复制出
- 二进制编辑器(iHex等)修改__RESTRICT和__restrict为其他值。(比如:__RRRRRRRR和__rrrrrrrr。保证长度不变就行啦)
ldid -S AppBinary
重签名。- Cydia中安装
AppSync
。
tip3:反 ptrace反调试 tweak (反lldb命令)
app保护
typedefint(*PTRACE_T)(int request, pid_t pid, caddr_t addr,int data);
staticvoidAntiDebug_001()
{
void *handle = dlopen(NULL, RTLD_GLOBAL | RTLD_NOW);
PTRACE_T ptrace_ptr = dlsym(handle, "ptrace");
ptrace_ptr(PT_DENY_ATTACH,0,0,0);
}
反保护
#import <substrate.h>
#import <sys/sysctl.h>
static int (*orig_ptrace) (int request, pid_t pid, caddr_t addr, int data);
static int my_ptrace (int request, pid_t pid, caddr_t addr, int data){
if(request == 31){
NSLog(@"[AntiAntiDebug] - ptrace request is PT_DENY_ATTACH");
return 0;
}
return orig_ptrace(request,pid,addr,data);
}
%ctor{
MSHookFunction((void *)MSFindSymbol(NULL,"_ptrace"),(void*)my_ptrace,(void**)&orig_ptrace);
NSLog(@"[AntiAntiDebug] Module loaded!!!");
}