如何生成CrackMe注冊(cè)機(jī)之Doughnuts

本練習(xí)破解的CrackMe可以在此處下載:https://reverse.put.as/wp-content/uploads/2010/05/CrackMe.1.by_.James_.Moriarty.zip千扶。運(yùn)行截圖如下丐膝。當(dāng)然车胡,此CrackMe相對(duì)簡(jiǎn)單,僅作為破解入門練習(xí)凫海,拋磚引玉猫缭。因?yàn)楹?jiǎn)單病往,如果暴力破解凰萨,相對(duì)容易,但是這不是破解CrackMe的目的侦高。這里主要從代碼分析入手嫉柴,一步一步理解CrackMe注冊(cè)碼的生成規(guī)則,從而達(dá)到完美產(chǎn)生注冊(cè)碼的目的—— Keygen奉呛,所以计螺,本文乃注冊(cè)機(jī)生成之旅。

Snip20171013_8.jpg

0x1 代碼靜態(tài)分析

在Hopper 中反匯編CrackMe瞧壮,很容易看到validar:方法(validar 為西班牙語(yǔ)登馒,對(duì)應(yīng)英語(yǔ)validate),因?yàn)楹?jiǎn)單咆槽,不用懷疑陈轿,這就是驗(yàn)證name和serial的方法。代碼如下:

    ; ================ B E G I N N I N G   O F   P R O C E D U R E ================

        ; Variables:
        ;    _cmd: 12
        ;    self: 8
        ;    var_10: -16
        ;    var_24: -36
        ;    var_28: -40
        ;    var_2C: -44
        ;    var_3C: -60
        ;    var_40: -64
        ;    var_44: -68
        ;    var_48: -72


             -[Control validar:]:
000025d8         push       ebp                                                 ; Objective C Implementation defined at 0x4314 (instance method)
000025d9         mov        ebp, esp
000025db         push       ebx
000025dc         push       edi
000025dd         push       esi
000025de         sub        esp, 0x3c
000025e1         mov        eax, dword [___stack_chk_guard_301c]                ; ___stack_chk_guard_301c
000025e6         mov        eax, dword [eax]
000025e8         mov        dword [ebp+var_10], eax
000025eb         mov        esi, dword [ebp+self]
000025ee         mov        eax, dword [esi+8]
000025f1         mov        ecx, dword [objc_msg_stringValue]                   ; @selector(stringValue)
000025f7         mov        dword [esp+0x48+var_44], ecx                        ; argument "selector" for method imp___symbol_stub__objc_msgSend
000025fb         mov        dword [esp+0x48+var_48], eax                        ; argument "instance" for method imp___symbol_stub__objc_msgSend
000025fe         call       imp___symbol_stub__objc_msgSend
00002603         mov        edi, eax
00002605         mov        eax, dword [esi+4]
00002608         mov        ecx, dword [objc_msg_stringValue]                   ; @selector(stringValue)
0000260e         mov        dword [esp+0x48+var_44], ecx                        ; argument "selector" for method imp___symbol_stub__objc_msgSend
00002612         mov        dword [esp+0x48+var_48], eax                        ; argument "instance" for method imp___symbol_stub__objc_msgSend
00002615         call       imp___symbol_stub__objc_msgSend
0000261a         mov        dword [ebp+var_28], eax
0000261d         mov        eax, dword [objc_msg_length]                        ; @selector(length)
00002622         mov        dword [esp+0x48+var_44], eax                        ; argument "selector" for method imp___symbol_stub__objc_msgSend
00002626         mov        eax, dword [ebp+var_28]
00002629         mov        dword [esp+0x48+var_48], eax                        ; argument "instance" for method imp___symbol_stub__objc_msgSend
0000262c         call       imp___symbol_stub__objc_msgSend
00002631         mov        esi, eax
00002633         mov        eax, dword [objc_msg_length]                        ; @selector(length)
00002638         mov        dword [esp+0x48+var_44], eax                        ; argument "selector" for method imp___symbol_stub__objc_msgSend
0000263c         mov        dword [esp+0x48+var_48], edi                        ; argument "instance" for method imp___symbol_stub__objc_msgSend
0000263f         call       imp___symbol_stub__objc_msgSend
00002644         mov        dword [ebp+var_2C], eax
00002647         mov        eax, dword [objc_msg_length]                        ; @selector(length)
0000264c         mov        dword [esp+0x48+var_44], eax                        ; argument "selector" for method imp___symbol_stub__objc_msgSend
00002650         mov        dword [esp+0x48+var_48], edi                        ; argument "instance" for method imp___symbol_stub__objc_msgSend
00002653         call       imp___symbol_stub__objc_msgSend
00002658         mov        ecx, dword [objc_msg_substringFromIndex_]           ; @selector(substringFromIndex:)
0000265e         add        eax, 0xfffffffe
00002661         mov        dword [esp+0x48+var_40], eax
00002665         mov        dword [esp+0x48+var_44], ecx                        ; argument "selector" for method imp___symbol_stub__objc_msgSend
00002669         mov        dword [esp+0x48+var_48], edi                        ; argument "instance" for method imp___symbol_stub__objc_msgSend
0000266c         call       imp___symbol_stub__objc_msgSend
00002671         mov        ecx, dword [objc_msg_intValue]                      ; @selector(intValue)
00002677         mov        dword [esp+0x48+var_44], ecx                        ; argument "selector" for method imp___symbol_stub__objc_msgSend
0000267b         mov        dword [esp+0x48+var_48], eax                        ; argument "instance" for method imp___symbol_stub__objc_msgSend
0000267e         call       imp___symbol_stub__objc_msgSend
00002683         mov        ebx, eax
00002685         cmp        dword [ebp+var_28], 0x0
00002689         je         loc_28d4

