JS逆向:常見的代碼混淆策略的逆向特征

1. eval 混淆

Javascript 提供了將字符串當(dāng)做代碼執(zhí)行(evaluate)的能力季俩,可以通過 Function 構(gòu)造器、evalsetTimeout同廉、setInterval 將字符串傳遞給 js 引擎進(jìn)行解析執(zhí)行埋心。其最明顯的特征是生成的代碼以 eval(function(p,a,c,k,...){...}) 開頭指郁。
這類混淆的關(guān)鍵思想在于將需要執(zhí)行的代碼進(jìn)行一次編碼,在執(zhí)行的時(shí)候還原出瀏覽器可執(zhí)行的合法的腳本拷呆,然后執(zhí)行之闲坎,看上去和可執(zhí)行文件的加殼有那么點(diǎn)類似。

逆向特征
  • 無論代碼如何進(jìn)行變形,其最終都要調(diào)用一次 eval房官、throw 等函數(shù)苍碟。
  • 解密的方法不需要對(duì)其算法做任何分析,只需要簡(jiǎn)單地找到這個(gè)最終的調(diào)用悯恍,改為 console.log 或者其他方式,將程序解碼后的結(jié)果按照字符串輸出即可伙狐。
  • 關(guān)鍵字:eval涮毫、throw

2. AA 混淆

有如下 js 代碼:

var test = function(x){console.log(x)}
test('1')

使用 https://www.jsjiami.com/aaencode.html 工具贷屎,經(jīng)過 AA 混淆后得到:

