修改最新IOS QQ地理位置发送

作者:creantan 小葡萄爸爸

先看下效果:

修改最新IOS QQ地理位置发送_第1张图片
![403F8BED-DA18-48DE-9BDB-136284918D28.jpg](http://upload-images.jianshu.io/upload_images/416783-28fe7feaa42c9378.jpg)

修改最新IOS QQ地理位置发送_第2张图片
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解密

修改最新IOS QQ地理位置发送_第3张图片
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,到达这个界面:

修改最新IOS QQ地理位置发送_第4张图片
403F8BED-DA18-48DE-9BDB-136284918D28.jpg

(注:这个我已经完成修改了,所以地址不是真实的)
然后在电脑上打开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 
%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

你可能感兴趣的:(修改最新IOS QQ地理位置发送)