0000268f         mov        eax, dword [objc_msg_isEqual_]                      ; @selector(isEqual:)
00002694         mov        dword [esp+0x48+var_44], eax                        ; argument "selector" for method imp___symbol_stub__objc_msgSend
00002698         mov        eax, dword [ebp+var_28]
0000269b         mov        dword [esp+0x48+var_48], eax                        ; argument "instance" for method imp___symbol_stub__objc_msgSend
0000269e         mov        dword [esp+0x48+var_40], 0x3058                     ; @""
000026a6         call       imp___symbol_stub__objc_msgSend
000026ab         test       al, al
000026ad         jne        loc_28d4

000026b3         cmp        esi, 0x4
000026b6         jl         loc_28d4

000026bc         test       edi, edi
000026be         je         loc_28d4

000026c4         mov        eax, dword [objc_msg_isEqual_]                      ; @selector(isEqual:)
000026c9         mov        dword [esp+0x48+var_44], eax                        ; argument "selector" for method imp___symbol_stub__objc_msgSend
000026cd         mov        dword [esp+0x48+var_48], edi                        ; argument "instance" for method imp___symbol_stub__objc_msgSend
000026d0         mov        dword [esp+0x48+var_40], 0x3058                     ; @""
000026d8         call       imp___symbol_stub__objc_msgSend
000026dd         test       al, al
000026df         jne        loc_28d4

000026e5         cmp        dword [ebp+var_2C], 0xf
000026e9         jne        loc_28d4

000026ef         cmp        esi, ebx
000026f1         jne        loc_28d4

000026f7         mov        eax, dword [objc_msg_substringWithRange_]           ; @selector(substringWithRange:)
000026fc         mov        dword [esp+0x48+var_44], eax                        ; argument "selector" for method imp___symbol_stub__objc_msgSend
00002700         mov        dword [esp+0x48+var_48], edi                        ; argument "instance" for method imp___symbol_stub__objc_msgSend
00002703         mov        dword [esp+0x48+var_3C], 0x1
0000270b         mov        dword [esp+0x48+var_40], 0xa
00002713         call       imp___symbol_stub__objc_msgSend
00002718         mov        esi, eax
0000271a         mov        eax, dword [objc_msg_substringWithRange_]           ; @selector(substringWithRange:)
0000271f         mov        dword [esp+0x48+var_44], eax                        ; argument "selector" for method imp___symbol_stub__objc_msgSend
00002723         mov        dword [esp+0x48+var_48], edi                        ; argument "instance" for method imp___symbol_stub__objc_msgSend
00002726         mov        dword [esp+0x48+var_3C], 0xa
0000272e         mov        dword [esp+0x48+var_40], 0x0
00002736         call       imp___symbol_stub__objc_msgSend
0000273b         mov        ebx, eax
0000273d         mov        eax, dword [objc_msg_isEqualToString_]              ; @selector(isEqualToString:)
00002742         mov        dword [esp+0x48+var_44], eax                        ; argument "selector" for method imp___symbol_stub__objc_msgSend
00002746         mov        dword [esp+0x48+var_48], esi                        ; argument "instance" for method imp___symbol_stub__objc_msgSend
00002749         mov        dword [esp+0x48+var_40], 0x3038                     ; @"k"
00002751         call       imp___symbol_stub__objc_msgSend
00002756         test       al, al
00002758         je         loc_28d4

