作者:creantan 小葡萄爸爸
先看下效果:
![403F8BED-DA18-48DE-9BDB-136284918D28.jpg](http:https://img.haomeiwen.com/i416783/28fe7feaa42c9378.jpg)17918806-65D0-41C9-8511-27C3300F09F9.jpg
本教程面向新手,目的在于越狱开发工具入门介绍。
1.工具介绍:
Clutch( High-Speed iOS Decryption System )
https://github.com/KJCracks/Clutch
自己下载编译上传到越狱后的iphone上。
cycript
http://www.cycript.org/
Cycript allows developers to explore and modify running applications on either iOS or Mac OS X using a hybrid of Objective-C++ and JavaScript syntax through an interactive console that features syntax highlighting and tab completion.
使用cydia安装或者自己下载源码编译上传到手机。
class-dump
https://github.com/nygard/class-dump
class-dump is a command-line utility for examining the Objective-C segment of Mach-O files. It generates declarations for the classes, categories and protocols. This is the same information provided by using 'otool -ov', but presented as normal Objective-C declarations.
自行下载编译。
Reveal
http://revealapp.com/
Reveal是一个很强大的UI分析工具
开发工具 theos
cydia插件选装:
Core Utilities
Core Utilities(/bin)
diskdev-cmds
file-cmds
system-cmds
Mobileterminal
openSSH
sshpass
toggle ssh
preferencdloader
substrate safe mode
syslogd to /var/log/syslog
工具就先介绍到这。
在开搞之前我们先思考下我们的目的,然后找到切入点,从切入点一步一步找到我们要的信息,最后编码。
我们的目的是修改地理位置信息,所以我们只要修改了系统上报上来的经纬度信息就可以了,这个是最直接的方法,为了让新手们了解更多,我就从UI层切入,看完此教程估计一般的APP都不在话下了。
废话不多说了,撸起:
先使用Clutch将QQ解密
6CA1305B-AF65-4FEF-82B2-72B126DC3088.png搞定将文件copy到电脑上来,文件在iPhone位置: /User/Documents/Cracked/QQ-v5.1.1-no-name-cracker-(Clutch-1.4.6).ipa
将文件重命名为QQ.zip解压。
接下来我们用class-dump将QQ的头文件都导出来:
cd到payload中 class-dump -H -o ~/Desktop/jbdev/QQ/header/ QQ (~/Desktop/jbdev/QQ/header/为头文件导出保存路径)
导出来一看差不多有6000多个头文件,数量巨大,怎么从这么多的头文件找到我们需要的呢,人肉?脑子瓦特了。。。
这里我们就需要用到Reveal,cycript了,当然一般情况下cycript单独就能解决了,为了介绍下Reveal+cycript协作来完成定位我就啰嗦点了:
在手机设置中找到Reveal选项点进去打开QQ的开关,这样Mac上的Reveal就能找到你的手机了。手机打开QQ,到达这个界面:
(注:这个我已经完成修改了,所以地址不是真实的)
然后在电脑上打开Reveal,稍等片刻Reveal就会显示出你手机上的UI,分层结构一目了然。
我们接下来就来找对应的ViewController
我们可以看到这个界面主要有一个mapView和一个uitableview组成,要找到这个view的controller我们可以想想有什么好的办法,
对了uitableview的delegate一般就是该view的controller了,所以我们从uitableview入手。
在reveal中点中一行UITableviewCell,然后找到它的UITableView
我们得到这个UITableView在内存中的地址,这个时候我们ssh 到iphone上使用cycript:
PositionShareViewController
我们找到之前dump出来的头文件,搜索有用的信息
- (id)getPOIItemInTable:(id)arg1 indexPath:(id)arg2;
- (void)fetchDotAddress:(CDStruct_2c43369c)arg1 address:(id)arg2 refreshAddress:(BOOL)arg3;
测试了下hook refreshPOIAt这个方法成功修改了位置信息:
typedef struct {
double latitude;
double longitude;
} CDStruct_2c43369c;
%hook PositionShareViewController
- (void)refreshPOIAt:(CDStruct_2c43369c)arg1
{
CDStruct_2c43369c address = {38.8977332000,-77.0365305000};
%orig(address);
}
%end
其他几个有GPS分享的地方用相同办法都可以搞定。
最后上最直接方法:
#import <CoreLocation/CoreLocation.h>
%hook MQZLBSEngine
- (void)locationManager:(id)arg1 didUpdateLocations:(id)arg2{
%log;
CLLocation *loc = [[CLLocation alloc] initWithLatitude:38.8977332000
longitude:-77.0365305000];
NSArray *array = [[NSArray alloc] initWithObjects:loc, nil];
[loc release];
%orig(arg1,array);
[array release];
}
%end
网友评论
double latitude;
double longitude;
} CDStruct_2c43369c;
%hook PositionShareViewController
- (void)refreshPOIAt:(CDStruct_2c43369c)arg1
{
CDStruct_2c43369c address = {38.8977332000,-77.0365305000};
%orig(address);
}
%end 为何我自tweak.xm里面写CDStruct_2c43369c这报错,error: unknown type name 'CDStruct_2c43369c'