iOS逆向課程筆記(七)

9.Deb包介紹

官網(wǎng):http://www.debian.org/doc/debian-policy/

deb包本質是一個壓縮包文件。里面包含一些特定的目錄和文件会涎。安裝過程就是dpkg程序按照指定的規(guī)則去拷貝文件和執(zhí)行腳本裹匙。

dpkg -c  xxxx.deb //查看deb包的目錄結構

  • DEBIAN目錄
    存放control文件、及安裝和卸載時需要執(zhí)行的腳本等

    • control文件導出末秃。概页。
       //deb包的名字,卸載和查詢包信息都用這個名字
        Package: com.iosre.myfirstreproject
    
        //工程名字(產(chǎn)品名字)
        Name: MyFirstReProject
    
        //依賴包(可以指定多個练慕,用','分割)
        Depends: mobilesubstrate, firmware  (>=8.0)
    
        //deb包版本號
        Version: 1.0.1
    
        //描述軟件所支持的平臺架構
        Architecture: iphoneos-arm
    
        //deb包簡介
        Description: My first reproject!
    
        //deb包維護人和聯(lián)系方式
        Maintainer: luz<1048056374@qq.com>
    
        //軟件作者
        Author: luz
    
        //deb包歸屬類別
        Section: Tweaks
    
        //軟件主頁
        Homepage: https://www.baidu.com
    
    • 腳本文件
      preinst
      在Deb包文件解包之前惰匙,將會運行該腳本。許多“preinst”腳本的任務是停止作用于待升級軟件包的服務铃将,直到軟件包安裝或升級完成项鬼。
      
      postinst
      該腳本的主要任務是完成安裝包時的配置工作。許多“postinst”腳本負責執(zhí)行有關命令為新安裝或升級的軟件重啟服務劲阎。
      
      prerm
      該腳本負責停止與軟件包相關聯(lián)的daemon服務绘盟。它在刪除軟件包關聯(lián)文件之前執(zhí)行。
      
      postrm
      該腳本負責修改軟件包鏈接或文件關聯(lián)悯仙,或刪除由它創(chuàng)建的文件龄毡。
      
  • dpkg打包時會復制當前目錄下layout目錄下的所有文件和目錄
    這些文件和目錄會鏡像到目標設備上(layout相對于設備的根目錄)

    //發(fā)布時的Makefile
    DEBUG = 0
    THEOS_DEVICE_IP = 10.171.4.22 
    ARCHS = armv7 arm64 
    TARGET = iphone:latest:8.0  
    include $(THEOS)/makefiles/common.mk
    
    TWEAK_NAME = MyFirstReProject
    MyFirstReProject_FILES = Tweak.xm
    MyFirstReProject_FRAMEWORKS = UIKit 
    include $(THEOS_MAKE_PATH)/tweak.mk
    
    clean::
        rm -rf ./packages/* 
    before-package::
        cp ./script/postinst ./.theos/_/DEBIAN/
        cp ./script/postrm ./.theos/_/DEBIAN/  
    

10. 常見Logos語法介紹

維基百科:http://iphonedevwiki.net/index.php/Logos

10.1 Block-level
  • %hook
    指定需要hook的class,必須以%end結尾∥ⅲ可以被%group包含

    %hook SBApplicationController
    -(void)uninstallApplication:(SBApplication *)application {
        NSLog(@"Hey, we're hooking uninstallApplication:!");
        %orig; // Call the original implementation of this method
        return;
    }
    %end
    
  • %group
    該指令用于將%hook分組沦零,便于代碼管理及按條件初始化分組价认,必須以%end結尾峡眶。
    一個%group可以包含多個%hook,所有不屬于某個自定義group的%hook會被隱式歸類到%group_ungrouped中端衰。

    %group iOS8
    %hook IOS8_SPECIFIC_CLASS
        // your code here
    %end // end hook
    %end // end group ios8
    
    %group iOS9
    %hook IOS9_SPECIFIC_CLASS
        // your code here
    %end // end hook
    %end // end group ios9
    
    %ctor {
        if (kCFCoreFoundationVersionNumber > 1200) {
            %init(iOS9);
        } else {
            %init(iOS8);
        }
    }
    
  • %new
    在%hook內(nèi)部使用蹋砚,給一個現(xiàn)有class添加新函數(shù),功能與class_addMethod相同珊膜。
    注: Objective-C的category與class_addMethod的區(qū)別: 前者是靜態(tài)的而后者是動態(tài)的瓶佳。

    %hook SBApplicationController
    -(void)uninstallApplication:(SBApplication *)application {
        NSLog(@"Hey, we're hooking uninstallApplication:!");
        %orig; // Call the original implementation of this method
        return;
    }
    
    %new
    - (void)namespaceNewMethod
    {
    NSLog(@"We've added a new method to SpringBoard.");
    }
    %end
    
10.2 Top level
  • %ctor
    tweak的構造函數(shù),完成初始化工作逢艘;如果不顯示定義丈牢,Theos會自動生成一個%ctor,并在其中調用%init(_ungrouped)。

  • %dtor
    tweak的構造函數(shù),完成收尾瞄沙。如果不顯示定義己沛,Theos會自動生成一個%dtor。

10.3 Function level
  • %init
    該指令用于初始化某個%group距境,必須在%hook或%ctor內(nèi)調用申尼;如果帶參數(shù),則初始化指定的group垫桂,如果不帶參數(shù)师幕,則初始化_ungrouped.
    注: 切記,只有調用了%ini,對應的%group才能起作用!
    ···
    %ctor {
    if (kCFCoreFoundationVersionNumber > 1200) %init(iOS9);
    else %init(iOS8);
    }
    ···

  • %c
    該指令的作用等同于objc_getClass或NSClassFromString,即動態(tài)獲取一個類的定義霹粥,在%hook或%ctor內(nèi)使用 灭将。

    %hook SpringBoard
    - (void)_menuButtonDown:(id)down
    {
    %orig;
    SBScreenShotter *shotter = [%c(SBScreenShotter) sharedInstance];
    [shotter saveScreenshot:YES]; 
    }
    %end@
    
  • %log
    該指令在%hook內(nèi)部使用,將函數(shù)的類名后控、參數(shù)等信息寫入syslog,可以%log([(),…..])的格式追加其他打印信息庙曙。

  • %orig
    該指令在%hook內(nèi)部使用,執(zhí)行被hook的函數(shù)的原始代碼浩淘;也可以用%orig更改原始函數(shù)的參數(shù)捌朴。

//練習
@interface SBScreenshotter: NSObject
+ (id)sharedInstance;
- (void)saveScreenshot: (BOOL)arg1;
@end

@interface SpringBoard
+ (void)_AutoScreenSave2;
- (void)_AutoScreenSave;
@end

%hook SpringBoard 
-  (void)applicationDidFinishLaunching:(id)application 
{ 
    %orig; 
    UIAlertView *alert = [[UIAlertView alloc]  
    initWithTitle:@"Hello,Tanzhou!" 
    message:nil 
    delegate:self cancelButtonTitle:@"OK"
    otherButtonTitles:nil]; 
    [alert show]; 
}

%new
- (void)_AutoScreenSave
{
    NSLog(@"instance method");
    SBScreenShotter *shotter = [%c(SBScreenShotter) sharedInstance];
    [shotter saveScreenshot:YES]; 
}

%new
+ (void)_AutoScreenSave2
{
    NSLog(@"class method");
    SBScreenShotter *shotter = [%c(SBScreenShotter) sharedInstance];
    [shotter saveScreenshot:YES]; 
}

- (void)_menuButtonDown:(id)down  
{  
    //SBScreenShotter *shotter = [%c(SBScreenShotter) sharedInstance];
    //[shotter saveScreenshot:YES];
    //[self _AutoScreenSave]; 
    [%c(SpringBoard) _AutoScreenSave2];
    NSLog(@"x=%d, y=%d", 10, 20);
    %log((NSString *)@"iOSRE", (NSString *)@"Debug");  
    %orig; // call the original _menuButtonDown:
}
%end

%hook SBLockScreenDateViewController
- (void)setCustomSubtitleText:(id)arg1 withColor:(id)arg2
{
/*
   NSDate *date=[NSDate date];
   NSDateFormatter *format1=[[NSDateFormatter alloc]init];
   [format1 setDateFormat:@"yyyy/MM/dd HH:mm:ss"];   
   NSString *str1=[format1 stringFromDate:date];
*/
   struct tm *loctime;
   char timeBuf[1024] = {0};
   time_t now = time(NULL);
   loctime = localtime(&now);
   strftime(timeBuf, 30, "[%Y/%m/%d %H:%M:%S]", loctime);
   %orig([NSString stringWithUTF8String:timeBuf],arg2);   
}
%end


