逆向釘釘實(shí)現(xiàn)在家打卡

前言


對(duì)于程序員而言看靠,被釘釘打卡束縛那肯定是不行的饲窿,程序員就要有程序員的打卡方式; 由于段時(shí)間釘釘更新了程序?qū)е略鹊牟寮Ю蚋疲前闪?xí)慣了在家打卡后慢慢悠悠去公司的我肯定是不能到公司再打卡了呀灼狰,于是,干他逊拍!

開(kāi)發(fā)環(huán)境


GPS部分


以前寫(xiě)的插件是參考上述的文章里寫(xiě)的,完整源代碼如下

%hook LAPluginInstanceCollector
- (void)handleJavaScriptRequest:(NSDictionary *)arg1 callback:(void(^)(id))arg2 {
    if( [arg1[@"action"] isEqualToString:@"start"] ) {
        id myCallBack = ^(NSDictionary * block_arg){
            if( [block_arg[@"keep"] isEqualToString:@"1"] ) {
                NSMutableDictionary * tempDic = [NSMutableDictionary dictionaryWithDictionary: block_arg];
                NSMutableDictionary * result = [tempDic[@"result"] mutableCopy];

                result[@"latitude"] = @"26.xxxxxx";
                result[@"longitude"] = @"119.xxxxxx";

                tempDic[@"result"] = result;

                arg2(tempDic);
            } else {
                arg2(block_arg);
            }

            arg2(block_arg);
        };

        %orig(arg1, myCallBack);
    } else if( [arg1[@"action"] isEqualToString: @"getInterface"] ) {
        id myCallBack = ^(NSDictionary * block_arg){
            NSMutableDictionary * tempDic = [NSMutableDictionary dictionaryWithDictionary: block_arg];
            tempDic[@"result"][@"macIp"] = @"f0:b4:29:6b:fe:51";
            arg2(tempDic);
        };

        %orig(arg1, myCallBack);
    } else {
        %orig;
    }
}
%end

不過(guò)最近的釘釘更新后這樣的寫(xiě)法并不能修改定位了际邻,打開(kāi)釘釘依然顯示實(shí)際的地址芯丧,按照原文章分析而寫(xiě)出的代碼釘釘可以很輕易的通過(guò)版本迭代來(lái)增加檢測(cè)代碼等方式讓這種方式無(wú)效,于是我決定Hook更底層的方法;

首先世曾,由于iOS系統(tǒng)要求缨恒,任何需要GPS位置信息的軟件幾乎都是封裝了原生的 CLLocationManager 來(lái)做的,所以我們直接Hook更底層的系統(tǒng)定位方法返回我們需要的定位即可轮听,這樣即使釘釘再怎么版本迭代也是沒(méi)有辦法修復(fù)的骗露,除非他不使用系統(tǒng)定位,于是我們直接Hook系統(tǒng)定位方法代碼如下:

%hook CLLocation
-(CLLocationCoordinate2D)coordinate {
    CLLocationCoordinate2D location;
    location.latitude = 緯度;
    location.longitude = 經(jīng)度;
    
    return location;
}
%end

這樣以來(lái)定位的問(wèn)題就解決了血巍,只要釘釘還使用iOS系統(tǒng)的定位萧锉,那么他就無(wú)法通過(guò)版本迭代來(lái)解決我們Hook掉定位的問(wèn)題,接下來(lái)就是Wi-Fi了述寡,釘釘打卡不僅有GPS定位認(rèn)證柿隙,也有Wi-FiMac地址認(rèn)證;

Wi-Fi部分


在上文的參考文章中,Wi-Fi是和GPS一起進(jìn)行判斷的鲫凶,但是同樣的由于釘釘?shù)母碌鷮?dǎo)致了該方法已經(jīng)不存在實(shí)質(zhì)性的作用了优俘,于是我們需要找更底層的方法進(jìn)行Hook,這也是為了以后釘釘在此迭代更新時(shí)我們不用再去麻煩的研究(畢竟程序員都是愛(ài)偷懶的);

在iOS系統(tǒng)中掀序,要獲取Wi-Fi的Mac地址無(wú)非就一個(gè)方法CNCopyCurrentNetworkInfo帆焕,他的一般用法為:

NSArray *ifs = CFBridgingRelease(CNCopySupportedInterfaces());
id info = nil;
for (NSString *ifnam in ifs) {
    info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((CFStringRef)ifnam);
    if (info && [info count]) {
        break;
    }
}
NSDictionary *dic = (NSDictionary *)info;
NSString *ssid = [[dic objectForKey:@"SSID"] lowercaseString];
NSString *bssid = [dic objectForKey:@"BSSID"];
NSLog(@"ssid:%@ \nssid:%@",ssid,bssid);