?ω??= /`m′)? ~┻━┻   //*′?`*/ ['_']; o=(???)  =_=3; c=(?Θ?) =(???)-(???); (?Д?) =(?Θ?)= (o^_^o)/ (o^_^o);(?Д?)={?Θ?: '_' ,?ω?? : ((?ω??==3) +'_') [?Θ?] ,???? :(?ω??+ '_')[o^_^o -(?Θ?)] ,?Д??:((???==3) +'_')[???] }; (?Д?) [?Θ?] =((?ω??==3) +'_') [c^_^o];(?Д?) ['c'] = ((?Д?)+'_') [ (???)+(???)-(?Θ?) ];(?Д?) ['o'] = ((?Д?)+'_') [?Θ?];(?o?)=(?Д?) ['c']+(?Д?) ['o']+(?ω?? +'_')[?Θ?]+ ((?ω??==3) +'_') [???] + ((?Д?) +'_') [(???)+(???)]+ ((???==3) +'_') [?Θ?]+((???==3) +'_') [(???) - (?Θ?)]+(?Д?) ['c']+((?Д?)+'_') [(???)+(???)]+ (?Д?) ['o']+((???==3) +'_') [?Θ?];(?Д?) ['_'] =(o^_^o) [?o?] [?o?];(?ε?)=((???==3) +'_') [?Θ?]+ (?Д?) .?Д??+((?Д?)+'_') [(???) + (???)]+((???==3) +'_') [o^_^o -?Θ?]+((???==3) +'_') [?Θ?]+ (?ω?? +'_') [?Θ?]; (???)+=(?Θ?); (?Д?)[?ε?]='\\'; (?Д?).?Θ??=(?Д?+ ???)[o^_^o -(?Θ?)];(o???o)=(?ω?? +'_')[c^_^o];(?Д?) [?o?]='\"';(?Д?) ['_'] ( (?Д?) ['_'] (?ε?+(?Д?)[?o?]+ (?Д?)[?ε?]+(?Θ?)+ ((o^_^o) +(o^_^o))+ ((o^_^o) +(o^_^o))+ (?Д?)[?ε?]+(?Θ?)+ (???)+ (?Θ?)+ (?Д?)[?ε?]+(?Θ?)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (?Θ?))+ (?Д?)[?ε?]+(???)+ (c^_^o)+ (?Д?)[?ε?]+(?Θ?)+ ((o^_^o) +(o^_^o))+ (???)+ (?Д?)[?ε?]+(?Θ?)+ (???)+ ((???) + (?Θ?))+ (?Д?)[?ε?]+(?Θ?)+ ((o^_^o) +(o^_^o))+ (o^_^o)+ (?Д?)[?ε?]+(?Θ?)+ ((o^_^o) +(o^_^o))+ (???)+ (?Д?)[?ε?]+(???)+ (c^_^o)+ (?Д?)[?ε?]+((???) + (o^_^o))+ ((???) + (?Θ?))+ (?Д?)[?ε?]+(???)+ (c^_^o)+ (?Д?)[?ε?]+(?Θ?)+ (???)+ ((o^_^o) +(o^_^o))+ (?Д?)[?ε?]+(?Θ?)+ ((o^_^o) +(o^_^o))+ ((???) + (?Θ?))+ (?Д?)[?ε?]+(?Θ?)+ ((???) + (?Θ?))+ ((o^_^o) +(o^_^o))+ (?Д?)[?ε?]+(?Θ?)+ (???)+ (o^_^o)+ (?Д?)[?ε?]+(?Θ?)+ ((o^_^o) +(o^_^o))+ (???)+ (?Д?)[?ε?]+(?Θ?)+ ((???) + (?Θ?))+ (?Θ?)+ (?Д?)[?ε?]+(?Θ?)+ ((???) + (?Θ?))+ ((???) + (o^_^o))+ (?Д?)[?ε?]+(?Θ?)+ ((???) + (?Θ?))+ ((o^_^o) +(o^_^o))+ (?Д?)[?ε?]+((???) + (?Θ?))+ (c^_^o)+ (?Д?)[?ε?]+(?Θ?)+ ((???) + (o^_^o))+ (c^_^o)+ (?Д?)[?ε?]+((???) + (?Θ?))+ (?Θ?)+ (?Д?)[?ε?]+(?Θ?)+ ((???) + (o^_^o))+ (o^_^o)+ (?Д?)[?ε?]+(?Θ?)+ (???)+ (o^_^o)+ (?Д?)[?ε?]+(?Θ?)+ ((???) + (?Θ?))+ ((???) + (o^_^o))+ (?Д?)[?ε?]+(?Θ?)+ ((???) + (?Θ?))+ ((o^_^o) +(o^_^o))+ (?Д?)[?ε?]+(?Θ?)+ ((o^_^o) +(o^_^o))+ (o^_^o)+ (?Д?)[?ε?]+(?Θ?)+ ((???) + (?Θ?))+ ((???) + (o^_^o))+ (?Д?)[?ε?]+(?Θ?)+ ((???) + (?Θ?))+ (???)+ (?Д?)[?ε?]+(?Θ?)+ (???)+ ((???) + (?Θ?))+ (?Д?)[?ε?]+((???) + (?Θ?))+ ((o^_^o) +(o^_^o))+ (?Д?)[?ε?]+(?Θ?)+ ((???) + (?Θ?))+ (???)+ (?Д?)[?ε?]+(?Θ?)+ ((???) + (?Θ?))+ ((???) + (o^_^o))+ (?Д?)[?ε?]+(?Θ?)+ (???)+ ((???) + (o^_^o))+ (?Д?)[?ε?]+((???) + (?Θ?))+ (c^_^o)+ (?Д?)[?ε?]+(?Θ?)+ ((???) + (o^_^o))+ (c^_^o)+ (?Д?)[?ε?]+((???) + (?Θ?))+ (?Θ?)+ (?Д?)[?ε?]+(?Θ?)+ ((???) + (o^_^o))+ ((???) + (?Θ?))+ (?Д?)[?ε?]+(?Θ?)+ ((o^_^o) - (?Θ?))+ (?Д?)[?ε?]+(?Θ?)+ ((o^_^o) +(o^_^o))+ (???)+ (?Д?)[?ε?]+(?Θ?)+ (???)+ ((???) + (?Θ?))+ (?Д?)[?ε?]+(?Θ?)+ ((o^_^o) +(o^_^o))+ (o^_^o)+ (?Д?)[?ε?]+(?Θ?)+ ((o^_^o) +(o^_^o))+ (???)+ (?Д?)[?ε?]+((???) + (?Θ?))+ (c^_^o)+ (?Д?)[?ε?]+(???)+ ((???) + (o^_^o))+ (?Д?)[?ε?]+((o^_^o) +(o^_^o))+ (?Θ?)+ (?Д?)[?ε?]+(???)+ ((???) + (o^_^o))+ (?Д?)[?ε?]+((???) + (?Θ?))+ (?Θ?)+ (?Д?)[?o?]) (?Θ?)) ('_');