0000275e         mov        eax, dword [objc_msg_substringWithRange_]           ; @selector(substringWithRange:)
00002763         mov        dword [esp+0x48+var_44], eax                        ; argument "selector" for method imp___symbol_stub__objc_msgSend
00002767         mov        dword [esp+0x48+var_48], edi                        ; argument "instance" for method imp___symbol_stub__objc_msgSend
0000276a         mov        dword [esp+0x48+var_3C], 0x1
00002772         mov        dword [esp+0x48+var_40], 0xb
0000277a         call       imp___symbol_stub__objc_msgSend
0000277f         mov        ecx, dword [objc_msg_isEqualToString_]              ; @selector(isEqualToString:)
00002785         mov        dword [esp+0x48+var_44], ecx                        ; argument "selector" for method imp___symbol_stub__objc_msgSend
00002789         mov        dword [esp+0x48+var_48], eax                        ; argument "instance" for method imp___symbol_stub__objc_msgSend
0000278c         mov        dword [esp+0x48+var_40], 0x3048                     ; @"n"
00002794         call       imp___symbol_stub__objc_msgSend
00002799         test       al, al
0000279b         je         loc_28d4

000027a1         mov        eax, dword [objc_msg_substringWithRange_]           ; @selector(substringWithRange:)
000027a6         mov        dword [esp+0x48+var_44], eax                        ; argument "selector" for method imp___symbol_stub__objc_msgSend
000027aa         mov        dword [esp+0x48+var_48], edi                        ; argument "instance" for method imp___symbol_stub__objc_msgSend
000027ad         mov        dword [esp+0x48+var_3C], 0x1
000027b5         mov        dword [esp+0x48+var_40], 0xc
000027bd         call       imp___symbol_stub__objc_msgSend
000027c2         mov        ecx, dword [objc_msg_isEqualToString_]              ; @selector(isEqualToString:)
000027c8         mov        dword [esp+0x48+var_44], ecx                        ; argument "selector" for method imp___symbol_stub__objc_msgSend
000027cc         mov        dword [esp+0x48+var_48], eax                        ; argument "instance" for method imp___symbol_stub__objc_msgSend
000027cf         mov        dword [esp+0x48+var_40], 0x3038                     ; @"k"
000027d7         call       imp___symbol_stub__objc_msgSend
000027dc         test       al, al
000027de         je         loc_28d4