/*
%group HookTest
%hook SpringBoard
- (void)_lockButtonDown:(struct __IOHIDEvent *)arg1 fromSource:(int)arg2
{
  NSLog(@"_lockButtonDown");
}

- (void)_lockButtonUp:(struct __IOHIDEvent *)arg1 fromSource:(int)arg2
{
  NSLog(@"_lockButtonUp");
}

- (void)powerDownCanceled:(id)arg1
{
  NSLog(@"powerDownCanceled");
  %orig;
}

- (void)powerDown
{
  NSLog(@"powerDown");
}  

- (void)powerDownRequested:(id)arg1
{
  NSLog(@"powerDownRequested");
}
%end
%end
*/

%ctor
{
  %init(_ungrouped);
  //%init(HookTest);
}

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末张抄,一起剝皮案震驚了整個濱河市砂蔽,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌署惯,老刑警劉巖左驾,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異泽台,居然都是意外死亡什荣,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門怀酷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來稻爬,“玉大人,你說我怎么就攤上這事蜕依∥Τ” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵样眠,是天一觀的道長友瘤。 經(jīng)常有香客問我,道長檐束,這世上最難降的妖魔是什么辫秧? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮被丧,結果婚禮上盟戏,老公的妹妹穿的比我還像新娘。我一直安慰自己甥桂,他們只是感情好柿究,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著黄选,像睡著了一般蝇摸。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天貌夕,我揣著相機與錄音律歼,去河邊找鬼。 笑死蜂嗽,一個胖子當著我的面吹牛苗膝,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播植旧,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼辱揭,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了病附?” 一聲冷哼從身側響起问窃,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎完沪,沒想到半個月后域庇,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡覆积,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年听皿,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宽档。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡尉姨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出吗冤,到底是詐尸還是另有隱情又厉,我是刑警寧澤,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布椎瘟,位于F島的核電站覆致,受9級特大地震影響,放射性物質發(fā)生泄漏肺蔚。R本人自食惡果不足惜煌妈,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望宣羊。 院中可真熱鬧璧诵,春花似錦、人聲如沸段只。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赞枕。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間炕婶,已是汗流浹背姐赡。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留柠掂,地道東北人项滑。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像涯贞,于是被迫代替她去往敵國和親枪狂。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容