导航:首页 > 操作系统 > android混淆还原

android混淆还原

发布时间:2023-02-01 05:45:59

android 混淆so怎么办

只要在混淆的文件中添加-libraryjars libs/armeabi/xxx.so,各个路径的so库文件,另外-keep class xxxxx类 保证不被混淆

⑵ 如何根据mapping.txt还原混淆的代码

1.把附件中的retrace_crash.sh、mapping.txt放在SDK\tool\proguard\bin目录下,修改retrace_crash.sh里面的路径,先就这么用,后面优化
retrace_crash.sh 修改此文件中的输出路径
mapping.txt 需要混淆打包过程中去获取

2.把需要分析的文件夹在SDK\tool\proguard\bin下面的crash文件夹下

3.在SDK\tool\proguard\bin目录下运行shell。输入:./retrace_crash.sh

4.如果命令无法运行
先试试chmod +x retrace_crash.sh命令
如果出现 /bin/sh^M: bad interpreter: No such file or directory错误,解决方法如下:
运行 vi retrace_crash.sh 使用命令 :set ff? 如果是dos格式的,那么你可以用set ff=unix把它强制为unix格式的, 然后存盘退

5.retrace_crash.sh 文件内容如下
#!/bin/bash
function ergodic(){
for file in ` ls $1 `
do
if [ -d $1"/"$file ]
then
ergodic $1"/"$file
else
#echo $1"/"$file >> b
./retrace.sh mapping.txt $1"/"$file >> $1"/_"$file
rm $1"/"$file
echo $1"/"$file
fi
done
}
INIT_PATH="/X_DISK/android-sdk-mac/tools/proguard/bin/crash"
ergodic $INIT_PATH
#echo 'hello'
#txt=$(ls crash/*.txt)
#for var in ${txt}
#do
#./retrace.sh mapping.txt ${var} >> parse${var}
#done

⑶ android 混淆

其实不要混淆的主旨就在于混淆会改变方法的名字,类的名字,但是对于外部的一些引用是通过名字找到对应的方法,类,这些可能是通过string找到方法,类,但是string里的字段是不会进行混淆,所以还是会保留原来的名字,这样混淆过后通过原来的名字去找混淆后的名字,是肯定找不到,所以就会报出nosuchfileException,(对于gson,反射,jsbridge,第三方库都是这个原因),至于说枚举类型,我还暂时没懂 为什么,还望共同学习,一起成长。
文章是读了两篇博客写出来,也是自己总结,消化成自己的知识了,若有什么错误的地方,还望指出,相信读了这两篇文章之后你也会懂混淆,一个是如何混淆,一个是哪些该混淆,为什么不能混淆

