作者:creantan 小葡萄爸爸
先看下效果:
本教程面向新手掖鱼,目的在于越獄開發(fā)工具入門介紹。
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分析工具
開發(fā)工具 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
工具就先介紹到這队橙。
在開搞之前我們先思考下我們的目的,然后找到切入點萨惑,從切入點一步一步找到我們要的信息捐康,最后編碼。
我們的目的是修改地理位置信息庸蔼,所以我們只要修改了系統(tǒng)上報上來的經(jīng)緯度信息就可以了解总,這個是最直接的方法,為了讓新手們了解更多姐仅,我就從UI層切入花枫,看完此教程估計一般的APP都不在話下了。
廢話不多說了掏膏,擼起:
先使用Clutch將QQ解密
搞定將文件copy到電腦上來劳翰,文件在iPhone位置: /User/Documents/Cracked/QQ-v5.1.1-no-name-cracker-(Clutch-1.4.6).ipa
將文件重命名為QQ.zip解壓。
接下來我們用class-dump將QQ的頭文件都導(dǎo)出來:
cd到payload中 class-dump -H -o ~/Desktop/jbdev/QQ/header/ QQ (~/Desktop/jbdev/QQ/header/為頭文件導(dǎo)出保存路徑)
導(dǎo)出來一看差不多有6000多個頭文件馒疹,數(shù)量巨大佳簸,怎么從這么多的頭文件找到我們需要的呢,人肉颖变?腦子瓦特了生均。。腥刹。
這里我們就需要用到Reveal马胧,cycript了,當(dāng)然一般情況下cycript單獨就能解決了衔峰,為了介紹下Reveal+cycript協(xié)作來完成定位我就啰嗦點了:
在手機設(shè)置中找到Reveal選項點進去打開QQ的開關(guān)佩脊,這樣Mac上的Reveal就能找到你的手機了录别。手機打開QQ,到達這個界面:
(注:這個我已經(jīng)完成修改了邻吞,所以地址不是真實的)
然后在電腦上打開Reveal组题,稍等片刻Reveal就會顯示出你手機上的UI,分層結(jié)構(gòu)一目了然抱冷。
我們接下來就來找對應(yīng)的ViewController
我們可以看到這個界面主要有一個mapView和一個uitableview組成崔列,要找到這個view的controller我們可以想想有什么好的辦法,
對了uitableview的delegate一般就是該view的controller了旺遮,所以我們從uitableview入手赵讯。
在reveal中點中一行UITableviewCell,然后找到它的UITableView
我們得到這個UITableView在內(nèi)存中的地址耿眉,這個時候我們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