經(jīng)過美化后罢防,展示如下:

?ω?? = /`m′)? ~┻━┻   //*′?`*/
['_'];
o = (???) = _ = 3;
c = (?Θ?) = (???) - (???);
(?Д?) = (?Θ?) = (o ^ _ ^ o) / (o ^ _ ^ o);
(?Д?) = {
    ?Θ?: '_',
    ?ω??: ((?ω?? == 3) + '_')[?Θ?],
    ????: (?ω?? + '_')[o ^ _ ^ o - (?Θ?)],
    ?Д??: ((??? == 3) + '_')[???]
};
(?Д?)[?Θ?] = ((?ω?? == 3) + '_')[c ^ _ ^ o];
(?Д?)['c'] = ((?Д?) + '_')[(???) + (???) - (?Θ?)];
(?Д?)['o'] = ((?Д?) + '_')[?Θ?];
(?o?) = (?Д?)['c'] + (?Д?)['o'] + (?ω?? + '_')[?Θ?] + ((?ω?? == 3) + '_')[???] + ((?Д?) + '_')[(???) + (???)] + ((??? == 3) + '_')[?Θ?] + ((??? == 3) + '_')[(???) - (?Θ?)] + (?Д?)['c'] + ((?Д?) + '_')[(???) + (???)] + (?Д?)['o'] + ((??? == 3) + '_')[?Θ?];
(?Д?)['_'] = (o ^ _ ^ o)[?o?][?o?];
(?ε?) = ((??? == 3) + '_')[?Θ?] + (?Д?).?Д?? + ((?Д?) + '_')[(???) + (???)] + ((??? == 3) + '_')[o ^ _ ^ o - ?Θ?] + ((??? == 3) + '_')[?Θ?] + (?ω?? + '_')[?Θ?];
(???) += (?Θ?);
(?Д?)[?ε?] = '\\';
(?Д?).?Θ?? = (?Д? + ???)[o ^ _ ^ o - (?Θ?)];
(o???o) = (?ω?? + '_')[c ^ _ ^ o];
(?Д?)[?o?] = '\"';
(?Д?)['_']((?Д?)['_'](?ε? + (?Д?)[?o?] + (?Д?)[?ε?] + (?Θ?) + ((o ^ _ ^ o) + (o ^ _ ^ o)) + ((o ^ _ ^ o) + (o ^ _ ^ o)) + (?Д?)[?ε?] + (?Θ?) + (???) + (?Θ?) + (?Д?)[?ε?] + (?Θ?) + ((o ^ _ ^ o) + (o ^ _ ^ o)) + ((o ^ _ ^ o) - (?Θ?)) + (?Д?)[?ε?] + (???) + (c ^ _ ^ o) + (?Д?)[?ε?] + (?Θ?) + ((o ^ _ ^ o) + (o ^ _ ^ o)) + (???) + (?Д?)[?ε?] + (?Θ?) + (???) + ((???) + (?Θ?)) + (?Д?)[?ε?] + (?Θ?) + ((o ^ _ ^ o) + (o ^ _ ^ o)) + (o ^ _ ^ o) + (?Д?)[?ε?] + (?Θ?) + ((o ^ _ ^ o) + (o ^ _ ^ o)) + (???) + (?Д?)[?ε?] + (???) + (c ^ _ ^ o) + (?Д?)[?ε?] + ((???) + (o ^ _ ^ o)) + ((???) + (?Θ?)) + (?Д?)[?ε?] + (???) + (c ^ _ ^ o) + (?Д?)[?ε?] + (?Θ?) + (???) + ((o ^ _ ^ o) + (o ^ _ ^ o)) + (?Д?)[?ε?] + (?Θ?) + ((o ^ _ ^ o) + (o ^ _ ^ o)) + ((???) + (?Θ?)) + (?Д?)[?ε?] + (?Θ?) + ((???) + (?Θ?)) + ((o ^ _ ^ o) + (o ^ _ ^ o)) + (?Д?)[?ε?] + (?Θ?) + (???) + (o ^ _ ^ o) + (?Д?)[?ε?] + (?Θ?) + ((o ^ _ ^ o) + (o ^ _ ^ o)) + (???) + (?Д?)[?ε?] + (?Θ?) + ((???) + (?Θ?)) + (?Θ?) + (?Д?)[?ε?] + (?Θ?) + ((???) + (?Θ?)) + ((???) + (o ^ _ ^ o)) + (?Д?)[?ε?] + (?Θ?) + ((???) + (?Θ?)) + ((o ^ _ ^ o) + (o ^ _ ^ o)) + (?Д?)[?ε?] + ((???) + (?Θ?)) + (c ^ _ ^ o) + (?Д?)[?ε?] + (?Θ?) + ((???) + (o ^ _ ^ o)) + (c ^ _ ^ o) + (?Д?)[?ε?] + ((???) + (?Θ?)) + (?Θ?) + (?Д?)[?ε?] + (?Θ?) + ((???) + (o ^ _ ^ o)) + (o ^ _ ^ o) + (?Д?)[?ε?] + (?Θ?) + (???) + (o ^ _ ^ o) + (?Д?)[?ε?] + (?Θ?) + ((???) + (?Θ?)) + ((???) + (o ^ _ ^ o)) + (?Д?)[?ε?] + (?Θ?) + ((???) + (?Θ?)) + ((o ^ _ ^ o) + (o ^ _ ^ o)) + (?Д?)[?ε?] + (?Θ?) + ((o ^ _ ^ o) + (o ^ _ ^ o)) + (o ^ _ ^ o) + (?Д?)[?ε?] + (?Θ?) + ((???) + (?Θ?)) + ((???) + (o ^ _ ^ o)) + (?Д?)[?ε?] + (?Θ?) + ((???) + (?Θ?)) + (???) + (?Д?)[?ε?] + (?Θ?) + (???) + ((???) + (?Θ?)) + (?Д?)[?ε?] + ((???) + (?Θ?)) + ((o ^ _ ^ o) + (o ^ _ ^ o)) + (?Д?)[?ε?] + (?Θ?) + ((???) + (?Θ?)) + (???) + (?Д?)[?ε?] + (?Θ?) + ((???) + (?Θ?)) + ((???) + (o ^ _ ^ o)) + (?Д?)[?ε?] + (?Θ?) + (???) + ((???) + (o ^ _ ^ o)) + (?Д?)[?ε?] + ((???) + (?Θ?)) + (c ^ _ ^ o) + (?Д?)[?ε?] + (?Θ?) + ((???) + (o ^ _ ^ o)) + (c ^ _ ^ o) + (?Д?)[?ε?] + ((???) + (?Θ?)) + (?Θ?) + (?Д?)[?ε?] + (?Θ?) + ((???) + (o ^ _ ^ o)) + ((???) + (?Θ?)) + (?Д?)[?ε?] + (?Θ?) + ((o ^ _ ^ o) - (?Θ?)) + (?Д?)[?ε?] + (?Θ?) + ((o ^ _ ^ o) + (o ^ _ ^ o)) + (???) + (?Д?)[?ε?] + (?Θ?) + (???) + ((???) + (?Θ?)) + (?Д?)[?ε?] + (?Θ?) + ((o ^ _ ^ o) + (o ^ _ ^ o)) + (o ^ _ ^ o) + (?Д?)[?ε?] + (?Θ?) + ((o ^ _ ^ o) + (o ^ _ ^ o)) + (???) + (?Д?)[?ε?] + ((???) + (?Θ?)) + (c ^ _ ^ o) + (?Д?)[?ε?] + (???) + ((???) + (o ^ _ ^ o)) + (?Д?)[?ε?] + ((o ^ _ ^ o) + (o ^ _ ^ o)) + (?Θ?) + (?Д?)[?ε?] + (???) + ((???) + (o ^ _ ^ o)) + (?Д?)[?ε?] + ((???) + (?Θ?)) + (?Θ?) + (?Д?)[?o?])(?Θ?))('_');