-keepclasseswithmembernames class * { # 保持native方法不被混淆 native <methods>; }

-keep class * implements Android.os.Parcelable { # 保持Parcelable不被混淆 public static final Android.os.Parcelable$Creator *; }

发布一款应用除了设minifyEnabled为ture,你也应该设置zipAlignEnabled为true,像Google Play强制要求开发者上传的应用必须是经过zipAlign的,zipAlign可以让安装包中的资源按4字节对齐,这样可以减少应用在运行时的内存消耗。

原文: http://droidyue.com/blog/2016/07/10/understanding-android-obfuscated-code-by-proguard/

其实不要混淆的主旨就在于混淆会改变方法的名字,类的名字,但是对于外部的一些引用是通过名字找到对应的方法,类,这些可能是通过string找到方法,类,但是string里的字段是不会进行混淆,所以还是会保留原来的名字,这样混淆过后通过原来的名字去找混淆后的名字,是肯定找不到,所以就会报出nosuchfileException,(对于gson,反射,jsbridge,第三方库都是这个原因),至于说枚举类型,我还暂时没懂 为什么,还望共同学习,一起成长。
文章是读了两篇博客写出来,也是自己总结,消化成自己的知识了,若有什么错误的地方,还望指出,相信读了这两篇文章之后你也会懂混淆,一个是如何混淆,一个是哪些该混淆,为什么不能混淆

⑷ android 代码混淆算法有哪些

根据 SDK 的版本不同有 2 中不同的代码混淆方式,以上的 proguard.cfg 参数详解中所涉及到的信息是在较低版本 SDK 下的混淆脚本,事实上在高版本的 SDK 下混淆的原理和参数也与低版本的相差无几,只是在不同 SDK 版本的环境下引入混淆脚本的方式有所不同。具体方法如下:

低版本 SDK 下,项目中同时包含 proguard.cfg 和 project.properties 文件,则只需在 project.properties 文件末尾添加 proguard.config=proguard.cfg 再将项目 Export 即可。
高版本 SDK 下,项目中同时包含 proguard-project.txt 和 project.properties 文件,这时需要在 proguard-project.txt 文件中进行如下信息的配置,然后再将项目 Export 即可。下面以真实的文件进行演示说明。
复制代码
# This file is automatically generated by Android Tools.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must be checked in Version Control Systems.
#
# To customize properties used by the Ant build system edit
# "ant.properties", and override values to adapt the script to your
# project structure.
#
# 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

proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

# Project target.
target=android-16
复制代码
以上的配置信息即是 project.properties 文件中内容,蓝色文字为我们在代码混淆过程中需要添加的配置信息,其中:sdk.dir 为你在当前机器上 SDK 的安装路径。如果想保留某个包下的文件不被混淆,可以在 proguard-project.txt 文件中加入保留对应包名的语句即可。

复制代码
# To enable ProGuard in your project, edit project.properties
# to define the proguard.config property as described in that file.
#
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in ${sdk.dir}/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the ProGuard
# include property in project.properties.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html

# Add any project specific keep options here:

-dontwarn com.cnki.android.cnkireader.**
-keep class com.cnki.android.cnkireader.** { *; }

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the javaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
复制代码

⑸ android项目对apk进行混淆

    混淆apk是一个很基础的工作,博客上也有一堆介绍,本文提供一下这类工作的解决思路。在安卓源码下面和android studio里面的做法差异不大,本文以android源码举例。
    首先在对应mk文件里面添加proguard enabled的语句,系统有一个自带的build/core/proguard.flags,默认是使用这个文件,而且一般项目默认是关闭的,这也是有原因的。因为这里的proguard.flags是没有针对app的配置的,使用默认的混淆,app很有可能就不工作了。

    添加了mk文件修改之后,在Android.mk同级根目录创建本app自有的proguard.flags。新增内容如下,这里需要注意,网上很多demo,基本分为三部分,一部是保留app基础功能部分的内容不混淆;2是保持app对外接口,例如get、set、isxx、AIDL、public、native层的接口或者类;3.是第三方jar包或接口。混淆的基本原理就是将上诉类或接口进行统一简单字母的替换,如果改变了这些对外接口的名字,很有可能被别人使用的时候就找不到对应哦接口

    一些第三方的库如何不进行混淆,这个根据项目特点,可以自行搜索,比如网络的地图包什么的。
    然后是如何验证和解决混淆过程遇到的问题,因为是对接口名进行替换,如果出现混淆问题的话,log里面一定会有类似

这个时候只需要对相关接口进行例外(-keep)即可,然后用android-studio,直接打开或者dex2jar进行反解可以看到相关的接口是否被简单替换。

⑹ android 混淆 什么意思

Android代码混淆,是为了你的apk被他人反编译之后拿到源码,如果你混淆了,那反编译后的apk所有的java类都被改成了a.java/c.java之类的文件名,类里面的属性也变成abc之类的了,想拿到你的源码就不可能了,直接在gradle(app)文件的android节点下加上下边代码。

buildTypes{
release{
minifyEnabledfalse
('proguard-android.txt'),'proguard-rules.pro'
}
}

⑺ 对已经混淆的Android代码,如何进行反编译

android代码混淆是指安卓开发者或者组织为了防止自己的产品敏感信息或者技术机密被人破解,而在生成apk文件的时候,通过设置一些替换规则,使java文件中指定的代码类的名字或者成员名字变为没有任何意义的字母,然后编译成class文件的过程。

已经混淆过的android代码反编译出来的都是一些没有任何意义的名字,是很难读懂的。没有好的办法。

⑻ android如何将混淆代码还原

当混淆后的代码输出一个堆栈信息时,方法名是不可识别的,这使得调试变得很困难,甚至是不可能的。幸运的是,当ProGuard运行时,它都会输出一个<project_root>/bin/proguard/mapping.txt文件,而这个文件中包含了原始的类,方法和字段名被映射成的混淆名字。

retrace.bat脚本(Window)或retrace.sh脚本(Linux,Mac OS X)可以将一个被混淆过的堆栈跟踪信息还原成一个可读的信息。它位于<sdk_root>/tools/proguard文件夹中。执行retrace工具的语法如下:
retrace.bat|retrace.sh [-verbose] mapping.txt [<stacktrace_file>]

例如:
retrace.bat -verbose mapping.txt obfuscated_trace.txt
如果你没有指定<stacktrace_file>,retrace工具会从标准输入读取。

⑼ android代码混淆以及怎么判断一个apk代码是否被混淆过

1、proguard原理
java代码编译成二进制class文件,这个class文件也可以反编译成源代码,除了注释外,其他的code基本都可以看到。为了防止重要code被泄露,我们往往需要混淆,即把方法名,变量名,类名,包名等这些java元素的名称改成让人意想不到的名称,这样代码结构就没有变化,还可以运行,但是想弄懂代码的架构却很难。proguard就起到了这样的作用:
一、它可以分析一组class的结构,根据用户的配置,然后把这些class文件中可以混淆的java元素进行混淆

二、删除无效的代码

三、对代码进行优化(使用adt插件导出的apk,还进行zipalign优化)

缺省情况下,proguard会混淆所有代码,但是下面几种情况是不能改变java元素的名称,否则就会导致程序出错。
一、用到反射的地方(android中的api常用@hide注释掉,开发者在调用相应的方法时,需要用到反射)

二、当app的代码要依赖于系统的接口时,如被系统代码调用的回调方法,这种方法比较复杂

三、java元素名称是配置文件中配置好的

所以在使用proguard时,我们需要有个配置文件告诉proguard,哪些java元素是不能混淆的。

2、proguard配置

-dontwarn缺省proguard会检查每一个引用是否正确,但是第三方库里往往有些不会用到的类,没有正确引用,如果不配置的话,系统就会报错。

-keep指定的类和类成员被保留作为入口

-keepclassmembes指定的类成员被保留。

-keepclasswithmembers指定的类和类成员被保留,假如指定的类成员存在的话。

⑽ 写给Android 混淆小白的快速混淆方法

简单来说,Android 进行ProGuard,可以起到压缩,混淆,预检,优化的功能,虽然不能说更安全但还是一个不容忽视的环节。

首先在build.gradle 中将混淆的开关打开,即 minifyEnabled 置为 true

然后就要去proguard-rules.pro写入我们的混淆的规则(如文件其名),防止重要的类被混淆移除了。

省事第一步,先套个模板,就是找到网上博客上别人分享好的模板,像四大组件,主流开源库,JNI调用本地方法,R资源等的混淆规则都一般有了,注意一点就是套模板,也要套个时间比较近的,没有翻车的模板,可以能比较节省自己的时间,毕竟这么多行不一定能快速看出来,打个包出来才发现有问题就尴尬啦。

一般来说,用了混淆的模板后,我们还会有很多项目专属的需要混淆的部分,例如我们的自定义View,Json解析的实体类,反射用到的类,还有我们依赖的非主流的开源框架,SDK等等。
对于自定义View,很多的模板都会将继承与View的类用keep指令防止被混淆。有个偷懒的方法就是把自定义View 放入同一个包,再把这个包的类都写入混淆规则,就可以搞定了。
对于Json解析的实体类,反射用到的类都是同理可得,找到那些不能被移除的,把它们写入自己的混淆规则里面。

所以如果在做项目时,有提前想到要给项目做混淆的,在导入依赖时就顺手把对应混淆规则写了,那事后就快活似神仙了。

首先,先判断下它是否内置了混淆规则。如果不声明它的混淆规则也正常运行,说明已经它带了混淆。

但是生活往往不会一帆风顺,一般来说会有各种报错,所以还是需要对它声明混淆。

最简单的办法就是找到依赖的这个包,就这个包的类都写入混淆规则。例如:

项目里导入了一个非主流的开源库,然后我需要对它写入混淆规则,确保它能正常工作。

这时候不可以认为直接去使用它的地方,将有关它 import的类 keep class 就可以。

因为可能它内部还会使用包内其他类,所以最好仔细排查,最简(tou)单(lan)就是把这个包的类都 用 keep 指令,防止它们被混淆。如下所示:

一般来说就可以防止这个开源库里的类被混淆了。

例如

先使用 -libraryjars 命令 ,对导入的jar包和 so 文件进行声明保留它们。

如果依旧出错,尝试去External library文件夹 或者使用 这个SDK的地方 找到这个 SDK的包找到,并把这个包里的类 都用 keep 指令保持不被移除。如:

根据包名,写入混淆规则

一般来说,这样就可以避免这个SDK的类被混淆啦

好了,最后附上一份自己做的项目的混淆规则(伪模板)

阅读全文

与android混淆还原相关的资料

热点内容
命令方块如何喷方块 浏览:608
程序员都年薪几十万吗 浏览:210
台湾电影补课老师,强上女学生电影叫什么 浏览:131
浏览器加密套件 浏览:438
jsphp传参数 浏览:640
欧美电影推荐大尺码 浏览:375
微信文件夹找用户名 浏览:30
武动干坤同人小说免费阅读 浏览:616
怎么找小度语音app 浏览:160
车险具体折扣算法 浏览:367
时借时花app怎么找不到了 浏览:740
压缩图片500k 浏览:243
程序员笔记本选锐龙r7400u 浏览:353
服务器如何查看cpu配置 浏览:615
北京复盛压缩机 浏览:89
烟台汽车空调压缩机 浏览:389
pythonopencvdct 浏览:27
h3c接口配置命令 浏览:780
安卓手机怎么连接不上苹果耳机 浏览:153
怎么隐藏无线网手机app 浏览:932