其中這個(gè)BSSID就是Mac地址,既然知道了調(diào)用的方法不恭,于是我們就進(jìn)行Hook即可叶雹,具體代碼如下:

static CFDictionaryRef (*orig_CNCopyCurrentNetworkInfo)(CFStringRef interfaceName);
static CFDictionaryRef new_CNCopyCurrentNetworkInfo(CFStringRef interfaceName) {
    NSString *keyStr = (__bridge NSString *)interfaceName;

    if ([keyStr isEqualToString:@"en0"] ){
        NSDictionary *oldDic = (__bridge NSDictionary*)orig_CNCopyCurrentNetworkInfo(interfaceName);
        NSMutableDictionary *dic = [[NSMutableDictionary alloc] initWithDictionary:oldDic];
        
        [dic setValue:@"神崎H亞里亞" forKey:@"SSID"];
        [dic setValue:@"0:6b:8e:f1:cc:50" forKey:@"BSSID"];
        [dic setValue:[@"神崎H亞里亞" dataUsingEncoding:NSUTF8StringEncoding] forKey:@"SSIDDATA"];
        
        CFDictionaryRef dict = (CFDictionaryRef)CFRetain((__bridge CFDictionaryRef)(dic));
        return dict;
    } else{
        return orig_CNCopyCurrentNetworkInfo(interfaceName);
    }
}

%ctor {
    MSHookFunction((void *)CNCopyCurrentNetworkInfo, (void *)new_CNCopyCurrentNetworkInfo, (void **)&orig_CNCopyCurrentNetworkInfo);
}

這樣以來(lái)Wi-Fi的問(wèn)題也搞定了

總結(jié)


因?yàn)槲覀冎苯親ook了系統(tǒng)的底層函數(shù),所以釘釘無(wú)論如何怎么迭代更新都無(wú)法避開(kāi)换吧,而且在iOS系統(tǒng)中想要獲取GPSWi-Fi也必須使用系統(tǒng)的函數(shù)折晦,所以我們直接Hook系統(tǒng)底層方法就可以達(dá)到一勞永逸,除非系統(tǒng)更新更換了方法否則是一直可以使用噠~

由于沒(méi)寫(xiě)設(shè)置界面沾瓦,所以GPS定位信息和Wi-FiMac地址是寫(xiě)死在代碼里的满着,所以本次沒(méi)有插件放出谦炒,有需要的可以參照本文代碼自己寫(xiě)一份即可。

我是亞里亞风喇,我的夢(mèng)想是成為一個(gè)博學(xué)的安全工程師宁改,那么下期見(jiàn)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末魂莫,一起剝皮案震驚了整個(gè)濱河市还蹲,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌耙考,老刑警劉巖谜喊,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異倦始,居然都是意外死亡斗遏,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)鞋邑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)最易,“玉大人,你說(shuō)我怎么就攤上這事炫狱≡謇粒” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵视译,是天一觀的道長(zhǎng)嬉荆。 經(jīng)常有香客問(wèn)我,道長(zhǎng)酷含,這世上最難降的妖魔是什么鄙早? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮椅亚,結(jié)果婚禮上限番,老公的妹妹穿的比我還像新娘。我一直安慰自己呀舔,他們只是感情好弥虐,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著媚赖,像睡著了一般霜瘪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上惧磺,一...
    開(kāi)封第一講書(shū)人閱讀 51,737評(píng)論 1 305
  • 那天颖对,我揣著相機(jī)與錄音,去河邊找鬼磨隘。 笑死缤底,一個(gè)胖子當(dāng)著我的面吹牛顾患,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播个唧,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼江解,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了坑鱼?” 一聲冷哼從身側(cè)響起膘流,我...
    開(kāi)封第一講書(shū)人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤絮缅,失蹤者是張志新(化名)和其女友劉穎鲁沥,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體耕魄,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡画恰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吸奴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片允扇。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖则奥,靈堂內(nèi)的尸體忽然破棺而出考润,到底是詐尸還是另有隱情,我是刑警寧澤读处,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布糊治,位于F島的核電站,受9級(jí)特大地震影響罚舱,放射性物質(zhì)發(fā)生泄漏井辜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一管闷、第九天 我趴在偏房一處隱蔽的房頂上張望粥脚。 院中可真熱鬧,春花似錦包个、人聲如沸刷允。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)恃锉。三九已至,卻和暖如春呕臂,著一層夾襖步出監(jiān)牢的瞬間破托,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工歧蒋, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留土砂,地道東北人州既。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像萝映,于是被迫代替她去往敵國(guó)和親吴叶。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355