反混淆工具

注意:不同站點(diǎn)的混淆工具,得到的混淆結(jié)果不盡相同唉侄,在一個(gè)站點(diǎn)生成的混淆代碼咒吐,在另一站點(diǎn)不一定能反混淆成功。

  • https://www.qtool.net/decode
  • https://cat-in-136.github.io/2010/12/aadecode-decode-encoded-as-aaencode.html
  • http://www.hiencode.com/jjencode.html

3. JJ 混淆

有如下 js 代碼:

var test = function(x){console.log(x)}
test('1');

設(shè)全局變量 $,經(jīng)過 jj 混淆后將代碼如下:

$=~[];$={___:++$,$$$$:(![]+"")[$],__$:++$,$_$_:(![]+"")[$],_$_:++$,$_$$:({}+"")[$],$$_$:($[$]+"")[$],_$$:++$,$$$_:(!""+"")[$],$__:++$,$_$:++$,$$__:({}+"")[$],$$_:++$,$$$:++$,$___:++$,$__$:++$};$.$_=($.$_=$+"")[$.$_$]+($._$=$.$_[$.__$])+($.$$=($.$+"")[$.__$])+((!$)+"")[$._$$]+($.__=$.$_[$.$$_])+($.$=(!""+"")[$.__$])+($._=(!""+"")[$._$_])+$.$_[$.$_$]+$.__+$._$+$.$;$.$$=$.$+(!""+"")[$._$$]+$.__+$._+$.$+$.$$;$.$=($.___)[$.$_][$.$_];$.$($.$($.$$+"\""+"\\"+$.__$+$.$$_+$.$$_+$.$_$_+"\\"+$.__$+$.$$_+$._$_+"\\"+$.$__+$.___+$.__+$.$$$_+"\\"+$.__$+$.$$_+$._$$+$.__+"\\"+$.$__+$.___+"=\\"+$.$__+$.___+$.$$$$+$._+"\\"+$.__$+$.$_$+$.$$_+$.$$__+$.__+"\\"+$.__$+$.$_$+$.__$+$._$+"\\"+$.__$+$.$_$+$.$$_+"(\\"+$.__$+$.$$$+$.___+"){"+$.$$__+$._$+"\\"+$.__$+$.$_$+$.$$_+"\\"+$.__$+$.$$_+$._$$+$._$+(![]+"")[$._$_]+$.$$$_+"."+(![]+"")[$._$_]+$._$+"\\"+$.__$+$.$__+$.$$$+"(\\"+$.__$+$.$$$+$.___+")}\\"+$.__$+$._$_+$.__+$.$$$_+"\\"+$.__$+$.$$_+$._$$+$.__+"('"+$.__$+"');"+"\"")())();