000027e4         mov        eax, dword [objc_msg_dataUsingEncoding_]            ; @selector(dataUsingEncoding:)
000027e9         mov        dword [esp+0x48+var_44], eax                        ; argument "selector" for method imp___symbol_stub__objc_msgSend
000027ed         mov        eax, dword [ebp+var_28]
000027f0         mov        dword [esp+0x48+var_48], eax                        ; argument "instance" for method imp___symbol_stub__objc_msgSend
000027f3         mov        dword [esp+0x48+var_40], 0x4
000027fb         call       imp___symbol_stub__objc_msgSend
00002800         mov        esi, eax
00002802         mov        eax, dword [objc_msg_length]                        ; @selector(length)
00002807         mov        dword [esp+0x48+var_44], eax                        ; argument "selector" for method imp___symbol_stub__objc_msgSend
0000280b         mov        dword [esp+0x48+var_48], esi                        ; argument "instance" for method imp___symbol_stub__objc_msgSend
0000280e         call       imp___symbol_stub__objc_msgSend
00002813         mov        edi, eax
00002815         mov        eax, dword [objc_msg_bytes]                         ; @selector(bytes)
0000281a         mov        dword [esp+0x48+var_44], eax                        ; argument "selector" for method imp___symbol_stub__objc_msgSend
0000281e         mov        dword [esp+0x48+var_48], esi                        ; argument "instance" for method imp___symbol_stub__objc_msgSend
00002821         call       imp___symbol_stub__objc_msgSend
00002826         lea        ecx, dword [ebp+var_24]
00002829         mov        dword [esp+0x48+var_40], ecx                        ; argument "md" for method imp___symbol_stub__CC_SHA1
0000282d         mov        dword [esp+0x48+var_44], edi                        ; argument "len" for method imp___symbol_stub__CC_SHA1
00002831         mov        dword [esp+0x48+var_48], eax                        ; argument "data" for method imp___symbol_stub__CC_SHA1
00002834         call       imp___symbol_stub__CC_SHA1
00002839         mov        eax, dword [cls_NSMutableString]                    ; cls_NSMutableString
0000283e         mov        ecx, dword [objc_msg_string]                        ; @selector(string)
00002844         mov        dword [esp+0x48+var_44], ecx                        ; argument "selector" for method imp___symbol_stub__objc_msgSend
00002848         mov        dword [esp+0x48+var_48], eax                        ; argument "instance" for method imp___symbol_stub__objc_msgSend
0000284b         xor        esi, esi
0000284d         call       imp___symbol_stub__objc_msgSend
00002852         mov        edi, eax

             loc_2854:
00002854         movzx      eax, byte [ebp+esi+var_24]                          ; CODE XREF=-[Control validar:]+675
00002859         mov        ecx, dword [objc_msg_appendFormat_]                 ; @selector(appendFormat:)
0000285f         mov        dword [esp+0x48+var_3C], eax
00002863         mov        dword [esp+0x48+var_44], ecx                        ; argument "selector" for method imp___symbol_stub__objc_msgSend
00002867         mov        dword [esp+0x48+var_48], edi                        ; argument "instance" for method imp___symbol_stub__objc_msgSend
0000286a         mov        dword [esp+0x48+var_40], 0x3068                     ; @"%02x"
00002872         call       imp___symbol_stub__objc_msgSend
00002877         inc        esi
00002878         cmp        esi, 0x14
0000287b         jne        loc_2854

0000287d         mov        eax, dword [objc_msg_substringWithRange_]           ; @selector(substringWithRange:)
00002882         mov        dword [esp+0x48+var_44], eax                        ; argument "selector" for method imp___symbol_stub__objc_msgSend
00002886         mov        dword [esp+0x48+var_48], edi                        ; argument "instance" for method imp___symbol_stub__objc_msgSend
00002889         mov        dword [esp+0x48+var_3C], 0xa
00002891         mov        dword [esp+0x48+var_40], 0x0
00002899         call       imp___symbol_stub__objc_msgSend
0000289e         mov        ecx, dword [objc_msg_isEqualToString_]              ; @selector(isEqualToString:)
000028a4         mov        dword [esp+0x48+var_40], eax
000028a8         mov        dword [esp+0x48+var_44], ecx                        ; argument "selector" for method imp___symbol_stub__objc_msgSend
000028ac         mov        dword [esp+0x48+var_48], ebx                        ; argument "instance" for method imp___symbol_stub__objc_msgSend
000028af         call       imp___symbol_stub__objc_msgSend
000028b4         test       al, al
000028b6         je         loc_28d4

000028b8         mov        eax, dword [ebp+self]
000028bb         mov        ecx, dword [eax+0xc]
000028be         mov        edx, dword [objc_msg_orderFront_]                   ; @selector(orderFront:)
000028c4         mov        dword [esp+0x48+var_40], eax
000028c8         mov        dword [esp+0x48+var_44], edx                        ; argument "selector" for method imp___symbol_stub__objc_msgSend
000028cc         mov        dword [esp+0x48+var_48], ecx                        ; argument "instance" for method imp___symbol_stub__objc_msgSend
000028cf         call       imp___symbol_stub__objc_msgSend

             loc_28d4:
