逆向-1
ps -A
ps -A 顯示所有的程式
ps -A | grep we 查詢we
使用otool判斷app是不是加密了的,如果是加密了的,則需要進行脫殼處理
yongwangdeMac-mini:weixin mudy$ otool -l WeChat | grep crypt
cryptoff 16384
cryptsize 57458688
cryptid 1
使用Clutch進行脫殼
由於在App Store上下載的app都是經過加密了的,我們無法使用class-dump直接獲取.h檔案(直接執行class-dump的時候,只會生成一個檔案),所以我們第一步要進行脫殼(砸殼)的操作。
將下載下來的Clutch檔案的版本號去掉之後,拷貝到手機端的Device/var/bin目錄下,這樣的話,我們就可以在連線到手機之後,使用Clutch進行脫殼的操作(有時候提示沒有這個命令,說明許可權不夠,需要提升許可權,如下操作即可)。
連線到手機之後,使用Clutch -i,就可以看到手機上安裝的部分的應用,這些應用都是需要我們進行脫殼操作的。執行脫殼操作的時候,只需要執行Clutch -d 序號,就行了。脫殼成功之後,會生成一個ipa檔案
ceshi:~ root# chmod +x /usr/bin/Clutch
ceshi:~ root# Clutch -i
Installed apps:
1: 網易雲音樂HD <com.netease.CloudMusicIpad>
2: 微信 <com.tencent.xin>
3: ボイスレコーダー-無料ボイスメモ <com.leqimea.recorderAudio>
4: 芒果TV-HD <com.imgo.tv.hd>
5: TestFlight <com.apple.TestFlight>
6: 金山電池醫生 - 電池維護大師 <com.ijinshan.beijing.kbatterydoctor>
ceshi:~ root# Clutch -d 3
使用dumpdecrypted進行脫殼
下載完dumpdecrypted之後,到該資料夾下,執行make命令,可以生成一個dylib動態庫檔案,將該檔案拷貝到手機上(如果是root,放在/var/root目錄中)
在root目錄中,使用環境變數DYLD_INSERT_LIBRARIES將dylib注入到需要脫殼的可執行檔案(可執行檔案路徑可以通過ps -A獲取)
ceshi:~ root# ldid -S /var/root/dumpdecrypted.dylib
ceshi:~ root# DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/containers/Bundle/Application/756838AD-4FAA-4D94-A5B9-E5CE5CEF2DF9/WeChat.app/WeChat
DYLD_INSERT_LIBRARIES=dumpdecrypted.dylib /var/mobile/....
,最終獲得的.decrypted檔案就是脫殼後的可執行檔案
app去掉廣告
使用reveal獲取到廣告空間的記憶體地址(就在reveal的右下角),然後使用[#記憶體地址 removeFromSuperview],但是這種做法並不徹底
使用hook修改方法的實現
使用theos來進行hook
brew install ldid
git clone --recursive https://github.com/theos/theos.git ~/theos
或$THEOS
--recursive 表示遞迴下載所需要的依賴,clone到~/theos資料夾下配置.bash_profile
export THEOS=~/theos
,匯出一個環境變數THEOS,其值是~/theos//export PATH=~/theos/bin:/usr/bin:usr/local/bin
export PATH=~/theos/bin:$PATH $PATH引用環境變數的值
重啟命令列
nic.pl
export THEOS_DEVICE_IP = 127.0.0.1
export THEOS_DEVICE_PORT = 10010
/* How to Hook with Logos
Hooks are written with syntax similar to that of an Objective-C @implementation.
You don't need to #include <substrate.h>, it will be done automatically, as will
the generation of a class list and an automatic constructor.
%hook ClassName
// Hooking a class method
+ (id)sharedInstance {
return %orig;
}
// Hooking an instance method with an argument.
- (void)messageName:(int)argument {
%log; // Write a message about this call, including its class, name and arguments, to the system log.
%orig; // Call through to the original function with its original arguments.
%orig(nil); // Call through to the original function with a custom argument.
// If you use %orig(), you MUST supply all arguments (except for self and _cmd, the automatically generated ones.)
}
// Hooking an instance method with no arguments.
- (id)noArguments {
%log;
id awesome = %orig;
[awesome doSomethingElse];
return awesome;
}
// Always make sure you clean up after yourself; Not doing so could have grave consequences!
%end
*/
%hook FindFriendEntryViewController
- (long long)numberOfSectionsInTableView:(id)tableView{
return %orig + 1;
}
- (long long)tableView:(id)tableView numberOfRowsInSection:(long long)section{
if (section == [self numberOfSectionsInTableView:tableView]-1){
return 3;
}else{
return %orig;
}
}
- (double)tableView:(id)tableView heightForRowAtIndexPath:(id)indexPath{
if ([indexPath section] != [self numberOfSectionsInTableView:tableView]-1){
return %orig;
}else{
return 52;
}
}
- (id)tableView:(id)tableView cellForRowAtIndexPath:(id)indexPath{
if ([indexPath section] != [self numberOfSectionsInTableView:tableView]-1){
return %orig;
}
UITableViewCell *cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];
cell.backgroundColor = [UIColor whiteColor];
cell.textLabel.font = [UIFont systemFontOfSize:20];
if ([indexPath row]==0)
{
cell.imageView.image = [UIImage imageWithContentsOfFile:@"/hongbao.png"];
UISwitch *sw = [[UISwitch alloc]init];
cell.accessoryView = sw;
cell.textLabel.text = @"自動搶紅包";
}else if ([indexPath row]==1){
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
cell.imageView.image = [UIImage imageWithContentsOfFile:@"/lingqian.png"];
cell.textLabel.text = @"零錢加滿";
}else{
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
cell.imageView.image = [UIImage imageWithContentsOfFile:@"/Lower.png"];
cell.textLabel.text = @"遇到傻逼也是沒招沒招的";
}
return cell;
}
- (void)tableView:(id)tableView didSelectRowAtIndexPath:(id)indexPath{
if ([indexPath section] != [self numberOfSectionsInTableView:tableView]-1){
%orig;
}else{
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
}
%end
獲取appID
方式一:
ceshi:~ root# cycript -p WeChat
cy# @import mjcript
{}
cy# MJAppId
@"com.tencent.xin"
方式二:
cy# [NSBundle mainBundle].bundleIdentifier
@"com.tencent.xin"
方式三:
ceshi:~ root# Clutch -i
Installed apps:
1: 網易雲音樂HD <com.netease.CloudMusicIpad>
2: TestFlight <com.apple.TestFlight>
3: ボイスレコーダー-無料ボイスメモ <com.leqimea.recorderAudio>
4: 芒果TV-HD <com.imgo.tv.hd>
5: 金山電池醫生 - 電池維護大師 <com.ijinshan.beijing.kbatterydoctor>
使用Clutch -i的時候有一個侷限,就是隻能顯示已經加殼的
編譯、打包、安裝
vim ~/tweak.sh
make clean && make && make package && make install
然後執行的時候,直接sh ~/tweak.sh
騰訊視訊去廣告
cy# #0x111ed60f0
#"<QNBPlayerVideoAdsView: 0x111ed60f0; frame = (0 0; 320 180); autoresize = W+H; layer = <CALayer: 0x170637460>>"
相關文章
- 逆向工程核心原理(1)逆向基礎
- 7數的逆向操作(1)
- iOS逆向(1)-密碼學(RSA)iOS密碼學
- 逆向工程 O1模型架構模型架構
- 20192204-exp1-逆向與Bof基礎
- 藍鯨ctf 逆向0x1 Warmup
- 1.某道翻譯js逆向sign值JS
- 逆向操作、加法、乘法、除法:構成的謎宮(1)
- 逆向通達信 x 逆向微信 x 逆向QtQT
- 羽夏逆向——逆向基礎
- Android 逆向(四) - adb常用逆向命令Android
- 【JS逆向百例】cebupacificair 航空逆向分析JSAI
- 逆向3
- 逆向logmein
- SMC逆向
- JS 逆向JS
- Flutter逆向Flutter
- 逆向WeChat(八)
- 逆向WeChat(七)
- Mybatis逆向工程MyBatis
- 阿里bxet逆向阿里
- 逆向WeChat(四)
- 逆向WeChat(三)
- 逆向WeChat (二)
- Skype逆向之旅
- buuctf 逆向 xor
- 病毒逆向分析
- Android逆向之路—讓我們試試另一種方法看漫畫-(1)Android
- Android逆向之路---讓我們試試另一種方法看漫畫-(1)Android
- CreateProcess逆向分析-3環使用者層逆向分析(一)
- 攻防世界-mfc逆向
- 逆向基礎(六)
- 逆向基礎(五)
- 逆向基礎(四)
- 逆向基礎(三)
- 逆向基礎(十一)
- 逆向基礎(十)
- 逆向基礎(十二)