美化展示恬叹,得到下面的代碼:

$ = ~[];
$ = {
    ___: ++$,
    $$$$: (![] + "")[$],
    __$: ++$,
    $_$_: (![] + "")[$],
    _$_: ++$,
    $_$$: ({} + "")[$],
    $$_$: ($[$] + "")[$],
    _$$: ++$,
    $$$_: (!"" + "")[$],
    $__: ++$,
    $_$: ++$,
    $$__: ({} + "")[$],
    $$_: ++$,
    $$$: ++$,
    $___: ++$,
    $__$: ++$
};
$.$_ = ($.$_ = $ + "")[$.$_$] + ($._$ = $.$_[$.__$]) + ($.$$ = ($.$ + "")[$.__$]) + ((!$) + "")[$._$$] + ($.__ = $.$_[$.$$_]) + ($.$ = (!"" + "")[$.__$]) + ($._ = (!"" + "")[$._$_]) + $.$_[$.$_$] + $.__ + $._$ + $.$;
$.$$ = $.$ + (!"" + "")[$._$$] + $.__ + $._ + $.$ + $.$$;
$.$ = ($.___)[$.$_][$.$_];
$.$($.$($.$$ + "\"" + "\\" + $.__$ + $.$$_ + $.$$_ + $.$_$_ + "\\" + $.__$ + $.$$_ + $._$_ + "\\" + $.$__ + $.___ + $.__ + $.$$$_ + "\\" + $.__$ + $.$$_ + $._$$ + $.__ + "\\" + $.$__ + $.___ + "=\\" + $.$__ + $.___ + $.$$$$ + $._ + "\\" + $.__$ + $.$_$ + $.$$_ + $.$$__ + $.__ + "\\" + $.__$ + $.$_$ + $.__$ + $._$ + "\\" + $.__$ + $.$_$ + $.$$_ + "(\\" + $.__$ + $.$$$ + $.___ + "){" + $.$$__ + $._$ + "\\" + $.__$ + $.$_$ + $.$$_ + "\\" + $.__$ + $.$$_ + $._$$ + $._$ + (![] + "")[$._$_] + $.$$$_ + "." + (![] + "")[$._$_] + $._$ + "\\" + $.__$ + $.$__ + $.$$$ + "(\\" + $.__$ + $.$$$ + $.___ + ")}\\" + $.__$ + $._$_ + $.__ + $.$$$_ + "\\" + $.__$ + $.$$_ + $._$$ + $.__ + "('" + $.__$ + "');" + "\"")())();

