001--Tweak修改系统行为.wmv
sh usbConnect.sh
sh usbLogin.sh
ps -A
53588 ?? 0:20.47 /System/Library/CoreServices/SpringBoard.app/SpringBoard
使用ifunbox 把 SpringBoard 复制到桌面
导出头文件
class-dump-H SpringBoard -o ./springHeader/
登录手机
sh usbConnect.sh
sh usbLogin.sh
连接SpringBoard应用
cycript -p SpringBoard
导入文件
@impor test
查看当前控制器
HKCurrentVC ()
打印当前窗口的所有UI对象
UIApp.keyWindow.recursiveDescription().toString()
退出cycript环境
control D
SBIconParallaxBadgeView 是推送图标的类
电脑终端创建Tweak
nic.pl
11
badgeViewTweak
com.suneee.badge
回车
com.apple.springboard 或者 回车
回车
配置环境变量添加两行
vim~/.bash_profile
export THEOS_DEVICE_IP=127.0.0.1
export THEOS_DEVICE_PORT=1234
(重新加载 bash_profile 文件)
source~/.bash_profile
编译,打包,安装 一步搞定
makepackage;makeinstall
配置一个shell 脚本 installtweak.sh 内容为 makepackage;makeinstall
sh installtweak.sh 就可以编译打包安装一步执行
保留角标
%hook SBIconParallaxBadgeView
- (id)init{
return %orig;
}
%end
去除角标
%hook SBIconParallaxBadgeView
- (id)init{
return nil;
}
%end
编辑电脑本地host信息
vim ~/.ssh/known_hosts
查看进程,查找进程名为WeChat的进程
ps -A | grep WeChat
安装在手机上的动态库的路径
打包的动态库路经
Xcode 快捷键
command shift J 可以快速找出是哪个文件的
command L 可以快速定位到某一行
下面是DYLD源码分析
DYLD 源码地址
DYLD_INSERT_LIBRARIES
processIsRestricted = true
issetugid()不能调用,否则不能上架
hasRestrictedSegment
004--修改RESTRICT段防护越狱设备插入动态库
005--利用二进制修改器破坏防护.wmv
使用 synalyze it! pro 软件 修改 macho文件 。
006--使用dyld源码防护
//
// ViewController.m
// 001--antiTweak
//
// Created by H on 2018/6/8.
// Copyright © 2018年 H. All rights reserved.
// 1.反 HOOK .. 自己的动态库!
// 2.反 二进制修改RESTRICT段
// 防护和进攻 手段!!
#import "ViewController.h"
#import
#import
// ARM and x86_64 are the only architecture that use cpu-sub-types
#define CPU_SUBTYPES_SUPPORTED ((__arm__ || __arm64__ || __x86_64__) && !TARGET_IPHONE_SIMULATOR)
#if __LP64__
#define macho_header mach_header_64
#define LC_SEGMENT_COMMAND LC_SEGMENT_64
#define LC_SEGMENT_COMMAND_WRONG LC_SEGMENT
#define LC_ENCRYPT_COMMAND LC_ENCRYPTION_INFO
#define macho_segment_command segment_command_64
#define macho_section section_64
#else
#define macho_header mach_header
#define LC_SEGMENT_COMMAND LC_SEGMENT
#define LC_SEGMENT_COMMAND_WRONG LC_SEGMENT_64
#define LC_ENCRYPT_COMMAND LC_ENCRYPTION_INFO_64
#define macho_segment_command segment_command
#define macho_section section
#endif
@interfaceViewController()
@end
@implementationViewController
staticboolhasRestrictedSegment(conststructmacho_header* mh)
{
constuint32_tcmd_count = mh->ncmds;
conststructload_command* constcmds = (structload_command*)(((char*)mh)+sizeof(structmacho_header));
conststructload_command* cmd = cmds;
for(uint32_ti = 0; i < cmd_count; ++i) {
switch(cmd->cmd) {
caseLC_SEGMENT_COMMAND:
{
conststructmacho_segment_command* seg = (structmacho_segment_command*)cmd;
printf("seg name: %s\n", seg->segname);
if(strcmp(seg->segname, "__RESTRICT") == 0) {
conststructmacho_section* constsectionsStart = (structmacho_section*)((char*)seg + sizeof(structmacho_segment_command));
conststructmacho_section* constsectionsEnd = §ionsStart[seg->nsects];
for(conststructmacho_section* sect=sectionsStart; sect < sectionsEnd; ++sect) {
if(strcmp(sect->sectname, "__restrict") == 0)
returntrue;
}
}
}
break;
}
cmd = (conststructload_command*)(((char*)cmd)+cmd->cmdsize);
}
returnfalse;
}
+(void)load
{
//DYLD启动APP的时候,最先加载的是自己的 MachO (通过LLDB:image list 查看角标)
structmach_header* header = _dyld_get_image_header(0);
if(hasRestrictedSegment(header)) {
NSLog(@"防护没变化!!");
}else{
NSLog(@"哥么改我二进制干啥??");
exit(0);
}
}
- (void)viewDidLoad {
[superviewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent*)event {
exit(0);
}
@end