逆向-1

b10l07發表於2018-03-12

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>>"