注意:美化后的 jj 混淆代碼可能無法進(jìn)行直接解碼候生。

使用 http://www.hiencode.com/jjencode.html 解碼工具,將美化后的 jj 混淆代碼進(jìn)行 decode 解碼時(shí)绽昼,會(huì)有 no match 報(bào)錯(cuò)唯鸭,如下圖:

1638270916(1).png

而如果 jj 混淆代碼是未經(jīng)美化的,那就可以順利的解碼硅确,如下圖:

1638271041(1).png

4. jsfuck

參見:《JS逆向:jsfuck 技術(shù)原理解析》目溉。

5. 隱寫術(shù)

  • 嚴(yán)格說這不能稱之為混淆,只是將 js 代碼隱藏到了特定的介質(zhì)當(dāng)中菱农。如通過最低有效位(LSB)算法嵌入到圖片的 RGB 通道缭付、隱藏在圖片 EXIF 元數(shù)據(jù)、隱藏在 HTML 空白字符等循未。

  • 比如這個(gè)聳人聽聞的議題:《一張圖片黑掉你》在圖片中嵌入惡意程序蛉腌,正是使用了最低有效位平面算法。結(jié)合 HTML5 的 canvas 或者處理二進(jìn)制數(shù)據(jù)的 TypeArray只厘,腳本可以抽取出載體中隱藏的數(shù)據(jù)(如代碼)烙丛。

6. 復(fù)雜表達(dá)式

