- 熱門文章
-
- 支付寶網(wǎng)商銀行怎么關(guān)閉 詳細(xì)操作流程介紹
- 杭州市民保保障范圍是什么 主要保險(xiǎn)責(zé)任有二
- 工商銀行信用卡積分在哪里兌換禮品 工行信用卡積分兌換入口
- 中秋節(jié)是幾月幾日,具體是哪一天
- 張家口惠民保保障范圍包括什么 特定高額藥品費(fèi)用也能保
- 花唄關(guān)了欠的錢可以不還了嗎 花唄未還清可以關(guān)嗎
- 工商銀行貸款進(jìn)度怎么查詢 貸款進(jìn)度查詢途徑
- 贛州城惠保的優(yōu)勢(shì)有哪些 帶病也可以投保
- 財(cái)報(bào)看世界:2025年消滅大額紙幣?專家發(fā)聲
- 京東白條額度降低了怎么恢復(fù) 具體問題具體分析
- 熱門標(biāo)簽
-
混淆器(混淆器 編譯器 區(qū)別)
混淆器可能是相關(guān)行業(yè)人士都值得關(guān)注的知識(shí),在此老幣網(wǎng)對(duì)混淆器 編譯器 區(qū)別進(jìn)行詳細(xì)的介紹,并拓展一些相關(guān)的知識(shí)分享給大家,希望能夠?yàn)槟鷰韼椭?/p>
本文目錄:
- 1、什么是代碼混淆?andriod和android-studio工程如何啟用代碼混淆功能
- 2、代碼混淆器是干什么的?
- 3、asp.net有什么好的加密混淆工具
- 4、有人使用過 Zelix KlassMaster進(jìn)行混淆嗎
- 5、有沒有好的 python 混淆器 推薦一個(gè)
- 6、android集成分享sdk后怎么代碼混淆
什么是代碼混淆?andriod和android-studio工程如何啟用代碼混淆功能
代碼混淆有兩種重要功能。其一,混淆代碼。其二,優(yōu)化代碼。
進(jìn)行代碼混淆的程序被稱為代碼混淆器(混淆工具)。進(jìn)行代碼混淆的意義主要在于對(duì)代碼進(jìn)行一定程度的加密。
在android 2.3之后,sdk中就已經(jīng)集成了混淆器proguard(目錄在sdk\tools\proguard),所以我們可以很方便的直接在工程中開啟代碼混淆。
eclipse android工程開啟混淆功能,我們需要手動(dòng)在項(xiàng)目文件.properties(我的是project.properties文件)中添加下面的代碼
# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home):
proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
某些方式創(chuàng)建的項(xiàng)目中可能已經(jīng)有如上兩行了,只是默認(rèn)被注釋掉了,只要把proguard.config這一行解注釋就好了。這樣代碼混淆功能就開啟了,在打簽名包時(shí),項(xiàng)目會(huì)自動(dòng)進(jìn)行代碼混淆。
代碼混淆器是干什么的?
用于打亂代碼的編譯結(jié)果,保護(hù)自己成果,使別人難以看懂用反編譯軟件還原出來的代碼
asp.net有什么好的加密混淆工具
.net軟件加密鎖,可試試德國(guó)的威步,威步(WIBU)信息系統(tǒng)的軟件加密狗,還能申請(qǐng)免費(fèi)試用版。
加密鎖:威步(WIBU)的CodeMeter,AxProtector(for.net)兩款軟件加密鎖性能非常不錯(cuò)
混淆的問題,與傳統(tǒng)的代碼混淆工具(Obfuscator)不同,AxProtector可以完全阻止對(duì).NET 程序集(由 C#, VB.NET, Delphi.NET, ASP.Net… 等語言編寫)的反編譯。通俗的講,AxProtector在破解者和您的 .NET 代碼之間構(gòu)建了強(qiáng)大的防破解保護(hù)屏障,生成一個(gè)基于 Windows 的而不是基于 MSIL 的兼容格式文件。原始的 .NET 代碼完整的被加密后封裝在本地代碼內(nèi),無論何時(shí)都不會(huì)釋放到硬盤,對(duì)于破解者是不可見的。
與單純的.net加密軟件不同,AxProtector與CodeMeter硬件加密狗配套餐使用,采用了更為嚴(yán)密的密鑰管理,及最先進(jìn)的AES、RSA、ECC等加密算法存儲(chǔ)或傳輸密鑰,保證通訊安全。
.Net代碼編譯后生成的 .class 中包含有源代碼中的所有信息(不包括注釋),尤其是在其中保存有調(diào)試信息的時(shí)候。所以一個(gè)按照正常方式編譯的.class 文件可以非常輕易地被反編譯。一般軟件開發(fā)商會(huì)采用一種叫做混淆器的工具?;煜鞯淖饔檬菍?duì)編譯好的代碼進(jìn)行混淆,使得其無法被反編譯或者反編譯后的代碼混亂難懂。由于混淆器只是混淆了方法名稱或流程,而不能防止源代碼被反編譯,因此混淆器的作用只是增加了反編譯的難度,最終的結(jié)果也是治標(biāo)不治本。對(duì)于一些掌握工具的人來說幾乎還是透明的。AxProtector是一款真正意義的加密源代碼、防止反編譯的.net軟件加密軟件。
AxProtector加密了.net原代碼,任何時(shí)候原代碼都不可能被還原到硬盤當(dāng)中。采用AxProtector加密后的.net代碼只有在程序調(diào)用或執(zhí)行某一段函數(shù)的時(shí)候,才能通過AxProtectorClass在內(nèi)存中解密后返回到程序中執(zhí)行,運(yùn)行之后迅速立即加密。這種隨機(jī)加密、按需解密原代碼的功能,能很好的防止.Net程序的反編譯,同時(shí)能夠很好地防止API加密點(diǎn)被摘除。有效地保證了源代碼的執(zhí)行效率和安全性。
有人使用過 Zelix KlassMaster進(jìn)行混淆嗎
你要的功能其實(shí)是Java代碼混淆,如果要了解Java編譯成exe,可以看“參考資料”。下面一段文字摘自《Java手機(jī)/PDA程序設(shè)計(jì)入門》一書,可以做為混淆器性能的大致觀點(diǎn):筆者沒用過DashO,所以無法對(duì)其作出個(gè)人評(píng)價(jià)。所以現(xiàn)在僅說明筆者曾用過的產(chǎn)品。以筆者的個(gè)人觀點(diǎn),如果就混淆的程度來說,ZKM最好,JAX中等,RetroGuard和ProGuard最差,一分錢一分貨,這是千古不變的道理。如果就功能性而言,ZKM和JAX都不錯(cuò),不過,JAX是IBM所開發(fā)的產(chǎn)品,因此也繼承了大部分IBM產(chǎn)品的最大特色,就是“功能超強(qiáng),可是不易使用”,可能光是要看完JAX的設(shè)定文件就是一個(gè)很大的問題。下面分別介紹幾種具有代表性的混淆器,對(duì)它們的產(chǎn)品性能進(jìn)行對(duì)比。我們使用不同混淆器對(duì)同一段java代碼進(jìn)行混淆,分別列出混淆后代碼反編譯的結(jié)果,并給出使用的一些直接體會(huì)。原始java代碼:publicclassSimpleBeanimplementsSerializable{privateString[]name={"name0","name1","name2","name3"};privateListmyList=null;publicvoidSimpleBean(){myList=newArrayList(4);}publicvoidinit_public(){myList.add("name");for(inti=1;i;JVMINSTRdup;JVMINSTRswap;4;ArrayList();_$1;}publicvoidinit_public(){_$1.add("name");for(inti=1;i4;i++)_$1(i);}privatevoid_$1(inti){_$1.add(_$2[i]);}privatevoidwriteObject(ObjectOutputStreamobjectoutputstream)throwsIOException{}privateString_$2[];privateList_$1;}優(yōu)點(diǎn):1、除符號(hào)混淆外增加了數(shù)據(jù)混淆(字符數(shù)組初始化);2、有一些語句反編譯只能得到字節(jié)碼指令;3、在SunJDK中提供的Java編譯器(javac)的基礎(chǔ)上完成,編譯和混淆一體完成,不需要先生成class文件再混淆;4、提供了Eclipse的插件,能夠直接在Eclipse中使用Jocky。缺點(diǎn):1、混淆選項(xiàng)粒度較粗,使用中可能要在具體代碼中添加@preserve指令來實(shí)現(xiàn),工作量大;2、沒有控制流混淆。三、Allatori3.1_demoAllatori屬于第二代混淆器,具有全方位保護(hù)你的知識(shí)產(chǎn)權(quán)的能力。Allatori具有以下幾種保護(hù)方式:命名混淆,流混淆,調(diào)試信息混淆,字符串編碼,以及水印技術(shù)。對(duì)于教育和非商業(yè)項(xiàng)目來說這個(gè)混淆器是免費(fèi)的。2.1版本支持war和ear文件格式,并且允許對(duì)需要混淆代碼的應(yīng)用程序添加有效日期。Jad反編譯混淆后class得到的代碼:publicclassSimpleBeanimplementsSerializable{publicvoidinit_public(){d.add(c.k("{u{0"));inti=1;goto_L1_L3:H(i);++i;_L1:4;JVMINSTRicmplt21;goto_L2_L3_L2:}publicvoidSimpleBean(){d=newArrayList(4);}privatevoidH(inta){d.add(c[a]);}publicSimpleBean(){d=null;}privatevoidH(ObjectOutputStreamobjectoutputstream)throwsIOException{}privateStringc[]={c.k("\177q\177te"),c.k("\177q\177td"),c.k("\177q\177tg"),c.k("\177q\177tf")};privateListd;}注:c.k是為進(jìn)行字符串加密額外生成的類c的靜態(tài)方法。優(yōu)點(diǎn):1、設(shè)計(jì)考慮了庫文件混淆的使用場(chǎng)景;2、使用文檔詳盡,混淆選項(xiàng)配置文件的編寫示例多;3、除符號(hào)混淆外,還使用了兩種高級(jí)的混淆手段:控制混淆(改寫了for循環(huán))和字符串加密(String數(shù)組初始化);4、混淆選項(xiàng)粒度較細(xì),支持本地方法的保護(hù)等;5、支持水印技術(shù),允許對(duì)需要混淆的代碼添加有效日期;6、支持j2me;缺點(diǎn):1、商業(yè)軟件(價(jià)格附后),對(duì)教育和非商業(yè)用途免費(fèi)(網(wǎng)站鏈接是
有沒有好的 python 混淆器 推薦一個(gè)
代碼混淆,其實(shí)很簡(jiǎn)單。原理就是查找、替換而已。市面上有很多混淆工具,最好是在混淆工具的基礎(chǔ)上,自己再寫一下,二次混淆。算法也不難。如果需要全局混淆,以及自動(dòng)混淆,那么就復(fù)雜一些了,需要再加上詞法分析和語法分析。
如何使用:
1,首先得安裝Python。
2,把這個(gè)下面這個(gè) confuse.py 文件,復(fù)制目標(biāo)文件夾。
3,更改 raw_name_list 列表里的字符串。改成你想混淆的變量名或者類名方法名。
4,運(yùn)行python?confuse.py 即可混淆該文件夾下的.cs文件。
這段代碼其實(shí)還是很簡(jiǎn)單的,只是為大家說明一下混淆思想。如果想更方便的使用,需要再加入一些詞法分析、語法分析的算法。
代碼如下:
#! /usr/bin/env python
#coding=utf-8
import hashlib
import random
import os
###############################
# Describe : 混淆Unity腳本文件
# DP Author By: ? 常成功
# Create Date: ? ? 2014-11-25
# Modify Date: ? ? 2014-11-25
###############################
#想混淆的變量/方法名
raw_name_list = ["function_1", "function_2", "var_1", "var_2",]
#混淆后的變量/方法名
new_name_list = []
#隨機(jī)可選的字母表
alphabet = ["a", "b", "c", "d", "e", "f", "g",
"h", "i", "j", "k", "l", "m", "n", "o", "p", "q",
"r", "s", "t", "u", "v", "w", "x", "y", "z",
]
#生成新的變量名
def create_new_name() :
m = hashlib.md5()
#生成隨機(jī)變量名
for raw_name in raw_name_list:
m.update(raw_name)
#生成一個(gè)16位的字串
temp_name = m.hexdigest()[0:16]
#合法名稱校驗(yàn)
#強(qiáng)制以字母作為變量/方法名的開頭
if temp_name[0].isdigit():
initial = random.choice(alphabet)
temp_name = initial + temp_name
temp_name = temp_name[0:16]
#不能重名
while(1):
if temp_name in new_name_list :
initial = random.choice(alphabet)
temp_name = initial + temp_name
temp_name = temp_name[0:16]
else:
new_name_list.append(temp_name)
break
#混淆文件
def confuse_file(path_filename):
file_content = ""
#讀文件內(nèi)容
f = file(path_filename)
# if no mode is specified, 'r'ead mode is assumed by default
while True:
line = f.readline()
if len(line) == 0: # Zero length indicates EOF
break
#混淆
name_index = 0
for raw_name in raw_name_list:
the_new_name = new_name_list[name_index]
line = line.replace(raw_name, the_new_name)
name_index += 1
file_content += line
f.close()
#重寫文件
f = file(path_filename, 'w')
f.write(file_content)
f.close()
#遍歷當(dāng)前目錄下的所有.cs文件 ?
def confuse_all():
#獲取當(dāng)前目錄
dir = os.getcwd()
for root, dirs, filename in os.walk(dir):
for file in filename:
path_filename = os.path.join(root, file)
if path_filename.endswith('.cs'):
confuse_file(path_filename)
print "Confuse File: ", path_filename
if __name__=="__main__":
create_new_name()
confuse_all()
#打印一下混淆的情況.
#如果用文本保存起來, 那么以后可以反混淆, 還原文件
print "Start Confuse ...."
for j in range(0, len(raw_name_list)) :
print raw_name_list[j] , " -- " , new_name_list[j]
print "Confuse Complete !"
android集成分享sdk后怎么代碼混淆
為了保護(hù)代碼被反編譯,android引入了混淆代碼的概念
1.設(shè)置混淆
在工程下找到project.properties文件
在文件中加入proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt這個(gè)是系統(tǒng)的
也可以用自己的混淆文件(這樣就可以配置一些自己的東西),去sdk.dir}/tools/proguard/ 下復(fù)制proguard-android.txt文件到本地工程中
然后設(shè)置成proguard.config=proguard-android.txt
project.properties文件:
[java] view plaincopy
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
proguard.config=proguard-android.txt
# Project target.
target=android-17
-injars androidtest.jar【jar包所在地址】
-outjars out【輸出地址】
-libraryjars 'D:\android-sdk-windows\platforms\android-9\android.jar' 【引用的庫的jar,用于解析injars所指定的jar類】
-optimizationpasses 5
-dontusemixedcaseclassnames 【混淆時(shí)不會(huì)產(chǎn)生形形***的類名 】
-dontskipnonpubliclibraryclasses 【指定不去忽略非公共的庫類。 】
-dontpreverify 【不預(yù)校驗(yàn)】
-verbose
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/* 【優(yōu)化】
-keep public class * extends android.app.Activity【不進(jìn)行混淆保持原樣】
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-keep public abstract interface com.asqw.android.Listener{
public protected methods; 【所有方法不進(jìn)行混淆】
}
-keep public class com.asqw.android{
public void Start(java.lang.String); 【對(duì)該方法不進(jìn)行混淆】
}
-keepclasseswithmembernames class * { 【保護(hù)指定的類和類的成員的名稱,如果所有指定的類成員出席(在壓縮步驟之后)】
native methods;
}
-keepclasseswithmembers class * { 【保護(hù)指定的類和類的成員,但條件是所有指定的類和類成員是要存在?!?/p>
public init(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {
public init(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers class * extends android.app.Activity {【保護(hù)指定類的成員,如果此類受到保護(hù)他們會(huì)保護(hù)的更好 】
public void *(android.view.View);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {【保護(hù)指定的類文件和類的成員】
public static final android.os.Parcelable$Creator *;
}
=====================================常見異常===================================
參考:
加入第三方j(luò)ar包之后常出現(xiàn)的幾個(gè)異常:
proguard returned with error code 1.See console
情況1:
Proguard returned with error code 1. See console
Error: C:/Documents (系統(tǒng)找不到指定文件)
后來發(fā)現(xiàn)是因?yàn)閷⒄麄€(gè)工程放到了桌面上,而桌面的目錄是C:/Documents and Settings/Administrator/桌面,在這里面有空格,而proguard進(jìn)行發(fā)編譯的時(shí)候是不允許有空格的
如果換了正確路徑還不好用的話,直接刪除proguard就好了
注意:SDK和程序路徑最好不要有空格符
情況2:
Proguard returned with error code 1. See console
異常:
java.lang.ArrayIndexOutOfBoundsException
解決辦法:將proguard.cfg中的"-dontpreverify"改成“-dontoptimize”
參考文章:
我把項(xiàng)目中生成的proguard文件夾(此時(shí)文件夾是空的)刪掉,然后再重新運(yùn)行項(xiàng)目,就OK 了。
情況3:
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0] Proguard returned with error code 1. See console
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0] java.io.IOException: Can't read [proguard.ClassPathEntry@106082] (No such file or directory)
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]
at proguard.InputReader.readInput(InputReader.java:230)
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]
at proguard.InputReader.readInput(InputReader.java:200)
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]
at proguard.InputReader.readInput(InputReader.java:178)
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]
at proguard.InputReader.execute(InputReader.java:100)
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]
at proguard.ProGuard.readInput(ProGuard.java:195)
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]
at proguard.ProGuard.execute(ProGuard.java:78)
[2011-10-21 13:22:32 - ZMKSMarket_Build_v1.0]
at proguard.ProGuard.main(ProGuard.java:499)
拋出這樣的異常的原因是第三方j(luò)ar的引用路徑不對(duì),沒有找到這個(gè)需要忽略混淆的jar包。
========================官方文檔翻譯========================================
原文
混淆器(ProGuard)
在本文中(In this document)
Enabling ProGuard
Configuring ProGuard
Decoding Obfuscated Stack Traces
Debugging considerations for published applications
參見
ProGuard Manual ?
ProGuard ReTrace Manual ?
混淆器通過刪除從未用過的代碼和使用晦澀名字重命名類、字段和方法,對(duì)代碼進(jìn)行壓縮,優(yōu)化和混淆。結(jié)果是一個(gè)比較小的.apk文件,該文件比較難進(jìn)行逆向工程。因此,當(dāng)你的應(yīng)用程序?qū)Π踩舾校ㄒ蟾撸?,例如?dāng)你授權(quán)應(yīng)用程序的時(shí)候,混淆器是一種重要的保護(hù)手段。
混淆器被集成在android 構(gòu)建系統(tǒng)中,所以你不必手動(dòng)調(diào)用它。同時(shí)混淆器僅在發(fā)布模式下進(jìn)行構(gòu)建應(yīng)用程序的時(shí)候才會(huì)運(yùn)行起來,所以在調(diào)試模式下構(gòu)建程序時(shí),你不必處理混淆代碼。讓混淆器運(yùn)行起來是可選擇的,但是推薦選上。
這個(gè)文檔描述了怎樣啟用并配置混淆器,以及使用跟蹤(retrace)工具對(duì)混淆的堆棧跟蹤信息(stack traces)進(jìn)行解碼。
啟用混淆器Enabling ProGuard
當(dāng)你新建了一個(gè)Android工程之后,一個(gè)proguard.cfg文件會(huì)在工程的根目錄下自動(dòng)創(chuàng)建。這個(gè)文件定義了混淆器是怎樣優(yōu)化和混淆你的代碼的,所以懂得怎樣根據(jù)你的需要來定制是非常重要的。缺省的配置文件僅覆蓋到了通常情況,所以根據(jù)你的需求,很可能需要編輯它。接下來的內(nèi)容是關(guān)于通過定制混淆器配置文件來對(duì)混淆器配置。
為了讓啟用混淆器作為Ant或者Eclipse構(gòu)建過程中一部分,可以在project_root/default.properties文件中,設(shè)置proguard.config屬性。路徑可以是絕對(duì)路徑或者工程根目錄的相對(duì)路徑。
如果你讓proguard.cfg文件在缺省位置(工程的根目錄),你可以像這樣指定位置:
proguard.config=proguard.cfg
同樣,你可以把該文件放到任意的位置,并指定它的絕對(duì)路徑。
proguard.config=/path/to/proguard.cfg
當(dāng)你在發(fā)布模式下,或者通過運(yùn)行ant release,或者通過使用Eclipse中的Export Wizard構(gòu)建你的應(yīng)用程序的時(shí)候,構(gòu)建系統(tǒng)都會(huì)自動(dòng)地去檢查proguard.config屬性是否被設(shè)置了。如果被設(shè)置了,混淆器在把所有東西打包成.apk文件之前,自動(dòng)地對(duì)應(yīng)用程序字節(jié)碼進(jìn)行混淆處理。而在調(diào)試模式中構(gòu)建則不會(huì)調(diào)用混淆器,因?yàn)槟菢诱{(diào)試會(huì)更加繁重。
運(yùn)行混淆器之后輸出的文件有:
dump.txt
描述.apk包中所有class文件的內(nèi)部結(jié)構(gòu)。
mapping.txt
列出了源代碼與混淆后的類,方法和屬性名字之間的映射。這個(gè)文件對(duì)于在構(gòu)建之后得到的bug報(bào)告是有用的,因?yàn)樗鸦煜亩褩8櫺畔⒎捶g為源代碼中的類,方法和成員名字。更多信息,查看解碼混淆過的堆棧跟蹤信息。
seeds.txt
列出那些未混淆的類和成員。
usage.txt
列出從.apk中剝離的代碼。
這些文件放在以下目錄中:
注意:每次在發(fā)布模式下構(gòu)建時(shí),這些文件都會(huì)被最新的文件覆蓋。所以每次發(fā)布程序時(shí)候,為了反混淆來自構(gòu)建時(shí)產(chǎn)生的bug報(bào)告,請(qǐng)保存這些文件的一個(gè)拷貝。對(duì)于為什么要保存這些文件的重要性的更多信息,請(qǐng)查看程序發(fā)布調(diào)試注意事項(xiàng)。
混淆器配置(proguard config)
某些情況下,proguard.cfg文件的缺省配置可以滿足需求了。但是,對(duì)于混淆器來說,大多數(shù)情況做出正確的分析是困難的,并且它或許會(huì)刪除在它看來是無用的,但對(duì)于程序來說卻確實(shí)需要的代碼。一些例子如下:
一個(gè)僅引用于AndroidManifest.xml文件的類。
一個(gè)通過JNI調(diào)用的方法。
動(dòng)態(tài)引用的屬性和方法。
project_root/bin/proguard 當(dāng)你使用Ant時(shí)
project_root/proguard 當(dāng)你使用Eclipse時(shí)
解碼混淆過的堆棧跟蹤信息(Decoding Obfuscated Stack Traces)
當(dāng)混淆代碼并輸出了一個(gè)堆棧調(diào)試信息時(shí),這些方法名字是混淆過的,雖然可以進(jìn)行調(diào)試,但是調(diào)試變得困難。幸運(yùn)的是,每當(dāng)混淆器運(yùn)行時(shí)候,它都會(huì)輸出到文件project_root/bin/proguard/mapping.txt中,該文件包含了從原始類,方法和屬性名字到混淆后名字的映射。
Windows系統(tǒng)中retrace.bat腳本命令或者Linux和Mac OS X系統(tǒng)中retrace.sh腳本命令能把混淆后的堆棧調(diào)試信息轉(zhuǎn)換為可以理解的文件。它被放在sdk_root/tools/proguard/目錄下。運(yùn)行retrace工具的命令語法是:
retrace.bat|retrace.sh [-verbose] mapping.txt [stacktrace_file]
例如:
retrace.bat -verbose mapping.txt obfuscated_trace.txt
如果你沒有為stracktrace_file指定值,那么retrace工具從標(biāo)準(zhǔn)輸入讀取。
已發(fā)布應(yīng)用程序的調(diào)試注意事項(xiàng)(Debugging considerations for published applications)
保存好每一個(gè)已發(fā)布給用戶的程序的mapping.txt文件。通過保存發(fā)布構(gòu)建版本的mapping.txt文件拷貝,確保當(dāng)用戶碰到bug,并把混淆后的堆棧調(diào)試跟蹤信息提交給你時(shí),你可以進(jìn)行調(diào)試從而修復(fù)問題。程序的mapping.txt文件在每次發(fā)布構(gòu)建時(shí)都會(huì)被覆蓋,所以你一定要注意保存正確的版本。
例如,假設(shè)你已經(jīng)發(fā)布了一個(gè)應(yīng)用程序并在繼續(xù)在新的版本中開發(fā)添加新的功能。接著你馬上啟動(dòng)混淆器并創(chuàng)建一個(gè)新的發(fā)布版本。該操作把mapping.txt文件覆蓋了。一個(gè)用戶提交了來自當(dāng)前發(fā)布版本的bug報(bào)告,該報(bào)告包含了堆棧調(diào)試信息。你再也不能對(duì)用戶的堆棧信息進(jìn)行調(diào)試了,因?yàn)檫@個(gè)對(duì)應(yīng)用戶本機(jī)上版本的mapping.txt文件不存在了。其他覆蓋mapping.txt文件的情況還有很多,所以對(duì)于每一個(gè)可能需要調(diào)試的版本,你都要確保有一份拷貝。
混淆器的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于混淆器 編譯器 區(qū)別、混淆器的信息別忘了在本站進(jìn)行查找喔。
幣安交易所app
幣安交易所app是全球頂尖的數(shù)字貨幣交易平臺(tái),提供幣幣交易和合約交易。
APP下載