我收到此警告消息:
此 App Bundle 包含可能被混淆的 Java/Kotlin 代码。我们建议您上传反混淆文件,以便更轻松地分析和调试您的崩溃和 ANR
这是什么意思?什么是最短的解决方案?
灵感来自Ryan Barnett的BlackHat DC 2011 PPT,特别是下面的代码:
($=[$=[]][(__=!$+$)[_=-~-~-~$]+({}+$)[_/_]+ ($$=($_=!''+$)[_/_]+$_[+$])])()[__[_/_]+__ [_+~$]+$_[_]+$$](_/_)
Run Code Online (Sandbox Code Playgroud)
昨天是恋人的特殊日子,所以我试着写类似的东西.这基本上警告"我爱你"没有任何字符或数字.
例如,"I"可以从中获得 ((_=-~[])/--_+[])[_]
我们有"[object Object]","true","false","NaN","Infinity"使用,我无法弄清楚这种方式得到"v".
我试着想一想String.fromCharCode(),(Ryan已经window为我们提供了参考,所以理论上我们可以window["String"]["fromCharCode"](118))但是我想念这里的"S"和"C"字符.window["eval"](...)再想想,我没有"v".
只是尝试解释一下,[]是空的,当应用+/-/~操作时,它转换为数字0,并~[]给出1,1/0给出Infinitey.然后说到1/0 + [],他们都将转换成字符串为补充,这给"Infinity"和"Infinity"[_] == "Infinity"[0] == "I"...
Ryan的原始代码更复杂,它使用了更多,包括范围,特殊返回值等(这是另一个故事)
这似乎不是一件好事,但只是非常有趣.
在Meze的帮助下,我能够为Firefox生成这个:
($=($=[$=[]][(__=!$+$)[_=-~-~-~$]+(_$={}+$)[_/_]+ ($$=($_=!''+$)[_/_]+$_[+$])])())[__[_/_]+__ [_+~$]+$_[_]+$$]((_$_=(__$=-~[])/--__$+[])[__$]+_$[_+++_]+__[__$=-~-~[]]+_$[-~[]]+($[_$[$__=_+_]+_$[++$__]+_$[++$__]+_$[++$__]+_$[++$__]+_$[++$__]]+[])[
$__+$__+--_]+__[++_]+_$[$__=_+--_]+_$_[_+++_]+_$[_/_]+$_[__$]);
Run Code Online (Sandbox Code Playgroud)
它基本上是alert("I love you"),非常感谢!如果我昨天得到了帮助,我还没有发布这个:(
JavaScript很漂亮,有些可供参考:
$_ = "true"
__ = "false"
_$ = "[object Object]"
$$ = "rt"
_$_ = "Infinity"
_ = …Run Code Online (Sandbox Code Playgroud) 我知道混淆是一个坏主意.但我希望我的所有html代码都有一个很长的单行.所有的html标签都是通过PHP生成的,所以我认为它是可能的.我知道\n\r从正则表达式替换,但不知道如何做到这一点.如果我不清楚这里是一个例子
$output = '<p>
<div class="title">Hello</div>
</p>';
echo $output;
Run Code Online (Sandbox Code Playgroud)
要在源查看器中查看为 <p><div class="title">Hello</div></p>
我在我的项目中使用了这里描述的一段代码
http://lexandera.com/2009/01/extracting-html-from-a-webview/
我创建.apk文件,将其安装在我的设备上,它正常工作.如果我尝试使用proguard的混淆项目失败,则不会到达MyJavaScriptInterface的方法showHTML(String html).
关于那个我的proguard配置
-keep public class com.mypackage.MyClass.MyJavaScriptInterface
-keep public class * implements com.mypackage.MyClass.MyJavaScriptInterface
-keepclassmembers class * implements com.mypackage.MyClass.MyJavaScriptInterface {
<methods>;
}
Run Code Online (Sandbox Code Playgroud)
根据这个答案Android proguard Javascript Interface问题.
解决了.
正如Eric建议的那样,我改变了这样的Proguard配置文件:
-keep public class com.mypackage.MyClass$MyJavaScriptInterface
-keep public class * implements com.mypackage.MyClass$MyJavaScriptInterface
-keepclassmembers class com.mypackage.MyClass$MyJavaScriptInterface {
<methods>;
}
Run Code Online (Sandbox Code Playgroud)
现在我的项目完美无缺.
对于API 17+,您还需要保留@JavascriptInterface注释:
-keepattributes JavascriptInterface
Run Code Online (Sandbox Code Playgroud)
http://developer.android.com/reference/android/webkit/JavascriptInterface.html
我正在考虑混淆商业.Net应用程序.但是选择,购买和使用这样的工具真的值得吗?混淆的二进制文件是否真的免于逆向工程?
是否可以使用ProGuard进行混淆.我不希望ProGuard从我的项目中删除任何类.我打算使用ProGuard仅用于混淆,以防止逆向工程.
我正在寻找一种在JavaScript中混淆和反混淆字符串的方法; 当安全性不是问题时,我的意思是加密和解密.理想的情况是一些原产于JS(像base64_encode()和base64_decode()在PHP)到"把字符串转换成别的,然后再返回的东西",而无需编写一个函数.
欢迎任何建议!
我刚刚使用了proguard,但我试图通过反射实例化的类不起作用.
我有一个界面
Algorithm
Run Code Online (Sandbox Code Playgroud)
我通过这样的课程
AlgorithmFactory.SomeClassThatExtendsAlgorithmImpl.class
Run Code Online (Sandbox Code Playgroud)
该类实例化如下
public ArrayList<Algorithm> getAlgorithms(Context cnx) {
ArrayList<Algorithm> list = new ArrayList<Algorithm>();
for(Class<? extends Algorithm> alg: algorithms) {
try {
Constructor<? extends Algorithm> c = alg.getConstructor(Context.class);
list.add(c.newInstance(cnx));
} catch (IllegalArgumentException e) {
Log.e(TAG, "IllegalArgumentException", e);
throw new IllegalStateException("There was a problem creating the Algorithm class");
} catch (InvocationTargetException e) {
Log.e(TAG, "InvocationTargetException", e);
throw new IllegalStateException("There was a problem creating the Algorithm class");
} catch (InstantiationException e) {
Log.e(TAG, "InstantiationException", e);
throw new IllegalStateException("There was a …Run Code Online (Sandbox Code Playgroud) obfuscation ×10
android ×5
java ×3
proguard ×3
javascript ×2
.net ×1
c# ×1
encryption ×1
google-play ×1
html ×1
line-breaks ×1
php ×1
python ×1
reflection ×1
release ×1
whitespace ×1