代碼混淆不一定會(huì)調(diào)用 eval,也可以通過在代碼中填充無效的指令來增加代碼復(fù)雜度羔味,極大地降低可讀性河咽。Javascript 中存在許多稱得上喪心病狂的特性,這些特性組合起來赋元,可以把原本簡(jiǎn)單的字面量(Literal)忘蟹、成員訪問(MemberExpression)、函數(shù)調(diào)用(CallExpression)等代碼片段變得難以閱讀搁凸。

舉個(gè)簡(jiǎn)單的例子媚值,可能會(huì)更好理解:

  1. 訪問一個(gè)對(duì)象的成員有兩種方法——點(diǎn)運(yùn)算符和下標(biāo)運(yùn)算符。調(diào)用 windoweval 方法护糖,既可以寫成 window.eval()褥芒,也可以 window[‘eval’]
  2. 為了讓代碼更變態(tài)一些嫡良,混淆器選用第二種寫法锰扶,然后再在字符串字面量上做文章。先把字符串拆成幾個(gè)部分:’e’ + ‘v’ + ‘a(chǎn)l’寝受;
  3. 這樣看上去還是很明顯坷牛,再利用一個(gè)數(shù)字進(jìn)制轉(zhuǎn)換的技巧:14..toString(15) + 31..toString(32) + 0xf1.toString(22)
  4. 一不做二不休很澄,把數(shù)字也展開:(0b1110).toString(4<<2) + (‘ ‘.charCodeAt() - 1).toString(Math.log(0x100000000) / Math.log(2)) + 0xf1.toString(11 << 1)京闰;
  5. 最后的效果:window[(2*7).toString(4<<2) + (‘ ‘.charCodeAt() - 1).toString(Math.log(0x100000000) / Math.log(2)) + 0xf1.toString(11 << 1)](http://jartto.wang/2017/10/31/js-anti-aliasing/'alert(1)‘)

在 js 中可以找到許多這樣互逆的運(yùn)算颜及,通過使用隨機(jī)生成的方式將其組合使用,可以把簡(jiǎn)單的表達(dá)式無限復(fù)雜化蹂楣。

  • 隱寫的方式同樣需要解碼程序和動(dòng)態(tài)執(zhí)行俏站,所以破解的方式和前者相同,在瀏覽器上下文中劫持替換關(guān)鍵函數(shù)調(diào)用的行為捐迫,改為文本輸出即可得到載體中隱藏的代碼乾翔。

7. ob 混淆

TODO

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末爱葵,一起剝皮案震驚了整個(gè)濱河市施戴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌萌丈,老刑警劉巖赞哗,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異辆雾,居然都是意外死亡肪笋,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門度迂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來藤乙,“玉大人,你說我怎么就攤上這事惭墓√沉海” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵腊凶,是天一觀的道長(zhǎng)划咐。 經(jīng)常有香客問我,道長(zhǎng)钧萍,這世上最難降的妖魔是什么褐缠? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮风瘦,結(jié)果婚禮上队魏,老公的妹妹穿的比我還像新娘。我一直安慰自己万搔,他們只是感情好器躏,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蟹略,像睡著了一般登失。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上挖炬,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天揽浙,我揣著相機(jī)與錄音,去河邊找鬼。 笑死馅巷,一個(gè)胖子當(dāng)著我的面吹牛膛虫,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播钓猬,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼稍刀,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了敞曹?” 一聲冷哼從身側(cè)響起账月,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎澳迫,沒想到半個(gè)月后局齿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡橄登,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年抓歼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拢锹。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡谣妻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出卒稳,到底是詐尸還是另有隱情蹋半,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布展哭,位于F島的核電站湃窍,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏匪傍。R本人自食惡果不足惜您市,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望役衡。 院中可真熱鬧茵休,春花似錦、人聲如沸手蝎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽棵介。三九已至钉鸯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間邮辽,已是汗流浹背唠雕。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工贸营, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人岩睁。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓钞脂,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親捕儒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子冰啃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

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