亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務建站與企業(yè)官網(wǎng)運營的一線實戰(zhàn)洞察。

逆向工程實戰(zhàn):從字符串引用拆解存檔封裝中的XOR、校驗與壓縮

逆向工程實戰(zhàn):從字符串引用拆解存檔封裝中的XOR、校驗與壓縮 1. 從一個存檔文件說起為什么需要拆解封裝層手里拿到一個二進制存檔文件雙擊打不開用十六進制編輯器看是一堆亂碼但文件頭幾個字節(jié)又隱約有規(guī)律——這種場景在逆向分析、數(shù)據(jù)恢復、老舊系統(tǒng)遷移里太常見了。標題里說的沿字符串引用還原存檔封裝本質(zhì)上就是一條逆向工程的分析路徑你手上只有一堆字節(jié)但通過觀察文件里出現(xiàn)的字符串引用比如某個字段名、某個路徑片段、某個固定標記反推出這個存檔是怎么被封裝的然后一層層剝開XOR混淆、校驗和、壓縮這三層外殼最終拿到原始數(shù)據(jù)。這件事能解決什么問題舉個實際場景某款老工具生成的工程存檔原程序已經(jīng)找不到了但你需要把里面的配置數(shù)據(jù)導出來遷移到新系統(tǒng)?;蛘吣阍谧霭踩治瞿玫揭粋€可疑的二進制文件需要判斷它內(nèi)部是否藏了壓縮數(shù)據(jù)。再或者你在做數(shù)據(jù)恢復一個損壞的存檔文件需要先搞清楚它的封裝結(jié)構(gòu)才能定位損壞位置。這些場景的共同點是你沒有源碼沒有文檔只有一個二進制文件和你的分析能力。適合誰來參考有一定二進制分析基礎、會用十六進制編輯器、了解基本壓縮格式zlib、gzip、lz4之類和校驗算法CRC32、Adler32、簡單累加和的人。如果你完全沒接觸過二進制分析這篇文章也能看懂思路但實操部分需要你補一些基礎知識。我會盡量把每一步的為什么講清楚而不是只丟一堆命令。整篇文章圍繞一條主線從字符串引用入手識別封裝層次逐層拆解XOR、校驗、壓縮最終還原出可讀的原始數(shù)據(jù)。這條主線在逆向分析里是通用方法論不局限于某一個具體格式。下面我按實際操作的順序把每個環(huán)節(jié)拆開講。2. 封裝結(jié)構(gòu)的整體設計思路與識別方法2.1 為什么存檔要加這三層先說清楚一個前提不是所有存檔都會同時用XOR、校驗、壓縮這三層。但一旦你遇到一個看起來有規(guī)律但讀不懂的文件這三層是最常見的組合。它們的職責分工很明確。壓縮層解決的是體積問題。原始數(shù)據(jù)可能是JSON、XML、或者結(jié)構(gòu)化的二進制記錄直接存體積大用zlib或lz4壓一下能省很多空間。壓縮后的數(shù)據(jù)有個特征熵值高字節(jié)分布接近隨機但通常開頭幾個字節(jié)是固定的魔數(shù)比如zlib的78 9C、78 01、78 DA。校驗層解決的是完整性驗證。存檔在傳輸或存儲過程中可能損壞加一個CRC32或Adler32讀取時先校驗再解壓能提前發(fā)現(xiàn)損壞而不是解壓到一半報錯。校驗值通常緊挨著被校驗的數(shù)據(jù)存放長度固定CRC32是4字節(jié)Adler32也是4字節(jié)。XOR層解決的是不想讓你直接看懂的問題。它不算真正的加密因為密鑰往往很短且固定但足以讓直接打開文件的人看到亂碼。XOR的特點是同一個密鑰異或兩次就還原所以加密解密是同一個操作。密鑰可能是一個字節(jié)、一個固定字符串、或者一段循環(huán)使用的字節(jié)序列。三層疊加的順序通常是原始數(shù)據(jù) → 壓縮 → 加校驗 → XOR混淆 → 寫入文件。讀取時反過來讀文件 → XOR還原 → 校驗驗證 → 解壓 → 原始數(shù)據(jù)。但實際順序可能變比如先XOR再壓縮或者校驗放在XOR之前。這就是為什么不能想當然必須通過分析確認。2.2 字符串引用為什么是最好的切入點二進制文件里如果全是壓縮或XOR后的數(shù)據(jù)你確實什么都看不出來。但封裝結(jié)構(gòu)本身往往留有線索——這些線索就是字符串引用。具體來說一個存檔文件通常包含文件頭標識版本、類型、元數(shù)據(jù)區(qū)記錄各個數(shù)據(jù)塊的位置和長度、數(shù)據(jù)區(qū)實際內(nèi)容。文件頭和元數(shù)據(jù)區(qū)往往不壓縮也不XOR因為程序需要快速讀取它們來定位數(shù)據(jù)。這些區(qū)域里就可能出現(xiàn)字符串比如固定的魔數(shù)標記如SAVE、ARCH、PK\x03\x04zip的標記字段名如version、checksum、offset、length路徑片段如config/、data/、.json、.bin錯誤信息或提示文本用十六進制編輯器打開文件切到ASCII視圖掃一眼有沒有可讀字符串。更高效的方法是用strings命令Linux/macOS自帶Windows可以用Sysinternals的strings或者Git Bash里的提取所有長度≥4的可打印字符串然后觀察哪些像是結(jié)構(gòu)標記。strings -a -t x savefile.bin | head -50-a表示掃描整個文件不只是數(shù)據(jù)段-t x表示輸出字符串在文件中的十六進制偏移。這樣你能看到每個字符串出現(xiàn)在文件的什么位置位置信息非常關鍵——如果某個字符串出現(xiàn)在文件開頭附近它很可能是文件頭的一部分如果出現(xiàn)在中間可能是某個數(shù)據(jù)塊的標記。2.3 從字符串位置反推結(jié)構(gòu)布局拿到字符串列表和偏移后下一步是推斷結(jié)構(gòu)。假設你看到這樣的輸出00000000 SAVE 00000010 version 00000020 checksum 00000030 data_offset 00000040 data_length 00000050 ...后面是亂碼這說明文件頭至少到0x50左右包含了版本、校驗值、數(shù)據(jù)偏移和長度這些字段。每個字段后面跟著的實際值需要你去看十六進制。比如version后面4個字節(jié)可能是01 00 00 00小端序的1checksum后面4個字節(jié)是校驗值data_offset后面4個字節(jié)是數(shù)據(jù)區(qū)起始位置data_length后面4個字節(jié)是數(shù)據(jù)區(qū)長度。這里有個關鍵技巧字符串本身往往不是數(shù)據(jù)而是標簽。程序讀取時先匹配標簽再讀標簽后面的值。所以你在十六進制里看到的是標簽值的交替排列。標簽是ASCII值是二進制。找到這個規(guī)律結(jié)構(gòu)就清晰了一半。注意有些格式的字符串是定長字段比如固定16字節(jié)不足補零有些是長度前綴前面1或2字節(jié)表示字符串長度。觀察字符串后面跟的是00還是長度值能判斷是哪種。2.4 判斷是否存在XOR層的三個信號不是所有文件都有XOR層。怎么判斷看三個信號。信號一字符串區(qū)域之外的數(shù)據(jù)熵值異常高但又不是壓縮格式。壓縮數(shù)據(jù)的熵值也很高但壓縮數(shù)據(jù)通常有魔數(shù)。如果你看到一段數(shù)據(jù)熵值高、沒有已知壓縮魔數(shù)、而且長度和某個字段比如data_length對得上那可能是XOR后的數(shù)據(jù)。信號二文件里有兩段相似但不完全相同的數(shù)據(jù)。比如兩個數(shù)據(jù)塊長度一樣內(nèi)容看起來都是亂碼但逐字節(jié)對比發(fā)現(xiàn)差異很小。這可能是同一份數(shù)據(jù)用不同密鑰XOR或者一份是XOR后的、一份是原始的用于對比分析。信號三已知明文攻擊。如果你知道原始數(shù)據(jù)里應該包含某個固定字符串比如JSON開頭的{或XML開頭的?xml而文件里對應位置是亂碼把亂碼和已知明文XOR就能得到密鑰。這是最直接的確認方法。舉個例子假設data_offset指向的位置文件里是9A 8B 8C 8D而你預期原始數(shù)據(jù)開頭是7B 22 0A 20{加換行加空格逐字節(jié)XOR9A ^ 7B E1 8B ^ 22 A9 8C ^ 0A 86 8D ^ 20 AD得到密鑰片段E1 A9 86 AD。如果這個密鑰在文件其他位置重復出現(xiàn)或者用它對其他數(shù)據(jù)塊XOR后能得到可讀內(nèi)容那XOR層就確認了。3. 核心細節(jié)解析XOR、校驗、壓縮的拆解要點3.1 XOR層的密鑰識別與還原實操XOR還原的核心是找到密鑰。密鑰的形態(tài)有幾種按難度從低到高排列。單字節(jié)密鑰是最簡單的。整個數(shù)據(jù)區(qū)所有字節(jié)都異或同一個值。怎么找如果數(shù)據(jù)區(qū)里有一段你已知的明文比如文件末尾可能有固定的結(jié)束標記拿密文和明文XOR就能得到密鑰?;蛘哂妙l率分析如果原始數(shù)據(jù)是文本空格0x20出現(xiàn)頻率最高密文里出現(xiàn)頻率最高的字節(jié)異或0x20就是密鑰。固定多字節(jié)密鑰稍復雜。密鑰是一個固定長度的字節(jié)序列循環(huán)使用。比如密鑰是KEY1236字節(jié)那么數(shù)據(jù)第1字節(jié)異或K第2字節(jié)異或E第7字節(jié)又異或K以此類推。識別方法是如果數(shù)據(jù)里有兩段相同明文被加密密文的差異會呈現(xiàn)周期性。或者用已知明文攻擊得到密鑰片段后觀察周期。變長密鑰最麻煩密鑰可能根據(jù)位置變化比如密鑰是位置索引的函數(shù)。這種情況通常需要結(jié)合程序邏輯分析純靜態(tài)分析很難。但實際遇到的存檔格式里變長密鑰很少見因為實現(xiàn)復雜且沒必要。實操還原的步驟確定數(shù)據(jù)區(qū)的起始偏移和長度從文件頭字段讀取。提取數(shù)據(jù)區(qū)字節(jié)到單獨文件。用猜測的密鑰做XOR輸出結(jié)果。檢查結(jié)果是否有已知壓縮魔數(shù)或可讀文本。如果沒有調(diào)整密鑰或密鑰周期重復。def xor_decrypt(data, key): key可以是bytes或int if isinstance(key, int): return bytes(b ^ key for b in data) else: key_len len(key) return bytes(data[i] ^ key[i % key_len] for i in range(len(data))) # 示例單字節(jié)密鑰0x5A with open(data_section.bin, rb) as f: encrypted f.read() decrypted xor_decrypt(encrypted, 0x5A) with open(decrypted.bin, wb) as f: f.write(decrypted)實操心得XOR還原后先別急著解壓用xxd或十六進制編輯器看一眼開頭。如果看到78 9C、1F 8B、04 22 4D 18這些魔數(shù)說明壓縮層就在里面。如果看到PK那是zip。如果看到可讀文本可能沒有壓縮層直接就是原始數(shù)據(jù)。3.2 校驗層的識別與驗證方法校驗層的識別相對直接因為校驗算法就那么幾種而且校驗值長度固定。CRC324字節(jié)多項式0xEDB88320反射或0x04C11DB7非反射。zlib、gzip、zip都用它。特征是校驗值通常放在被校驗數(shù)據(jù)的后面或前面小端序存儲。Adler324字節(jié)zlib的默認校驗和CRC32二選一。計算比CRC32快但碰撞概率稍高。特征是兩個16位部分低16位是累加和高16位是累加和的累加。簡單累加和1、2或4字節(jié)所有字節(jié)相加取模。老式格式常用。特征是值通常不大且改變一個字節(jié)對結(jié)果影響是線性的。MD5/SHA116或20字節(jié)用于強校驗。特征是長度明顯比CRC長且看起來完全隨機。驗證方法假設文件頭里有個checksum字段值是X。你把數(shù)據(jù)區(qū)提取出來用各種算法算一遍看哪個結(jié)果等于X。如果都不等可能校驗范圍不是整個數(shù)據(jù)區(qū)而是數(shù)據(jù)區(qū)的一部分或者校驗前先做了XOR。import zlib import hashlib data open(data_section.bin, rb).read() crc32_val zlib.crc32(data) 0xFFFFFFFF adler32_val zlib.adler32(data) 0xFFFFFFFF md5_val hashlib.md5(data).hexdigest() sha1_val hashlib.sha1(data).hexdigest() print(fCRC32: {crc32_val:08X}) print(fAdler32: {adler32_val:08X}) print(fMD5: {md5_val}) print(fSHA1: {sha1_val})注意校驗值的字節(jié)序很關鍵。CRC32和Adler32在文件里通常是小端序存儲但有些格式用大端序。算出來的值要按兩種字節(jié)序都試一下。另外有些格式的校驗值是對XOR之前的數(shù)據(jù)算的有些是對XOR之后的算的。如果直接算不對試試先XOR再算。3.3 壓縮層的格式判斷與解壓壓縮層的判斷主要靠魔數(shù)和試解壓。常見壓縮格式的魔數(shù)格式魔數(shù)十六進制說明zlib78 01/78 9C/78 DA最常見78后面的字節(jié)表示壓縮級別gzip1F 8B帶文件頭和CRClz404 22 4D 18幀格式zstd28 B5 2F FD現(xiàn)代格式bzip242 5A 68BZhlzma/xzFD 37 7A 58 5A 00xz格式deflate raw無固定魔數(shù)需要試解壓如果看到78開頭的兩字節(jié)基本可以確定是zlib。zlib的第二個字節(jié)有規(guī)律01表示最快壓縮9C表示默認DA表示最大壓縮。這三個值覆蓋了絕大多數(shù)情況。解壓實操import zlib import gzip import lz4.frame import zstandard as zstd data open(decrypted.bin, rb).read() # 試zlib try: result zlib.decompress(data) print(zlib解壓成功長度:, len(result)) except Exception as e: print(zlib失敗:, e) # 試gzip try: result gzip.decompress(data) print(gzip解壓成功長度:, len(result)) except Exception as e: print(gzip失敗:, e) # 試lz4 try: result lz4.frame.decompress(data) print(lz4解壓成功長度:, len(result)) except Exception as e: print(lz4失敗:, e) # 試zstd try: dctx zstd.ZstdDecompressor() result dctx.decompress(data) print(zstd解壓成功長度:, len(result)) except Exception as e: print(zstd失敗:, e)如果所有標準格式都失敗可能是raw deflate沒有zlib頭。用zlib.decompress(data, -15)試-15表示raw deflate。還不行的話可能是自定義壓縮或者數(shù)據(jù)還有一層XOR沒剝干凈。實操心得解壓失敗時先檢查數(shù)據(jù)長度。zlib解壓需要完整的流如果數(shù)據(jù)被截斷會報Error -5不完整。這時候可以試試zlib.decompressobj()它能解壓部分數(shù)據(jù)。另外有些格式在壓縮數(shù)據(jù)前后加了額外字節(jié)比如長度前綴需要先去掉。3.4 三層順序的判斷邏輯三層順序不是固定的但可以通過以下邏輯判斷如果XOR在壓縮之后XOR還原后能看到壓縮魔數(shù)。這是最常見的情況因為先壓縮再XORXOR的密鑰可以很短甚至單字節(jié)因為壓縮數(shù)據(jù)本身已經(jīng)高熵了。如果XOR在壓縮之前XOR還原后看到的是原始數(shù)據(jù)可讀文本或結(jié)構(gòu)化二進制沒有壓縮魔數(shù)。這種情況少見因為先XOR再壓縮壓縮率會下降XOR后的數(shù)據(jù)熵值高壓縮算法效果差。校驗的位置校驗通常在XOR之前計算對壓縮后的數(shù)據(jù)算然后校驗值和XOR后的數(shù)據(jù)一起存儲。讀取時先XOR還原再校驗再解壓。但也有格式先校驗再XOR讀取時先XOR再校驗。判斷方法用兩種順序各試一次看哪個能通過校驗。判斷流程讀文件頭提取data_offset、data_length、checksum。提取數(shù)據(jù)區(qū)。嘗試XOR還原用已知或猜測的密鑰。對還原后的數(shù)據(jù)算校驗和checksum對比。如果校驗通過嘗試解壓。如果校驗不通過嘗試對原始數(shù)據(jù)未XOR算校驗。如果還不通過檢查校驗范圍是否只是數(shù)據(jù)區(qū)的一部分。4. 完整實操流程從二進制到原始數(shù)據(jù)4.1 環(huán)境準備與工具清單工欲善其事必先利其器。這套流程需要的工具不多但每個都要用熟。十六進制編輯器010 Editor有模板功能能自動解析結(jié)構(gòu)、HxDWindows免費、ImHex開源支持模式語言。我個人常用010 Editor因為它的模板功能可以寫腳本自動解析文件頭。命令行工具xxd十六進制dump、strings提取字符串、file識別文件類型、binwalk自動識別嵌套格式。binwalk特別有用它能自動掃描文件里的壓縮流和文件系統(tǒng)。Python環(huán)境需要zlib標準庫、gzip標準庫、lz4pip install lz4、zstandardpip install zstandard、crcmod可選用于自定義CRC。調(diào)試工具如果存檔有配套程序用x64dbg或gdb附加到程序上在讀取存檔的函數(shù)下斷點觀察它怎么處理數(shù)據(jù)。這是最直接的方法但需要程序還能運行。# 安裝Python依賴 pip install lz4 zstandard crcmod # binwalk基本用法 binwalk savefile.bin # 提取binwalk識別的內(nèi)容 binwalk -e savefile.bin4.2 第一步文件頭解析與字段提取假設我們已經(jīng)用strings和十六進制編輯器確認了文件頭結(jié)構(gòu)。現(xiàn)在寫一個Python腳本自動提取字段。import struct def parse_header(filepath): with open(filepath, rb) as f: data f.read() # 假設文件頭結(jié)構(gòu)根據(jù)實際分析調(diào)整 # 0x00: magic (4 bytes) SAVE # 0x04: version (4 bytes, uint32 LE) # 0x08: checksum (4 bytes, uint32 LE) # 0x0C: data_offset (4 bytes, uint32 LE) # 0x10: data_length (4 bytes, uint32 LE) # 0x14: flags (4 bytes) magic data[0x00:0x04] version struct.unpack(I, data[0x04:0x08])[0] checksum struct.unpack(I, data[0x08:0x0C])[0] data_offset struct.unpack(I, data[0x0C:0x10])[0] data_length struct.unpack(I, data[0x10:0x14])[0] flags struct.unpack(I, data[0x14:0x18])[0] print(fMagic: {magic}) print(fVersion: {version}) print(fChecksum: 0x{checksum:08X}) print(fData offset: 0x{data_offset:X}) print(fData length: {data_length}) print(fFlags: 0x{flags:08X}) # 提取數(shù)據(jù)區(qū) data_section data[data_offset:data_offset data_length] print(fData section extracted: {len(data_section)} bytes) return { magic: magic, version: version, checksum: checksum, data_offset: data_offset, data_length: data_length, flags: flags, data_section: data_section } result parse_header(savefile.bin)注意字段偏移和類型必須根據(jù)實際分析確定上面的代碼只是示例。實際分析時先用十六進制編輯器手動確認每個字段的位置和長度再寫腳本。不要一上來就寫腳本容易因為偏移猜錯而浪費時間。4.3 第二步XOR還原與密鑰確認假設通過已知明文攻擊我們猜測密鑰是單字節(jié)0x5A。寫腳本還原并驗證。def try_xor_keys(data_section, candidate_keys): 嘗試多個候選密鑰輸出看起來最像壓縮數(shù)據(jù)的 results [] for key in candidate_keys: if isinstance(key, int): decrypted bytes(b ^ key for b in data_section) else: decrypted bytes(data_section[i] ^ key[i % len(key)] for i in range(len(data_section))) # 檢查是否有壓縮魔數(shù) magic_score 0 if decrypted[:2] in [b\x78\x01, b\x78\x9C, b\x78\xDA]: magic_score 10 elif decrypted[:2] b\x1F\x8B: magic_score 10 elif decrypted[:4] b\x04\x22\x4D\x18: magic_score 10 # 檢查可打印字符比例 printable sum(1 for b in decrypted[:100] if 32 b 127) printable_ratio printable / min(100, len(decrypted)) results.append({ key: key, magic_score: magic_score, printable_ratio: printable_ratio, decrypted: decrypted }) # 按magic_score和printable_ratio排序 results.sort(keylambda x: (x[magic_score], x[printable_ratio]), reverseTrue) return results # 候選密鑰單字節(jié)0x00-0xFF candidates list(range(256)) results try_xor_keys(result[data_section], candidates) for r in results[:5]: key_repr f0x{r[key]:02X} if isinstance(r[key], int) else r[key] print(fKey: {key_repr}, Magic score: {r[magic_score]}, Printable: {r[printable_ratio]:.2f}) print(f First 16 bytes: {r[decrypted][:16].hex()})如果單字節(jié)密鑰都不對試試多字節(jié)。多字節(jié)密鑰的候選可以來自文件里其他位置的字符串、程序二進制里的常量、常見弱密鑰如12345678、password。4.4 第三步校驗驗證與數(shù)據(jù)完整性確認XOR還原后用還原后的數(shù)據(jù)算校驗和文件頭里的checksum對比。import zlib def verify_checksum(data, expected_checksum, algorithmcrc32): if algorithm crc32: calculated zlib.crc32(data) 0xFFFFFFFF elif algorithm adler32: calculated zlib.adler32(data) 0xFFFFFFFF else: raise ValueError(fUnknown algorithm: {algorithm}) # 嘗試兩種字節(jié)序 expected_le expected_checksum expected_be struct.unpack(I, struct.pack(I, expected_checksum))[0] match_le (calculated expected_le) match_be (calculated expected_be) print(fCalculated: 0x{calculated:08X}) print(fExpected (LE): 0x{expected_le:08X}, match: {match_le}) print(fExpected (BE): 0x{expected_be:08X}, match: {match_be}) return match_le or match_be # 用XOR還原后的數(shù)據(jù)驗證 best_result results[0] decrypted_data best_result[decrypted] verify_checksum(decrypted_data, result[checksum], crc32)如果校驗通過說明XOR密鑰正確數(shù)據(jù)完整。如果不通過可能密鑰不對、校驗算法不對、校驗范圍不對可能只校驗數(shù)據(jù)區(qū)的一部分、或者校驗是在XOR之前算的那就用原始數(shù)據(jù)區(qū)算。實操心得校驗不通過時先別急著換密鑰。試試用原始數(shù)據(jù)未XOR算校驗如果通過了說明校驗是在XOR之前算的XOR層在校驗層之后。這個順序判斷能省很多時間。4.5 第四步解壓與原始數(shù)據(jù)導出校驗通過后解壓就是標準操作了。import zlib def decompress_data(data): # 先試zlib try: result zlib.decompress(data) print(fzlib解壓成功原始長度: {len(result)}) return result, zlib except zlib.error as e: print(fzlib失敗: {e}) # 試raw deflate try: result zlib.decompress(data, -15) print(fraw deflate解壓成功原始長度: {len(result)}) return result, deflate except zlib.error as e: print(fraw deflate失敗: {e}) # 試gzip import gzip try: result gzip.decompress(data) print(fgzip解壓成功原始長度: {len(result)}) return result, gzip except Exception as e: print(fgzip失敗: {e}) return None, None original_data, format_used decompress_data(decrypted_data) if original_data: with open(original_data.bin, wb) as f: f.write(original_data) print(f原始數(shù)據(jù)已導出格式: {format_used}) # 如果是文本打印前500字符 try: text original_data.decode(utf-8) print(前500字符:) print(text[:500]) except UnicodeDecodeError: print(二進制數(shù)據(jù)前64字節(jié):) print(original_data[:64].hex())4.6 第五步結(jié)果驗證與迭代導出原始數(shù)據(jù)后驗證是否合理如果是JSON/XML用解析器試解析。如果是結(jié)構(gòu)化二進制檢查字段是否符合預期。如果是圖片/音頻用對應查看器打開。如果還是亂碼可能還有一層沒剝比如原始數(shù)據(jù)本身也XOR了或者壓縮格式是自定義的。迭代方向換XOR密鑰如果校驗沒通過。換校驗算法CRC32換Adler32或換自定義多項式。換壓縮格式試lz4、zstd、bzip2。檢查是否有長度前綴或后綴需要去掉。檢查數(shù)據(jù)區(qū)是否被分成了多個塊每塊單獨處理。5. 常見問題與排查技巧實錄5.1 問題速查表現(xiàn)象可能原因排查方法找不到可讀字符串文件整體被XOR或壓縮用binwalk掃描試常見XOR密鑰字符串位置不連續(xù)結(jié)構(gòu)中有變長字段或?qū)R填充檢查字符串間的字節(jié)可能是長度或偏移XOR還原后無壓縮魔數(shù)XOR密鑰不對或壓縮格式無魔數(shù)試更多密鑰試raw deflate校驗總是不通過算法不對、字節(jié)序不對、范圍不對試CRC32/Adler32試大小端試部分范圍解壓報不完整數(shù)據(jù)被截斷或有多余字節(jié)用decompressobj檢查長度字段解壓后還是亂碼還有一層XOR或自定義編碼檢查解壓后數(shù)據(jù)的熵值和字符串多個數(shù)據(jù)塊長度不一致每塊獨立壓縮或XOR分別處理每塊檢查塊頭文件頭字段值明顯不合理字段偏移猜錯或類型不對手動在十六進制編輯器里核對5.2 獨家避坑技巧技巧一先靜態(tài)后動態(tài)別急著上調(diào)試器。很多人一上來就開調(diào)試器附加程序結(jié)果在幾千個函數(shù)里迷路。先用strings和十六進制編輯器做靜態(tài)分析把結(jié)構(gòu)猜個大概再用調(diào)試器驗證。靜態(tài)分析能告訴你是什么動態(tài)分析能告訴你怎么用。技巧二保存每一步的中間結(jié)果。XOR還原后的數(shù)據(jù)、解壓后的數(shù)據(jù)都存成單獨文件。這樣如果后面步驟出錯不用從頭再來。而且中間結(jié)果本身可能包含線索比如XOR還原后的數(shù)據(jù)里可能有新的字符串。技巧三注意字節(jié)對齊。很多格式的字段是4字節(jié)或8字節(jié)對齊的。如果你發(fā)現(xiàn)字段偏移總是差1-2字節(jié)可能是對齊填充。檢查字符串后面是否有00填充到4字節(jié)邊界。技巧四校驗值可能是對部分數(shù)據(jù)算的。有些格式只校驗數(shù)據(jù)區(qū)的前N字節(jié)或者跳過某些字段。如果全量校驗不通過試試排除文件頭、排除末尾的填充、或者只校驗數(shù)據(jù)區(qū)的前半部分。技巧五XOR密鑰可能是文件里某個字段的值。比如文件頭里有個seed字段XOR密鑰就是seed的某種變換取反、加1、循環(huán)移位。檢查文件頭里所有看起來像隨機數(shù)的字段它們可能是密鑰來源。技巧六壓縮數(shù)據(jù)可能有多層。有些格式先zlib壓縮再整體XORXOR還原后是zlib解壓后又是另一層zlib。用binwalk能自動識別嵌套或者手動解壓后檢查結(jié)果是否還有壓縮魔數(shù)。技巧七別忽略文件末尾。有些格式在文件末尾追加了額外數(shù)據(jù)比如簽名、填充、第二個數(shù)據(jù)塊。文件頭里的data_length可能只覆蓋第一個塊末尾還有東西。用十六進制編輯器跳到文件末尾看看。技巧八用已知樣本對比。如果你能生成一個已知內(nèi)容的存檔用原程序保存一個簡單配置然后和未知存檔對比差異部分就是數(shù)據(jù)區(qū)相同部分就是文件頭和固定結(jié)構(gòu)。這是最快的方法但前提是原程序還能用。5.3 一個完整的排查案例假設你拿到一個存檔strings輸出如下00000000 SAVE 00000010 v1.0 00000020 crc32 00000030 offset 00000040 size 00000050 ...亂碼開始十六進制查看0x50之后的數(shù)據(jù)發(fā)現(xiàn)熵值很高。文件頭里offset字段值是0x00000050size字段值是0x00001000。crc32字段值是0x12345678。第一步提取0x50到0x1050的數(shù)據(jù)區(qū)。第二步試單字節(jié)XOR。用0x00到0xFF逐個試檢查還原后是否有78 9C。假設試到0x5A時還原后開頭是78 9C。第三步用0x5A還原整個數(shù)據(jù)區(qū)算CRC32。假設算出來是0x87654321和文件頭里的0x12345678不等。試大端序還是不等。試Adler32不等。第四步懷疑校驗是在XOR之前算的。用原始數(shù)據(jù)區(qū)算CRC32得到0x12345678匹配說明校驗層在XOR層之前。第五步用0x5A還原數(shù)據(jù)區(qū)然后zlib解壓。解壓成功得到JSON文本。第六步驗證JSON格式正確字段符合預期。完成。這個案例的關鍵點是第四步——校驗順序的判斷。如果沒想到這一點可能會在密鑰上反復試浪費大量時間。6. 工具選型與自動化腳本6.1 工具對比與選擇建議工具適用場景優(yōu)點缺點010 Editor手動分析結(jié)構(gòu)模板功能強可視化好收費HxD快速查看免費輕量功能少ImHex開源分析模式語言靈活插件多學習曲線陡binwalk自動掃描識別嵌套格式快誤報多x64dbg動態(tài)調(diào)試能看程序?qū)嶋H行為需要程序可運行Python腳本批量處理靈活可自動化需要編程基礎我的建議手動分析用010 Editor或ImHex自動掃描用binwalk批量處理用Python。動態(tài)調(diào)試作為最后手段因為很多老程序已經(jīng)跑不起來了。6.2 自動化腳本框架把前面的步驟整合成一個腳本輸入文件路徑輸出原始數(shù)據(jù)。#!/usr/bin/env python3 存檔封裝拆解工具 自動嘗試XOR、校驗、壓縮的常見組合 import struct import zlib import gzip import sys import os class SaveFileUnpacker: def __init__(self, filepath): self.filepath filepath with open(filepath, rb) as f: self.raw f.read() self.header {} self.data_section None self.decrypted None self.original None def parse_header(self, magic_offset0, fieldsNone): 根據(jù)提供的字段定義解析文件頭 if fields is None: # 默認字段定義需根據(jù)實際調(diào)整 fields [ (magic, 0x00, 4, bytes), (version, 0x04, 4, uint32), (checksum, 0x08, 4, uint32), (data_offset, 0x0C, 4, uint32), (data_length, 0x10, 4, uint32), ] for name, offset, size, ftype in fields: raw self.raw[offset:offsetsize] if ftype bytes: value raw elif ftype uint32: value struct.unpack(I, raw)[0] elif ftype uint16: value struct.unpack(H, raw)[0] else: value raw self.header[name] value # 提取數(shù)據(jù)區(qū) offset self.header.get(data_offset, 0) length self.header.get(data_length, len(self.raw) - offset) self.data_section self.raw[offset:offsetlength] return self.header def try_xor(self, keysNone): 嘗試XOR密鑰 if keys is None: keys list(range(256)) best None best_score -1 for key in keys: if isinstance(key, int): decrypted bytes(b ^ key for b in self.data_section) else: decrypted bytes(self.data_section[i] ^ key[i % len(key)] for i in range(len(self.data_section))) score self._score_data(decrypted) if score best_score: best_score score best (key, decrypted) if best: self.decrypted best[1] return best[0], best_score return None, -1 def _score_data(self, data): 給數(shù)據(jù)打分壓縮魔數(shù)可打印字符比例 score 0 if len(data) 2: if data[:2] in [b\x78\x01, b\x78\x9C, b\x78\xDA]: score 100 elif data[:2] b\x1F\x8B: score 100 if len(data) 4: if data[:4] b\x04\x22\x4D\x18: score 100 elif data[:4] b\x28\xB5\x2F\xFD: score 100 # 可打印字符比例 sample data[:200] printable sum(1 for b in sample if 32 b 127) score (printable / len(sample)) * 50 return score def verify_checksum(self, data, expected, algorithmcrc32): 驗證校驗和 if algorithm crc32: calculated zlib.crc32(data) 0xFFFFFFFF elif algorithm adler32: calculated zlib.adler32(data) 0xFFFFFFFF else: return False # 嘗試兩種字節(jié)序 expected_le expected expected_be struct.unpack(I, struct.pack(I, expected))[0] return calculated expected_le or calculated expected_be def decompress(self, data): 嘗試多種解壓格式 # zlib try: return zlib.decompress(data), zlib except: pass # raw deflate try: return zlib.decompress(data, -15), deflate except: pass # gzip try: return gzip.decompress(data), gzip except: pass # lz4 try: import lz4.frame return lz4.frame.decompress(data), lz4 except: pass # zstd try: import zstandard as zstd dctx zstd.ZstdDecompressor() return dctx.decompress(data), zstd except: pass return None, None def run(self): 完整流程 print(f處理文件: {self.filepath}) print(f文件大小: {len(self.raw)} bytes) # 1. 解析文件頭 print(\n[1] 解析文件頭...) self.parse_header() for k, v in self.header.items(): if isinstance(v, bytes): print(f {k}: {v}) elif isinstance(v, int): print(f {k}: 0x{v:X} ({v})) # 2. 嘗試XOR print(\n[2] 嘗試XOR還原...) key, score self.try_xor() if key is not None: key_repr f0x{key:02X} if isinstance(key, int) else key print(f 最佳密鑰: {key_repr}, 得分: {score:.2f}) print(f 還原后前16字節(jié): {self.decrypted[:16].hex()}) else: print( 未找到合適的XOR密鑰) self.decrypted self.data_section # 3. 驗證校驗 print(\n[3] 驗證校驗和...) expected self.header.get(checksum, 0) for algo in [crc32, adler32]: for data_name, data in [(XOR后, self.decrypted), (原始, self.data_section)]: if self.verify_checksum(data, expected, algo): print(f 校驗通過: {algo} on {data_name}數(shù)據(jù)) break # 4. 解壓 print(\n[4] 嘗試解壓...) original, fmt self.decompress(self.decrypted) if original: self.original original print(f 解壓成功: {fmt}, 原始長度: {len(original)}) # 導出 output_path self.filepath .unpacked with open(output_path, wb) as f: f.write(original) print(f 已導出到: {output_path}) # 嘗試顯示文本 try: text original.decode(utf-8) print(f 前200字符:\n{text[:200]}) except: print(f 前32字節(jié): {original[:32].hex()}) else: print( 解壓失敗可能還有未識別的層) # 導出XOR還原后的數(shù)據(jù)供手動分析 output_path self.filepath .decrypted with open(output_path, wb) as f: f.write(self.decrypted) print(f 已導出XOR還原數(shù)據(jù)到: {output_path}) if __name__ __main__: if len(sys.argv) 2: print(用法: python unpacker.py savefile) sys.exit(1) unpacker SaveFileUnpacker(sys.argv[1]) unpacker.run()這個腳本是一個框架實際使用時需要根據(jù)具體格式調(diào)整parse_header里的字段定義。它的價值在于把試錯過程自動化了——自動試256個單字節(jié)XOR密鑰、自動試多種校驗算法、自動試多種解壓格式。你只需要提供文件頭結(jié)構(gòu)剩下的交給腳本。實操心得腳本跑完后如果解壓失敗別急著改腳本。先看導出的.decrypted文件用十六進制編輯器手動檢查。有時候腳本的評分函數(shù)沒選對最佳密鑰但手動看能發(fā)現(xiàn)線索。自動化是輔助最終判斷還是要靠人。7. 影響范圍與擴展思考這套拆解方法不只適用于存檔文件。任何二進制封裝的場景都能用網(wǎng)絡協(xié)議的數(shù)據(jù)包、嵌入式設備的固件、游戲資源包、數(shù)據(jù)庫的導出文件。核心思路是一樣的——找字符串引用、識別封裝層、逐層剝離。從影響范圍看掌握這套方法意味著你能處理一類問題而不是一個具體問題。今天拆的是存檔明天遇到一個未知格式的配置文件同樣的流程走一遍strings看線索、十六進制看結(jié)構(gòu)、試XOR、試校驗、試解壓。大部分格式都逃不出這幾層。擴展方向有幾個。一是自動化程度可以更高比如用符號執(zhí)行或模糊測試自動推斷字段邊界。二是支持更多壓縮格式比如brotli、lzo、snappy。三是結(jié)合動態(tài)分析如果程序能運行用調(diào)試器直接看它怎么讀文件比靜態(tài)猜快得多。四是處理加密而非XOR如果遇到AES或RSA就需要密鑰提取或側(cè)信道分析那是另一個領域了。我個人在實際操作中的體會是耐心比技術(shù)更重要。很多時候不是不會而是試了幾次沒成功就放棄了。XOR密鑰有256種可能校驗算法有幾十種壓縮格式有十幾種組合起來確實多。但通過字符串引用和結(jié)構(gòu)分析能把可能性縮小到幾個剩下的就是逐個驗證。每次成功拆開一個格式那種原來如此的感覺就是做這行的樂趣所在。最后分享一個小技巧建一個自己的格式庫。每次拆開一個新格式把文件頭結(jié)構(gòu)、XOR密鑰規(guī)律、校驗算法、壓縮格式記下來。下次遇到類似的直接查庫能省大量時間。我自己的庫里已經(jīng)存了幾十種格式很多是同一個軟件的不同版本結(jié)構(gòu)大同小異。這個習慣讓我處理新格式的速度越來越快。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
人人做天天爱| 亚洲精品国产熟女| 日本一区二区不卡| 婷婷六月色| 亚州色阁| 欧美成人一级麻豆| AV中亚| 第二页中文字幕| 精品久久久九九九孕妇| 五月婷婷啪啪| 欧美顶级黄色大片免费| 激情国产乱伦Av| 97精品熟女少妇一区| 国产无码高清操逼视频| 北约熟女超碰| 午夜成人爽爽爽爽A片李冰冰| 九区国产| 久久久久深夜无码| 亚洲精品黄码久久久久| 亚洲国产天堂| 翔田千里无码一区| 久久五十路熟女人妻| 六六久久日韩不卡| 精品丰满熟妇人妻一区| 69一区二区| 伊人热综合| 女沟厕偷窥piss小便| 一区二区三区高清天码| 5252色欧美在线| 久久久内射良家| 亚熟在线| 97一本大道亚洲一区| 亚洲欧美日韩综合在线尤物| 婷婷中文网| 国产超碰AV在线精品| 日日干天天干夜夜爽| 亚州精品人妻一二三区| 日本一级黄色电影| 中文字幕黄色一起草| 不卡免费av在线播放| 澳门黄片一香蕉视频| 97免费在线视频在线观看| 国产精品久久久亚洲第一牛牛_在线观看| 日本三级一区二区 在线| 鲁鲁色综合网| 亚洲丝袜天堂| 亚洲美女 晚间男人天堂 | 99激情视频| 欧美天天综| 国产高清成人传媒影视| 国产精品宅男免费| av国产无码| 狠狠综合| 日韩精品一区二区高清| 99精品热| 中文字幕视频在线观看| 蜜臀久久99精品久久综合| 精品97久久| 欧美日韩中文字幕人妻| 后入 亚洲 美女 射| 欧美熟妇精品黑人巨大91| 日本免费一级AAA大片器 | 麻豆视频test| 亚洲高清无码在线桃色| 九九九久久久| 日本精品一区二区三| 亚洲综合97中文网| 国产av又色又爽又黄| 91美女看B| 天天干夜夜操网| 60秒不遮不挡| 蜜臀人妻少妇久久在线观看| 操逼网站视频漫画国产| 一本色道综合久久欧美| 国产精品嫩草久久久久| 精品一二三区四视频| 天天日天天插| 精品亚洲国产成人av网站| 国产精品乱码久久久| 亚州色站 日韩电影| 少妇高潮对白在线观看| 私人尤物在线精品不卡| 青青草综合在线| 91 手机在线播放 绯色| 亚洲AV无码翔田千里网站| 四虎av在线| 日han少妇无码| 久久久精品国产亚洲AV无码| 日韩精品免费高清视频在线| 超碰免费人妻人人| 这里只有精品97| 夜草欧美| 91蜜臀熟女| 69精品久久久久中文字幕| 精品人妻一区二区三区四区石在线| 后入综合久久| 欧美小说区视频区| 99热国产| 亚洲在线观看| 欧美亚洲高清晰| 超碰综合97在线| 婷婷激情五月天小说网| 夜夜影视四色| 殴美大黄片| 人妻一区视频| 蜜乳性色无码专日粉嫩骚逼AV| 三级日韩一区二区三区| 翔田千里Av在线| 国产精品直播在线观看直播| 91被操| 老熟女91| 国产辣妈在线视频福利| 九九精品99| 美国黄片aaa| 中国操逼无码| xxxx网站亚洲精品| 91精品人妻电影| 国产成人一级av88| 国模精品一区二区三区苹果色戒| 91久久99久久91熟女精品| 404操逼福利视频| 国产AV毛片| 黑人精品成人一区二区三区 | 9118禁| 91 丝袜在线播放| 亚洲精品久久久久毛片A片拉屎 | 九九九网页| 超碰三级秋霞| 少妇内射视频| 熟妇人妻精品一区二区| 中文字幕日韩精品久久| 免费一级特黄特色大片在线观看看| 人人妻人射| 乱伦系列一区二区| 中文高清一区二区的| 久久大香蕉手机高清| 综合网欧| 日本加勒比无码专区一二三| 九九九九亚洲| 澳门黄片一香蕉视频| 国产第25页在线观看| 亚洲无线码一区国产欧美国| 少妇高潮99p| 91在线色| 天天影视91看看| 欧美天天综合| 久久夜黄色无码A级大片| 国产亚州精品美女久久久免费| 夜夜操2028| 日本一天色道久久久精品视频| 少妇蹲下买菜露大唇0| 欧美性爱超碰97| av毛片aaaaa免费看| 333kkkk·亚洲com久久| 大香樵伊人网| 骚女高跟AV在线| 丝袜美腿操av| 国产一级高跟丝袜| 一道本东京热加勒比一区二区三区| 国产AV天美| 亚洲极品| 操逼操逼逼操操逼91 | 啪啪视频免费在线观看| 玖玖爱免费观看视频| 亚洲五月丁香花狠狠干一区二区三区 | 人妻啊啊人妻啊啊| 91色亚洲| 嫩草一区二区在线观看| 精品视频日日夜夜| 久久伊人东京热| 蜜乳av一区二区| 91精品综合久久久久久五月丁香| 啊啊啊不要好爽日韩无码一区| 美女好片色日本| 亚洲制服aⅴ中文字幕| 欧美制服网站美腿丝袜| 99在线精品观看视频中文| a亚洲欧美色欲| 日本护士高潮| 欧美综合在线第一页| 亚洲美女AV无码| 国产超碰| 四虎免费视频| 日本乱人伦片中文三区| 丁香五月天啪啪| 天天色怡春院| 秋霞成人做爱| 久婷婷一区| 国产精品99999| 久久久久久久久久9| 91精品国产日韩欧美综合| 久草综合京东| 欧美色网| 超碰 另类 欧美 | 伊人性在线视频| 欧美极品性爱天天射| 抽查国产福利主播| 99e久久国产精品| 丝袜熟女2P| 天堂成人网| 99精彩视频| 婷婷激情五月综合| 色噜噜人妻丝袜a∨先锋影| 九九热这里只有在线精品视 伊人草 成人菠萝蜜视频在线观看 | 超碰97欧美| 婷婷色网| 蜜桃久久久久久| 婷婷丁香五月天亚洲天堂网| 久久久97| 天天摸夜夜摸| 91伊人久| 九9热伊人| 18禁免费视频| 亚洲激情AV| 丝袜视频网国产90| 97久精品| 偷拍三区| 91久热| 成人短视频在线观看| 精品无av| 日韩人妻少妇中文字幕| 老熟女乱伦片| 97在线资源| 91人妻尻屄视频| 免费男人的天堂| 久热免费视频| 亚洲色图综合| 亚洲视频二区| 婷婷五月天激情网| 欧美96精品在线| 小草精彩毛片| 思思热在线cao| 黄站在线免费观看| 黑操B| 亚洲av国产av综合av卡| 中文字幕在线2| 色色色热| 国产乱伦亚洲| 一级AAA片一区二区三区| 日本一本一区二区三区四区五区欧美日韩中文字幕 | 色吧5亚洲| 国产精品久久久777| 极品美女福利在线观看| 成人线上超碰| 日日干夜夜欢| 综合色图,成人综合网| 亚洲无码超碰免费| 中文字幕视频在线观看| 97超碰无码网| 日本肉体xxxx裸交| 免费看黄片现成| 不卡六六在线91| 日韩97| 97AV在线免费观看| 狠狠干综合| 亚洲另类小说卡通动漫| 亚洲无码日韩电影| 亚熟hd视频在线| 日本99视频| 激情五月天插| 老女人综合网| 无码二级三级| 熟女高潮合集-永久久久-成人AV | 屌逼麻豆| 综合影视国产无码| 中文字幕精品一区二区精| 中国特猛少妇色xxx| 足交视频老司机| 日韩情色视频| 五月天激情网站| 久久久久久久亚洲Av无码| 欧美熟妇精品黑人巨大91| 91丝袜激情在线| 五月天激情综合网| 去干网最新版| 国产精品久久久久亚洲av| 色欧洲| 丝袜美腿操av| 中文字幕av片| 久久久久久久久国产| 欧美在线色图| 日韩99神马视频播放片在线播放| 色欧洲| 91精品操美女| 天天操狠狠日夜夜干超大胆开放com大香蕉视频在线观看 | 人人操人人摸人人看人人插| 久夜视频| 91精品老女人| 国语少妇精| 欧美综合天堂| 99re视频在线播放青草| 欧美综合色| 粉嫩久久久极品| 美日韩一二三区| 伊人国产视频| 亚洲免费97免费| 撸撸成人在线视频| 国产精品视频在线播放| 久草在| 日本高清熟女久久一区| 欧美天天在线| KK色在线影院| 久久久久久综合久久伊人蜜月| 色噜噜狠狠色综无码久久| 污电影在线观看| 超碰久在线天天做| 人人操超碰在线| 欧美日韩中文字幕不卡| 一本久道久久综合狠狠爱一密臀精| 中国熟妇| 国产家庭乱伦表演| AV一区观看| 变态乱伦伪娘灌肠一区二区| 久污| 亚洲人妻精品一区二区| 国产一区在线播放| 国产中出内射一区二区| 久久久精品视频免费观看| 国产亚洲精品av一区| 国产亚州高清国产拍精| 婷婷久久大香蕉| 狠狠久久亚洲欧美专区| 五月天春色激情网| 天天天天干| 欧美日日操| 91草草草| 日本肉体xxxx裸交| 热99这里有精品综合久久 | 家庭乱伦网站国产| 天天久久久久久| 国产 码在线成人网站| 人妻91少妇| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 9Ⅰ超碰| 国产精品91一样| 牛牛操视频逼| 中国韩国明星一极片一区乱码毛片人妻熟女一区二区三区 | 99999无码| 一级@啪啪视频| 国产精品动态一区二区三区四四| 熟妇在线视频一区二区| 国产无码高清操逼视频| 国产搭汕a级片| 欧美天天干| 国产精品久久久久久夜夜夜| 中日韩欧美精品无码AⅤ一区二区| 东北老熟女| 欧洲射精91| 殴美在线AⅤ| 久久精品店| 久久超碰大香蕉| 狠狠干综合| 在线免费观看日韩一区| 欧色网址| …中文字幕亚洲乱,97人妻无码费视…| 深爱五月婷婷| 偷窥自拍A片| 日本潮催一卡操| 少妇熟女视频一二三区| 麻豆一区二区三区精品| 91蜜臀熟女| 岛国艾薇凹凸视频天堂| 99re免费视频精品全部| 深夜视频| 蜜臀在线网站| 亚洲综合校园春色| 亚洲国产综合久久久性感熟妇| 一区二区娱乐网站| 97国产高清视频在线观看| 日本中文字幕不卡视频| 黄页av| 亚洲色图日韩丝袜制服一区二区五月在线| 97天天插| 综合97久久| 欧美激情久| 亚熟在线| 日韩丝袜高跟制服在线观看| 操逼视频色| 99re免费| 免费一级性爱久久| 国产91av在线播放| 精品高清一区二区三区三州| 乱操乱伦AV| 成人国产视频在线观看| 秋霞色色影院| 天天做天天爱夜夜爽毛片试看| 老熟女91视频| 国产精品96久久久久久| 大香蕉99999| 2020天天色综合| 密臀国产在线| 久久9久久| 美女性91| 被操高清无码视频| 日本免费一级AAA大片器| 99这里只有精品国产| 国产久久成人| 亚洲国产成人精品无码专区| 亚洲最大网站av| 日韩免费看黄片| www久| 艹我哪美一区无码| 97精彩视频网站| 神马久久久久久久久久久久| 欧美 综合 亚洲| 90后后入| 97天堂| 日韩大香蕉AV影片| 国产毛片毛片4p懂色| 成年人网站在线免费观看| 亚洲av无码国产精品字幕| 国产a片操逼| 国产一区二区三区导航| 大香网伊人久久综合| 丝袜美腿诱惑亚洲欧美视频在线观看| 日韩兔费看黄片| 亚洲中文字幕精品一区| 强奸乱伦大香蕉| 超碰成人国产| 亚洲自拍欧美国产首页网曝 | 亚洲同性aV综合| 爱爱动态60秒| 亚洲欧美综合区自拍另类| 日本操BAV| 精品国产一区二区三区av在线资源| 爆乳免费黄网站| 人妻天天爽| 男人午夜天堂| 操逼1区| 97精品国产97久久久| 午夜福利区| 校园春色 亚洲| 91色人妻| 防屏蔽在线视频| 亚洲综合性网址| 91亚洲网站| 操日韩第| www.操| 巨乳特殊服务按摩| 精品成人动漫一区二区| 丝袜AV一二三区| 91女优在线观看| 亚洲一区日韩精品中文字幕| 国产无套粉嫩白浆在| 91啪9色| 久久男人| 91足交| 欧美视频激情久久久久久| 久久久久久久| 日韩中文字幕在线视频观看| 亚洲人妖网| 亚洲精品久久久久毛片A片拉屎 | 91久久久久久| 精品美女人人干| 欧美一区二区一级岛国大片| 最新AVzaixian| 国产精选视频| 亚洲一区日韩| 99re在线视频这里只有精品| 精品国产丝袜一区二区三区乱码| 97人人爱人人做人人乐| 视频国产成人精品日本亚洲18| 九九黄色网| 97在线日韩中文字幕| 日韩成人精品| 婷婷五月天久久精品视频一区二区三区| 啊啊啊啊好疼| 五月婷视频| 99热在线只有精品| 天天天天天干夜夜夜夜夜操| 亚洲第一页综合在线| 欧美成人AⅤ大片在线观看| 亚洲精品天天影视综合网 | 久久九七| 丰满岳乱妇一区二区三区| 国产精品熟女AV中文字幕在线播放| 九九热精品视频六| 五月天激情影院| 超碰4A| 五月婷婷深深爱| 97chaopengongkai| 天美精品av| 好吊色综合| 精品妇女一区二区三区| 97精品久久| 久久久久骚| 欧美福利视频啊啊啊啊 | 伦激情人妻另类人妻| 人妻天天爽夜夜爽精品2| 久操精品| 丝袜视频一区二区在线播放国产中文| 一区二区三区黄片免费观看| 久久久久96| 九九热九九| …亚洲黄色厕厕女女在线播…| 精品人人| 国产成人bd在线观看| 日本高清一本二本免费不卡| 激情六月婷婷| 日韩三A大片在线观看| 9999九九九久久久| 啊视频在线| 97欧美视频| 亚洲少妇激情视频| 久久婷婷精品| 欧美日韩啪啪电影| 国产自啪精品视频网站黑丝| 国产又粗又又黄又猛| 日韩操啪| 亚州五月| 性色高清在线| 精品国产一级久久| 秋霞 色色| 一区二三区四区视频大全套| 中文字幕第页| 欧美日韩激情无码专区| 精品无码少妇| 久久久99999久网站| 91超级碰| 亚洲黄色a级片| 亚洲天天操| 综合视频91| 欧美精品另类人妖xxxx| 人摸人人操人| 国产精品爱欲| 殴美性天天| 欧美熟女逼久久久久久| 韩国女主播青草福利视频| 国产区性爱在线视频秋霞豆| 激情黄色片在线观看| 亚洲第一视频 欧美风情 日韩| 人妻出轨一区二区三区| 亚洲欧美经典一区二区| 岛国大片在线观看网站入口| 日韩成年人性爱视频| 日韩人妻精品| 超碰这里只有精品| 欧美一二三区四五区| 91色久| 亚洲一欧洲中文字幕在线 | 狠狠操一区二区| 五月天激情网图片| 免费的黄片wwwwww| 男女激情黄色网址| 强奸乱伦AV网站| 在线免费观看高清无码视频| 视频二区美腿制服人妻欧美| 久久久精品一区二区| 欧美亚洲20p| 久久久草成人网站久久久草成人久久久草久久久 | 色妺妺AⅤ| 91综合天天看| 一本大道久| 亚洲高清在线se| 淫乱图区 | 97精品一区| 日韩欧美~中文字| 欧美日韩国产人人| 91国精产品| 色麻豆AV| 蜜臀th| 丰满欧美放荡少妇在线| 国产丝袜高跟美女av免费观看| 欧美在线色| 日欧毛片久久| 男人的天堂久久狠| 激情四射婷婷六月天| 操淫穴亚洲五月丁香| 2019午夜福利视频| 97国产精品久久久久| 欧美91色| 精品无码久久| 97欧美超碰| 国产日韩精品suv| 性爱综合一区二区| 国产av又色又爽又黄| 岛国黄| 人人做人人妻人人夜视频| 玖玖爱免费观看视频| 熟女视频久久| 日韩素人无码一区二区三区三州| 精品免费1| 91少妇香蕉久久精品| 黑人干亚洲| 麻豆尤物视频网| 国产午夜精品理论片a大结局| 亚洲一卡二卡在线免费| 91人妻做a观看视频| 亚洲制服欧美另类内射| 欧洲色色| 中文字幕久久精品一区| 狠狠操狠狠燥| 91肉丝| 日日噜噜夜夜狠狠视频无| 亚洲综合中文字幕有码| 五月天色图影视| 美女91在线观看| 热久久无毒不卡| 99re免费| 欧美劲爆视频一区二区| 精品四五区| 劲爆欧美人妖三区91| 啊啊啊啊免费视频| 强奸乱伦AV网站| 久久婷婷五月天| 久久伊人青青草| 亚洲综合在线91| 天天操人人操狠狠插| 激情久久久| www.AV有限公司一区| 日韩一卡二卡三卡| 淫荡少妇免费| 精品免费1| 神马久久久久久久久| 啪啪啪精品| 日日夜夜狠狠| 亚洲色天堂九9| 午夜.DJ高清在线观看免费7| 欧日韩不卡视.频| 久草老司机| 国产家庭乱伦性爱视频| 久久久久免费少妇| 亚洲综合 欧美| 国产精品一区二区亚洲人成毛片| 婷婷五月天激情网| 免费草草草草草视频| 精品国产乱码| 久视频在线观看| 久久久不卡| 九九黄色视频在线观看| 久草在| 97色伦97色伦国产欧美| 天美麻豆精品视频99| 91狠狠狠| 欧美人妻一区| 激情人妻另类| 久久精品日韩| 成人色女网| 97色网| 中出91| 国产sv美女内射| 国产自偷自拍一区| 青青久久久| 黄色欧美性爱视频| 精久久久| 久久久成人国产精品无码| 青青草字幕AV| 国产精品视频麻豆入口| 午夜精品久久久久| 自拍偷拍亚洲熟女妇人精品| 色狠狠综合噜一二三区| 亚洲男人综合| 330Dv国产女人终合视频极品人与兽| 91综合网| 精爱久久| 少妇一级婬片免费放一级a性色.| 狠综合网| 成人午夜小视频手机在线看| 人妻少妇久久中文| 尤物一级在线免费观看| 国产精品午夜福利| 啪啪综合网| 夜夜欢天天干| 国产性刺激| 国产精品人妻熟女aⅴ| 亚洲色资源| 天天草天天干天天日| 亚春色色| 久久9精品视频| 18禁无码永久免费无限制| www.高清无码诱惑一区.com | 婷婷五月天久久精品视频一区二区三区| 家庭乱伦麻豆| 91五月天| 日韩中文欧美| 日本人妻伦在线中文字幕| 玖玖资源中文字幕制服丝袜| 国产女人操逼视频| 青青操国产夫妻| 大香蕉 222| 高清成年美女黄网站免费大全| 久久人体一区二区| 一区二区三区四区色图| 欧美在线永久天堂| 久久九九热| 麻豆 欧美 日韩| 欧美精品成人在线播放| 一二三四区电影| 色一射色一射| 美国aaaaa一级黄片| 五月天伊人网| 亚洲欧美日韩电影网站一区 | 日本伦理一区二区| 性爱乱伦网址| 亚洲欧美第一页| 一区二区三区色综合| 婷婷久久网| 桃花色综合影院| 亚洲美女高潮喷水视频| 国产久久日韩网站导航| 大香蕉乱伦视频网| 日本1区2区不卡视频| 国产蜜臀精品一区二区尤物| 九九成人精品| 欧美综合自拍成人自拍第二十页| 正在播放国产精品一区| 人人操人人肉久久精品| 啊啊啊啊啊啊啊网址在线观看| 欧美拳交在线播放| 肉嘟嘟www视频在线观看高清| 女人综合网| 丁香7月婷婷| 大香蕉色网| 麻豆久久久一区二区| 黄色免费网页无码| 91久久九九精品国产综合| 欧美碰碰综合色| 欧美一二级| 91新在线欧美| 99色悠悠| 亚洲欧美精品一区天堂久久 | 欧美色图天堂网m| 黄色AV影视| 女人高潮抽搐喷水视频网站| 中国大陆国产高清AⅤ毛片| 亚洲性网| 中文字幕精品探花视频| 亚洲色交| 亚洲天天自拍| 91痴汉| 久湿久久 | 香蕉视频精品亚洲一区二区三区在线播| 道久久五香丁月婷婷激情综合| 日本一区99| 日日日啊啊啊| 国产suv精品一区二区四| 黑丝少妇| 人妻天天夜夜爽一区二区| 婷婷在线视频| 婷婷五月天_亚洲小说欧美激情另类_精品久久国产字幕 | 怡红院一区二区熟女人妻| 天天激情综合站| 欧美性爽xyxOOOO| 精品免费视频国产一区| 啊啊啊啊啊啊在线观看| 超碰97护士| 97亚洲综合影院| 3PAV乱伦视频| 亚洲精品国语在线播放| 国产无码精品无码| 人人干人人操人人爱| 翔田千里无码一区| 91丨九色丨国产丨人妻在线| 精品中文字幕一区二区| 日韩精品人妻一| 国产午夜无码片在线观看影视| 欧美性巨大╳╳╳╳╳高跟鞋| 国产三级中文有码在线视频| 久久性爱网站| 啊视频在线| 久久国产三区| 日韩av三四区| 欧美在线视频播放| 骚货 中文字幕 av| 91爱剪切久久| 亚洲伊人久久综合97| 18啪啪手机免费性爱| 亚洲欧美自拍偷拍| 巨爆乳肉感一区二区三区竹菊影视| 婷婷久草| 东京成人一区| 91少妇通奸网站| 久操视频这里只有精品| 日韩精品在线视频,日韩精品……| 成全动漫视频观看免费下载| 免费成人在线熟妇网| 综合色久欲| 亚州男人天堂| 亚洲国产91精品一区二区久久| 成人性爱AV在线免费观看| 久久精品国产亚洲AV无码电影| 色啪网| AV高清一区| 人妻色情天天操| 亚洲色人| 日韩性爱电影一区| 久久久久骚| 99re在线视频国产| 欧美日韩97| 新婚人妻扶着粗大强行坐下| 日韩精品 资源| 老女人老91妇女老热女| 午夜一区| 风流老熟女一区二区三区l| 大香蕉宗合网在线| 99在线啪| 国产又黄又粗又猛大片| 天天干夜夜操网| 中文字幕丝袜人妻| 日本三级精品| 免费伦费视频在线观看| 欧美三级不卡| 欧美日韩国产精品久久色婷婷| 亚洲AV乱码专区国产噜噜亚洲| 欧美传媒一区| 97超碰磁| 亚洲春色激情小说| 性高潮久久久| 成人日韩3| 98一区二区精品| 91精品国产长腿丝袜美女| 三级日本一区二区三区| AV中文在线| 久久久久深夜无码| 色欲av一区二区三区蜜芽| 亚洲18禁| 日韩欧美传媒一区国产| 国产成人自拍视频在线| 91精品国久久久久久无码| 欧美一区二区男人天堂| 婷婷五月在线视频| 国内精品久9| 97操b| 后入 亚洲 美女 射| 中亚黄色三级大片| 小情侣高清国产在线视频| 天天影视91看看| 91啪啪视频| 男人综合网| 国产精品久久久久久久久久久久久久久久久久 | 啊啊啊无码| 夜夜狼人妻| 99久视频| 女色综合| 青青草啪啪网| 五月婷婷丁香六月丁香| 超碰欧美在线欧美| 少妇国产不卡| 国产情色第一第二页在线观看| 免费农村成人少妇人妻Aa一区二区视频 | 亚欧性爱无码| 操操操操操操| 国产乱色国产精品免费视| 日韩一999精品| 午夜舔阴达高潮视频免费看| 精品精品精品| 亚洲九九九| 岛国小电影| 国产精品一区二区久久精品| 一区二区三区男女操逼黄色小电影| 黄色无码高清黄色无码网站| 日本三级日本三级三级人妇四虎| 国产自制av蜜乳| 麻豆九九九| 樱花蜜乳av| 爱丝福利| 91黑丝在线播放| 国产激情视频一区区三区| 任我爽视频在线观看| 自拍内地三级在线观看| 亚洲中文字幕日产无码久久| 免费人成在线观看网站品爱网| 日韩不卡网操逼中文字幕日韩| 亚洲啪啪视频一区二区| 97在线观看视频| 夜夜操狠狠操| 欧美日韩丝袜| 日韩免费福利在线观看| 2026国产精品视频| 欧美很很操视频| 国产精品久久| 久久人爽| 大香蕉av在线| 日韩免费高清大片在线| 无码精品啪啪啪一区二区三区三州| 男女一级A片大黄,一进一出| 精品视频一二三中文| 91国产大片| 97任你吞精| 超碰免费人妻在线| 少妇内射视频| A V少妇特黄三级| 中文字幕人成乱码熟女香港| 怡红院网站在线视频| 男人亚洲91首页在线| 操逼片国产| 极品少妇久久久| 九九九久久久久| 久久99久久99久久99人受| 欧美性爱精品七区| 久久亚洲一区女同性恋中文字幕| 99精品丰满人妻无| 在免费jIzzjIzz在线视频| 九九九九9999| 亚洲熟妇综合久久久久久| 另类图片五月| 艹少妇网站| 凹凸视频在线一区二区| 亚洲影视高清第一页| 刺激性视频黄页| 国产精品秘 福利姬在线观看| 日韩AV无码网站| 9久热这里只有精品| 亚州色图片在线色| 国产专区路线| 看日韩美女二区三区免费操逼视频| 国产日韩精品人妻久久久久色欲网站 | 91色图| 一本色道久久综合亚洲二区三区| 国产亚卅97| 久久超碰爱| 这里都是精品在线观看| 国产传媒操逼视频| 日本一区二区亚洲综合| 性一级黄色录像片网站导航 | 在线性黄高清免费视频| 成人性爱AV在线免费观看| 日韩小电影| 午夜美女诱惑电源网| 嗯嗯啊啊好大好爽| 极品内射| 强上我不卡卡| 六六久久日韩不卡| 婷婷成人五月天| 天天干人妇| 美国一区二区免费视频| 亚洲成人性爱网站在线播放| 日本国产欧美一区三区二区| 国产熟女无套内射| 天天射天天色成人| 久久久天堂| 日韩欧美麻豆| 亚州高清AV| 欧美另类天堂| 夫妻AV网站| 久久久国产成人一区二区三区在线| 国产精品一区二区亚洲人成毛片| 免费精品无码一级毛片牛牛影视| 农村妇女精品一二区| 亚洲性综合| 久久少妇人妻| 少妇色综合| 97精品视频在线播放| 蜜乳av一区二区三区| 欧美色日| 蜜桃臀一区二区三区久久| 激情久久日韩精品中文字幕麻豆| 欧美极品少妇| 四虎影视国产精品| 日本三级精品| 久久久夜夜夜| 亚洲色欧美| 韩国三级一线观看久| 亚洲黄色视频在线观看视频| 亚洲成人性爱网站在线播放| 欧美日韩国产另类综合| 啪啪免费| 中文字幕av乱伦| 丁香五月偷拍| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 色综和网| 大香蕉92| 日韩一卡二卡三卡| 高清国产精品福利网站| 免费a级毛片av无码久久精品中文字幕| 超碰免费人妻人人| 国产av又色又爽又黄| 亚洲aV性爱| 男人亚洲91首页在线| JULIA人妻风俗店中出电影| 日韩情色AV| 亚洲国产亚洲天堂| 久久久久久人体| 婷婷超| 久久av成人无码免费| 丁香成人五月天| 日本美女性生活久久久久久久| 你草精品在线视频| 午夜九九| 成人毛片免费| 黄色一级视| 美国美女AV在线| 国产第11页| 夫妻日逼| 日韩欧美aⅴ综合网站发布| 成人短视频在线观看| 久草色悠悠在线视频| 亚洲se电影| 秋霞网无码| 日韩不卡毛片Av免费高清| 天美av在线观看| 久久亚洲色图中文字幕| 欧美第二页| 殴美在线AⅤ| 天天看片天天爽| 蜜桃臀AV在线| 亚洲欧美国产va在线播放频| 亚洲一区二区性爱电影| 肉丝网站91| 99操逼| 亚洲一欧洲中文字幕在线 | 91精品国| 久久国产免费激情视频| 本道综合精品| 久久高清欧美国产| 一道本东京热加勒比一区二区三区 | 中国农村熟妇毛片视频| 色狠狠综合| 久久夜精品一区二区三区| 国产免费一区2区3区| 第一高清av中文字幕| 亚洲欧洲色情高清| 欧美后入| 91色艳| 啊啊啊好大好深| 性爱乱伦网址| 亚热日本熟女| 四虎国产精品永久在线囯在线 | 嗯嗯嗯啊啊在线观看| 亚洲囯产精品女人久久久| 日本天天吊| 亚洲色图A| 国产AV高清AV无码| 秋霞鲁丝午夜无码一区二区三| 精品无码秘 人妻一区二区| 九九人人操| 日本不卡免费二区| 强奸乱伦大香蕉网| 97精品国产精品免费观看| 五月天婷婷在线看 | 97在线免费看视频| 99热国产| 欧美91网| 午夜丁香婷婷| 国产免费小视频| 99热婷婷| 中国91AV| 五月婷婷丁香六月| 97国产|免费| 精品久热| 久久免费9| 东京热男人的天堂网| 天天干人人乐| 中文字幕精品一区二区精品| 超碰久超碰久| 久久五月份| 69天堂| 99爱久久视频频| 2018天天日天天日| 另类亚洲图色| 老子午夜伦不卡影院| 国产亚洲色婷婷99精品91| 艹精品| 亚欧美色图| 欧美日韩99| 青娱乐91| 天堂日本亚洲欧美| 欧美的性爱网站免费| 欧美午夜视频| 人人看人人摸人人色| 丝袜美腿丝袜| 在线观看十八禁| 色综合V| 国产99999久久精品| 亚洲日韩成人性爱视频| 国产精选视频| 日韩二三区| 亚洲天堂中文字| 国产97综合| 久悠悠av| 欧美亚洲第一页| 后入日本1234| 激激五月| 强奸乱伦大香蕉| 自拍啪啪视频| 人妻精品综合中文字幕在线 | 91精品国产长腿丝袜美女| 国产无马av| 色波多| 超碰97导航| 嗯嗯嗯啊啊啊在线免费观看| 成人日韩3| 国产白丝AV| 日韩中文字幕2020| 色色五月天婷婷| 91人妻最真实刺激绿帽| 性欧美| 99操| 噜噜在线| 操逼免费视频无码国产| 欧美92| 经典丝袜一区| 亚洲综合色男人网| 亚洲天堂7777| 亚洲高清视频在线免费观看| 日本免费一区二区不卡| 亚洲人成网www| 丰满人妻一区二区三区四区| 精品999一区二区| 欧美熟妇亚洲版| 老女人爆菊| 中文字幕性感少妇av| 狠狠色噜噜狠狠狠狠2018| 天天性射网| 极品后入免费视频| 2020中文字幕| 怡红院一区二区熟女人妻| 一个国产在线综合网站| 欧美色干| nuu12国产麻豆精品| 操人妻逼91| 懂色AV一区二区三区| 99热在线观看| 97在线精品观看视频| 亚洲男人天堂网| 蜜臀久久99精品久久久久久成人小说 | 一级A啪啪啪啪| 欧美色视频在线| 人人搞人人插人人操| 96久久久久久久| 97久久久久久久久久| 亚洲欧洲无码一区夜| 久久人妻四季| 视频二区美腿丝袜制服人妻欧美| 激情干在线| 思思热免费在线视频| 国产精品分类在线观看| 久久久久亚洲| 国产999精品久久久| 91色伦| 精品制服美女中文一区二区三区| 中文字幕人妻色偷偷久久皮| 欧美人妻精品| 国产精品一二三免费网站| 亚洲av乱伦色图网站| 国产色精品午夜大片| 99re公开精品免费视频| 亚洲成aⅴ人片不卡无码| 精品性爱| 国产狂喷潮在线精品| 永久电影三级在线观看| 91人妻在线视频| 久久 精品| 97手机日韩| 啊啊啊 在线| 国产精品九九| 五月开心久久AV官网| 国产高清不卡视频| 性生活久久久久久久久久| 伊人色综合超碰| 亚洲男人天堂网久久| 亚洲最大的黄色电影网站。| 亚洲男人的天堂V| 欧洲亚洲人妻无码中字久久三区四区 | 久久久久久久久久久久黄色| 91殴美大片| 午夜精品久久久久久久99热影院| 国产丰满熟夫69mpp| 91/欧美| 啊啊啊在线看|