首页
社区
课程
招聘
[原创]专治某推销面膜应用资源res被改成r,不能重新打包编译
发表于: 2015-6-29 15:19 12906

[原创]专治某推销面膜应用资源res被改成r,不能重新打包编译

2015-6-29 15:19
12906
某软件越做越臃肿,索要权限越来越多,偶就想聊聊天而已,你用不着分分钟定我的位,扫描我身边的wifi信息,统计我装了什么应用吧。

将资源文件夹res改名成r,资源文件名全部混淆,不知道是为了减小资源,还是防止二次打包。

Android M还没发布,还不能限制你的权限,所以只能自己动手修改程序,去除敏感权限啦。

对你这将res改名r的策略,apktool不好使了。只好自己动手,纯手工修正编译和反编译错误了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
java -jar apktool-cli.jar d [COLOR="Red"]-R r[/COLOR] -o out mianmo.apk
...
...
X:\tmp\apktool>dir out\res
 
 X:\tmp\apktool\out\res 的目录
 
2015-06-29  13:34    <DIR>          .
2015-06-29  13:34    <DIR>          ..
2015-06-29  13:34    <DIR>          anim
2015-06-29  13:34    <DIR>          animator
2015-06-29  13:34    <DIR>          color
2015-06-29  13:34    <DIR>          drawable
2015-06-29  13:34    <DIR>          drawable-en-hdpi
2015-06-29  13:34    <DIR>          drawable-hdpi
2015-06-29  13:34    <DIR>          drawable-land
2015-06-29  13:34    <DIR>          drawable-land-hdpi
2015-06-29  13:34    <DIR>          drawable-ldpi
2015-06-29  13:34    <DIR>          drawable-mdpi
2015-06-29  13:34    <DIR>          drawable-xhdpi
2015-06-29  13:34    <DIR>          drawable-xxhdpi
2015-06-29  13:34    <DIR>          drawable-xxxhdpi
2015-06-29  13:34    <DIR>          drawable-zh-rCN-hdpi
2015-06-29  13:34    <DIR>          drawable-zh-rTW-hdpi
...

 res文件夹回来啦!

使用http://bbs.pediy.com/showpost.php?p=1358864&postcount=5附件的aapt,重新打包编译。
1
2
3
4
5
6
7
8
9
X:\tmp\apktool>set AAPT_IGNORE_KEYWORDS=1
X:\tmp\apktool>java -jar apktool-cli.jar b -o new-mianmo.apk -a aapt-ignore-java-keywords.exe out
I: Using Apktool 2.0.0-b81aac-SNAPSHOT on out
I: Checking whether sources has changed...
I: Smaling smali folder into classes.dex...
I: Checking whether resources has changed...
I: Building resources...
I: Copying libs...
I: Building apk file...

安装运行,看到启动画面火星了,so far so good!
可以应付目前最新版本。

程序下载
http://pan.baidu.com/s/1hqgZ8OW

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费
支持
分享
最新回复 (8)
雪    币: 158
活跃值: (206)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
aapt只有windows版吗?
2015-6-29 16:37
0
雪    币: 94
活跃值: (2527)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
3
顶一个~!
2015-6-30 18:39
0
雪    币: 2676
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
目前只编译了windows版本,其它平台请自行编译,patch如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
diff --git a/tools/aapt/AaptAssets.cpp b/tools/aapt/AaptAssets.cpp
index d8e113a..68cfcce 100644
--- a/tools/aapt/AaptAssets.cpp
+++ b/tools/aapt/AaptAssets.cpp
@@ -1976,6 +1976,8 @@ status_t AaptSymbols::applyJavaSymbols(const sp<AaptSymbols>& javaSymbols)
     return err;
 }
  
+bool AaptSymbols::mIgnoreKeywords = false;
+
 // =========================================================================
 // =========================================================================
 // =========================================================================