000028d4         mov        eax, dword [___stack_chk_guard_301c]                ; ___stack_chk_guard_301c, CODE XREF=-[Control validar:]+177, -[Control validar:]+213, -[Control validar:]+222, -[Control validar:]+230, -[Control validar:]+263, -[Control validar:]+273, -[Control validar:]+281, -[Control validar:]+384, -[Control validar:]+451, -[Control validar:]+518, -[Control validar:]+734
000028d9         mov        eax, dword [eax]
000028db         cmp        eax, dword [ebp+var_10]
000028de         jne        loc_28e8

000028e0         add        esp, 0x3c
000028e3         pop        esi
000028e4         pop        edi
000028e5         pop        ebx
000028e6         pop        ebp
000028e7         ret
                        ; endp

             loc_28e8:
000028e8         call       imp___symbol_stub____stack_chk_fail                 ; CODE XREF=-[Control validar:]+774
                        ; endp 

這個(gè)方法比較長(zhǎng)秦忿,看偽代碼就比較清晰了:

void -[Control validar:](void * self, void * _cmd, void * arg2) {
    var_10 = *___stack_chk_guard;
    edi = [*(self + 0x8) stringValue];
    var_28 = [*(self + 0x4) stringValue];
    esi = [var_28 length];
    var_2C = [edi length];
    ebx = [[edi substringFromIndex:[edi length] + 0xfffffffe] intValue];
    if (((((((var_28 != 0x0) && ([var_28 isEqual:@""] == 0x0)) && (esi >= 0x4)) && (edi != 0x0)) && ([edi isEqual:@""] == 0x0)) && (var_2C == 0xf)) && (esi == ebx)) {
            esi = [edi substringWithRange:0xa];
            ebx = [edi substringWithRange:0x0];
            if ([esi isEqualToString:@"k"] != 0x0) {
                    if ([[edi substringWithRange:0xb] isEqualToString:@"n"] != 0x0) {
                            if ([[edi substringWithRange:0xc] isEqualToString:@"k"] != 0x0) {
                                    esi = [var_28 dataUsingEncoding:0x4];
                                    edi = [esi length];
                                    eax = [esi bytes];
                                    CC_SHA1(eax, edi, var_24);
                                    esi = 0x0;
                                    edi = [NSMutableString string];
                                    do {
                                            [edi appendFormat:@"%02x"];
                                            esi = esi + 0x1;
                                    } while (esi != 0x14);
                                    if ([ebx isEqualToString:[edi substringWithRange:0x0]] != 0x0) {
                                            [*(self + 0xc) orderFront:self];
                                    }
                            }
                    }
            }
    }
    if (*___stack_chk_guard != var_10) {
            __stack_chk_fail();
    }
    return;
  }

可以看出麦射,先取了輸入的name ,serial的值放在edi 小渊,var_28法褥,然后分別計(jì)算length。
后面是校驗(yàn)酬屉,判斷edi的長(zhǎng)度為15,var_28的長(zhǎng)度不小于4揍愁,截取后面edi(substringFromIndex) 存入ebx呐萨,比較ebx的值與var_28的長(zhǎng)度是否相等, 然后取edi的0xa 莽囤、0xb 谬擦、 0xc 處的substring,分別比較k朽缎,n惨远,k谜悟,看是否相等。如這些條件都滿足北秽,對(duì)var_28 進(jìn)行CC_SHA1加密葡幸,分別截取edi、截取CC_SHA1加密后的字符串贺氓,比較兩者是否相等蔚叨。如果相等,則是合法的注冊(cè)碼辙培。
name是edi蔑水?,serial是var_28扬蕊?這些截取子串的范圍是多少呢搀别?下面動(dòng)態(tài)調(diào)試分析。

0x2動(dòng)態(tài)分析

此CrackMe有反debug的措施尾抑,見(jiàn)如下的方法领曼。

     sub_2556:
00002556         push       ebp                                                 ; CODE XREF=EntryPoint+48
00002557         mov        ebp, esp
00002559         sub        esp, 0x18
0000255c         mov        dword [esp+0x18+var_C], 0x0                         ; argument "data" for method imp___symbol_stub__ptrace
00002564         mov        dword [esp+0x18+var_10], 0x0                        ; argument "addr" for method imp___symbol_stub__ptrace
0000256c         mov        dword [esp+0x18+var_14], 0x0                        ; argument "pid" for method imp___symbol_stub__ptrace
00002574         mov        dword [esp+0x18+var_18], 0x1f                       ; argument "request" for method imp___symbol_stub__ptrace
0000257b         call       imp___symbol_stub__ptrace
00002580         add        esp, 0x18
00002583         pop        ebp
00002584         jmp        imp___symbol_stub__NSApplicationMain