diff --git a/tools/aapt/AaptAssets.h b/tools/aapt/AaptAssets.h
index 5cfa913..731acb7 100644
--- a/tools/aapt/AaptAssets.h
+++ b/tools/aapt/AaptAssets.h
@@ -377,9 +377,18 @@ public:
 class AaptSymbols : public RefBase
 {
 public:
-    AaptSymbols() { }
+    AaptSymbols() {
+        const char* p = getenv("AAPT_IGNORE_KEYWORDS");
+        if(p && p[0]){
+            setIgnoreKeywords(true);
+        }
+    }
     virtual ~AaptSymbols() { }
  
+    static void setIgnoreKeywords(bool value) {
+        mIgnoreKeywords = value;
+    }
+
     status_t addSymbol(const String8& name, int32_t value, const SourcePos& pos) {
         if (!check_valid_symbol_name(name, pos, "symbol")) {
             return BAD_VALUE;
@@ -473,7 +482,7 @@ public:
  
 private:
     bool check_valid_symbol_name(const String8& symbol, const SourcePos& pos, const char* label) {
-        if (valid_symbol_name(symbol)) {
+        if (mIgnoreKeywords || valid_symbol_name(symbol)) {
             return true;
         }
         pos.error("invalid %s: '%s'\n", label, symbol.string());
@@ -498,6 +507,7 @@ private:
         return mDefSymbol;
     }
  
+    static bool                                     mIgnoreKeywords;
     KeyedVector<String8, AaptSymbolEntry>           mSymbols;
     DefaultKeyedVector<String8, sp<AaptSymbols> >   mNestedSymbols;
     AaptSymbolEntry                                 mDefSymbol;
diff --git a/tools/aapt/Main.cpp b/tools/aapt/Main.cpp
index 977226b..fae19b1 100644
--- a/tools/aapt/Main.cpp
+++ b/tools/aapt/Main.cpp
@@ -59,6 +59,7 @@ void usage(void)
         " %s p[ackage] [-d][-f][-m][-u][-v][-x][-z][-M AndroidManifest.xml] \\\n"
         "        [-0 extension [-0 extension ...]] [-g tolerance] [-j jarfile] \\\n"
         "        [--debug-mode] [--min-sdk-version VAL] [--target-sdk-version VAL] \\\n"
+        "        [--ignore-keywords] \\\n"
         "        [--app-version VAL] [--app-version-name TEXT] [--custom-package VAL] \\\n"
         "        [--rename-manifest-package PACKAGE] \\\n"
         "        [--rename-instrumentation-target-package PACKAGE] \\\n"
@@ -138,6 +139,9 @@ void usage(void)
         "   --debug-mode\n"
         "       inserts android:debuggable=\"true\" in to the application node of the\n"
         "       manifest, making the application debuggable even on production devices.\n"
+        "   --ignore-keywords\n"
+        "       allows to use Java keywords in resource symbols. Set enviroment\n"
+        "       variable \"AAPT_IGNORE_KEYWORDS\" can also enable this feature.\n"
         "   --min-sdk-version\n"
         "       inserts android:minSdkVersion in to manifest.  If the version is 7 or\n"
         "       higher, the default encoding for resources will be in UTF-8.\n"
@@ -474,6 +478,8 @@ int main(int argc, char* const argv[])
             case '-':
                 if (strcmp(cp, "-debug-mode") == 0) {
                     bundle.setDebugMode(true);
+                } else if (strcmp(cp, "-ignore-keywords") == 0) {
+                    AaptSymbols::setIgnoreKeywords(true);
                 } else if (strcmp(cp, "-min-sdk-version") == 0) {
                     argc--;
                     argv++;
2015-7-1 09:44
0
雪    币: 1305
活跃值: (252)
能力值: ( LV12,RANK:240 )
在线值:
发帖
回帖
粉丝
5
楼主辛苦了
2015-7-13 09:09
0
雪    币: 4
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
小白求问如何在windows下编译aapt
2015-8-1 17:21
0
雪    币: 2676
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
没有在windows上折腾过。都是在linux上交叉编译,方便快捷。
2015-8-3 17:35
0
雪    币: 216
活跃值: (590)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
请问是哪个app?
2015-8-3 18:19
0
雪    币: 1305
活跃值: (252)
能力值: ( LV12,RANK:240 )
在线值:
发帖
回帖
粉丝
9
weixin啊
2015-8-8 09:02
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册
//