此方法會(huì)檢測(cè)ptrace,所以先將
0000257b call imp___symbol_stub__ptrace
改為:
0000257b nop dword [eax+eax]
去掉反debug蛮穿,這樣便可以在Hopper中直接debug運(yùn)行了庶骄。運(yùn)行如下:

Snip20171013_7.jpg
Snip20171013_5.png
Snip20171013_6.png

經(jīng)單步調(diào)試,得知:
name 存var_28, serial 存edi, name的長(zhǎng)度不少于4践磅,serial的長(zhǎng)度為15单刁。其中serial后兩位為name的長(zhǎng)度值,serial 的11府适,12羔飞,13位為k、n檐春、k逻淌,serial剩下的前10位為SHA1加密name后的字符串的前10位。因此疟暖,Keygen算法如下:

1. name.length >= 4
2. searial.length = 15
3. searial =SHA1(name).subStringWithRange(0,10) +"k"+"n"+"k"+(name).length

例如輸入name 為qwer卡儒,則name的SHA1加密為:1161e6ffd3637b302a5cd74076283a7bd1fc20d3。按照上述算法俐巴,得出serial:
1161e6ffd3knk04
驗(yàn)證測(cè)試骨望,結(jié)果正確:

Snip20171012_3.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市欣舵,隨后出現(xiàn)的幾起案子擎鸠,更是在濱河造成了極大的恐慌,老刑警劉巖缘圈,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件劣光,死亡現(xiàn)場(chǎng)離奇詭異袜蚕,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)绢涡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門牲剃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人垂寥,你說(shuō)我怎么就攤上這事颠黎。” “怎么了滞项?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵狭归,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我文判,道長(zhǎng)过椎,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任戏仓,我火速辦了婚禮疚宇,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘赏殃。我一直安慰自己敷待,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布仁热。 她就那樣靜靜地躺著榜揖,像睡著了一般。 火紅的嫁衣襯著肌膚如雪抗蠢。 梳的紋絲不亂的頭發(fā)上举哟,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音迅矛,去河邊找鬼妨猩。 笑死,一個(gè)胖子當(dāng)著我的面吹牛秽褒,可吹牛的內(nèi)容都是我干的壶硅。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼震嫉,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼森瘪!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起票堵,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎逮栅,沒(méi)想到半個(gè)月后悴势,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體窗宇,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年特纤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了军俊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡捧存,死狀恐怖粪躬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情昔穴,我是刑警寧澤镰官,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站吗货,受9級(jí)特大地震影響泳唠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜宙搬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一笨腥、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧勇垛,春花似錦脖母、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至崭放,卻和暖如春哨苛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背币砂。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工建峭, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人决摧。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓亿蒸,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親掌桩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子边锁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

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

  • 本文練習(xí)CrackeMe下載鏈接如下:https://reverse.put.as/wp-content/uplo...
    Mr_Xiao閱讀 499評(píng)論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)波岛,斷路器茅坛,智...
    卡卡羅2017閱讀 134,601評(píng)論 18 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類相關(guān)的語(yǔ)法则拷,內(nèi)部類的語(yǔ)法贡蓖,繼承相關(guān)的語(yǔ)法曹鸠,異常的語(yǔ)法,線程的語(yǔ)...
    子非魚_t_閱讀 31,587評(píng)論 18 399
  • 國(guó)家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說(shuō)閱讀 10,869評(píng)論 6 13
  • 當(dāng)前斥铺,中國(guó)的工程建設(shè)公司國(guó)際化進(jìn)程高速前行彻桃,在眾多采用總承包項(xiàng)目管理模式的國(guó)際化工程建設(shè)項(xiàng)目中,國(guó)內(nèi)的工程建設(shè)項(xiàng)目...
    小名一峰閱讀 605評(píng)論 0 4