逆向教程->anime radio逆向分析去广告(回编译错误分析)

原软件下载地址:百度anime radio,笔者下载的版本是3.25

同事是一个动漫粉,今天拿来一款动漫APP说这里有广告能不能去掉,耗流量。我就答应了,女同事嘛,你们懂得啦

工具:apktoolkit

反编译该app以后,先尝试着回编译,就会发现出现问题而无法回编译。


以下是笔者摘录的回编译失败信息:

->重建文件:anime radio.R.apk,请稍后...

java.exe -jar "F:\ApkToolkit\Bin\apktool.jar" b -f "C:\Users\Administrator\Desktop\anime radio" "C:\Users\Administrator\Desktop\anime radio.R.apk"

I: Smaling...

I: Building resources...

libpng error: Read Error

ERROR: Failure processing PNG image C:\Users\Administrator\Desktop\anime radio\res\drawable-hdpi\aaa_sams_fix.png

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:32: error: Public symbol drawable/aaa_sams_fix declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:3: error: Public symbol drawable/ad_bg declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:4: error: Public symbol drawable/bg_tile declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:33: error: Public symbol drawable/bottom_bg declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:10: error: Public symbol drawable/btn_menu declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:11: error: Public symbol drawable/btn_pause declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:34: error: Public symbol drawable/btn_pause_norm declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:35: error: Public symbol drawable/btn_pause_press declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:12: error: Public symbol drawable/btn_play declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:36: error: Public symbol drawable/btn_play_norm declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:37: error: Public symbol drawable/btn_play_press declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:13: error: Public symbol drawable/btn_rec declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:38: error: Public symbol drawable/btn_rec_norm declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:39: error: Public symbol drawable/btn_rec_press declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:14: error: Public symbol drawable/btn_widget_next declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:15: error: Public symbol drawable/btn_widget_pause declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:16: error: Public symbol drawable/btn_widget_play declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:17: error: Public symbol drawable/btn_widget_prev declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:5: error: Public symbol drawable/default_image declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:6: error: Public symbol drawable/divider declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:62: error: Public symbol drawable/flag_es declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:63: error: Public symbol drawable/flag_fr declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:64: error: Public symbol drawable/flag_it declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:65: error: Public symbol drawable/flag_ru declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:66: error: Public symbol drawable/flag_uk declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:67: error: Public symbol drawable/flag_us declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:40: error: Public symbol drawable/frame declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:24: error: Public symbol drawable/ic_launcher declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:29: error: Public symbol drawable/ic_menu_moreoverflow_normal_holo_dark declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:30: error: Public symbol drawable/ic_menu_moreoverflow_normal_holo_light declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:41: error: Public symbol drawable/ic_star_off declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:42: error: Public symbol drawable/ic_star_on declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:26: error: Public symbol drawable/ic_stat_next declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:25: error: Public symbol drawable/ic_stat_play declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:27: error: Public symbol drawable/ic_stat_prev declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:28: error: Public symbol drawable/ic_stat_stop declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:31: error: Public symbol drawable/ic_url declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:7: error: Public symbol drawable/image_frame declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:18: error: Public symbol drawable/main_bg declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:43: error: Public symbol drawable/mediacontroller_bg declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:44: error: Public symbol drawable/mediacontroller_pause01 declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:45: error: Public symbol drawable/mediacontroller_pause02 declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:19: error: Public symbol drawable/mediacontroller_pause_button declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:46: error: Public symbol drawable/mediacontroller_play01 declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:47: error: Public symbol drawable/mediacontroller_play02 declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:20: error: Public symbol drawable/mediacontroller_play_button declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:21: error: Public symbol drawable/mediacontroller_seekbar declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:48: error: Public symbol drawable/mediacontroller_seekbar01 declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:49: error: Public symbol drawable/mediacontroller_seekbar02 declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:22: error: Public symbol drawable/mediacontroller_seekbar_thumb declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:50: error: Public symbol drawable/menu_separator declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:23: error: Public symbol drawable/tab_button declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:8: error: Public symbol drawable/tab_sel_bg declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:9: error: Public symbol drawable/top_bg declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:51: error: Public symbol drawable/widget_bg_new declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:52: error: Public symbol drawable/widget_next_norm declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:53: error: Public symbol drawable/widget_next_press declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:54: error: Public symbol drawable/widget_pause_norm declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:55: error: Public symbol drawable/widget_pause_press declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:56: error: Public symbol drawable/widget_play_norm declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:57: error: Public symbol drawable/widget_play_press declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:58: error: Public symbol drawable/widget_prev_norm declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:59: error: Public symbol drawable/widget_prev_press declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:60: error: Public symbol drawable/widget_preview declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:61: error: Public symbol drawable/widget_underline declared here is not defined.

Exception in thread "main" brut.androlib.AndrolibException: brut.androlib.AndrolibException: brut.common.BrutException: could not exec command: [aapt, p, --min-sdk-version, 7, --target-sdk-version, 17, -F, C:\Users\ADMINI~1\AppData\Local\Temp\APKTOOL401721341479758844.tmp, -0, arsc, -I, C:\Users\Administrator\apktool\framework\1.apk, -S, C:\Users\Administrator\Desktop\anime radio\res, -M, C:\Users\Administrator\Desktop\anime radio\AndroidManifest.xml]

at brut.androlib.Androlib.buildResourcesFull(Androlib.java:358)

at brut.androlib.Androlib.buildResources(Androlib.java:283)

at brut.androlib.Androlib.build(Androlib.java:206)

at brut.androlib.Androlib.build(Androlib.java:176)

at brut.apktool.Main.cmdBuild(Main.java:228)

at brut.apktool.Main.main(Main.java:79)

Caused by: brut.androlib.AndrolibException: brut.common.BrutException: could not exec command: [aapt, p, --min-sdk-version, 7, --target-sdk-version, 17, -F, C:\Users\ADMINI~1\AppData\Local\Temp\APKTOOL401721341479758844.tmp, -0, arsc, -I, C:\Users\Administrator\apktool\framework\1.apk, -S, C:\Users\Administrator\Desktop\anime radio\res, -M, C:\Users\Administrator\Desktop\anime radio\AndroidManifest.xml]

at brut.androlib.res.AndrolibResources.aaptPackage(AndrolibResources.java:357)

at brut.androlib.Androlib.buildResourcesFull(Androlib.java:336)

... 5 more

Caused by: brut.common.BrutException: could not exec command: [aapt, p, --min-sdk-version, 7, --target-sdk-version, 17, -F, C:\Users\ADMINI~1\AppData\Local\Temp\APKTOOL401721341479758844.tmp, -0, arsc, -I, C:\Users\Administrator\apktool\framework\1.apk, -S, C:\Users\Administrator\Desktop\anime radio\res, -M, C:\Users\Administrator\Desktop\anime radio\AndroidManifest.xml]

at brut.util.OS.exec(OS.java:89)

at brut.androlib.res.AndrolibResources.aaptPackage(AndrolibResources.java:355)

... 6 more

->重建.apk失败!

建议:请尝试手动运行Bin目录下的BuildApk.exe来重建.apk!

---------------------------------------------------------------------------------------↑

由上文可以知道,回编译出错的地方是在:

ERROR: Failure processing PNG image C:\Users\Administrator\Desktop\anime radio\res\drawable-hdpi\aaa_sams_fix.png

上文的意思大概是:处理png图像信息失败。

在手头没有工具的情况下如何修复?删了就是- -

将apk包中的\drawable-hdpi\aaa_sams_fix.png文件删除之后回编译的提示:

->重建文件:anime radio.R.apk,请稍后...

java.exe -jar "F:\ApkToolkit\Bin\apktool.jar" b -f "C:\Users\Administrator\Desktop\anime radio" "C:\Users\Administrator\Desktop\anime radio.R.apk"

I: Smaling...

I: Building resources...

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:32: error: Public symbol drawable/aaa_sams_fix declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:61: error: Public entry identifier 0x7f020040 entry index is larger than available symbols (index 64, total symbols 64).

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:61: error: Public symbol drawable/widget_underline declared here is not defined.

Exception in thread "main" brut.androlib.AndrolibException: brut.androlib.AndrolibException: brut.common.BrutException: could not exec command: [aapt, p, --min-sdk-version, 7, --target-sdk-version, 17, -F, C:\Users\ADMINI~1\AppData\Local\Temp\APKTOOL4809949198112169441.tmp, -0, arsc, -I, C:\Users\Administrator\apktool\framework\1.apk, -S, C:\Users\Administrator\Desktop\anime radio\res, -M, C:\Users\Administrator\Desktop\anime radio\AndroidManifest.xml]

at brut.androlib.Androlib.buildResourcesFull(Androlib.java:358)

at brut.androlib.Androlib.buildResources(Androlib.java:283)

at brut.androlib.Androlib.build(Androlib.java:206)

at brut.androlib.Androlib.build(Androlib.java:176)

at brut.apktool.Main.cmdBuild(Main.java:228)

at brut.apktool.Main.main(Main.java:79)

Caused by: brut.androlib.AndrolibException: brut.common.BrutException: could not exec command: [aapt, p, --min-sdk-version, 7, --target-sdk-version, 17, -F, C:\Users\ADMINI~1\AppData\Local\Temp\APKTOOL4809949198112169441.tmp, -0, arsc, -I, C:\Users\Administrator\apktool\framework\1.apk, -S, C:\Users\Administrator\Desktop\anime radio\res, -M, C:\Users\Administrator\Desktop\anime radio\AndroidManifest.xml]

at brut.androlib.res.AndrolibResources.aaptPackage(AndrolibResources.java:357)

at brut.androlib.Androlib.buildResourcesFull(Androlib.java:336)

... 5 more

Caused by: brut.common.BrutException: could not exec command: [aapt, p, --min-sdk-version, 7, --target-sdk-version, 17, -F, C:\Users\ADMINI~1\AppData\Local\Temp\APKTOOL4809949198112169441.tmp, -0, arsc, -I, C:\Users\Administrator\apktool\framework\1.apk, -S, C:\Users\Administrator\Desktop\anime radio\res, -M, C:\Users\Administrator\Desktop\anime radio\AndroidManifest.xml]

at brut.util.OS.exec(OS.java:89)

at brut.androlib.res.AndrolibResources.aaptPackage(AndrolibResources.java:355)

... 6 more

->重建.apk失败!

建议:请尝试手动运行Bin目录下的BuildApk.exe来重建.apk!

-------------------------------------------------------------------------------------↑

发现apk回编译时的错误信息大幅度减少了,那我们接下来查看:

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:32: error: Public symbol drawable/aaa_sams_fix declared here is not defined.

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:61: error: Public entry identifier 0x7f020040 entry index is larger than available symbols (index 64, total symbols 64).

C:\Users\Administrator\Desktop\anime radio\res\values\public.xml:61: error: Public symbol drawable/widget_underline declared here is not defined.

从上面三行代码中我们可以判断出出错的三个关键字:

\res\values\public.xml文件中的:aaa_sams_fix、 0x7f020040、widget_underline

我们进入该文件搜索相关的信息



我们可以发现三条信息集中指向的两个位置

    <public type="drawable" name="widget_underline" id="0x7f020040" />

    <public type="drawable" name="aaa_sams_fix" id="0x7f020000" />

那么我们将这两条信息删除即可。重新回编译:

->重建文件:anime radio.R.apk,请稍后...

java.exe -jar "F:\ApkToolkit\Bin\apktool.jar" b -f "C:\Users\Administrator\Desktop\anime radio" "C:\Users\Administrator\Desktop\anime radio.R.apk"

I: Smaling...

I: Building resources...

aapt: warning: string 'menu' has no default translation in C:\Users\Administrator\Desktop\anime radio\res; found: zh_CN zh_HK zh_TW

I: Copying libs...

I: Building apk file...

->重建.apk成功!

------------------------------------------------------↑

我们成功处理好了回编译问题后,接着开始处理去广告的事情。

在反编译包中的:Androidmianfest.xml中我发现了这样一个activity

        <activity android:name="com.google.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" />

根据他的Android:name发现,这个好像就是谷歌的广告。

在去广告时:一般情况下,将Androidmianfest中的广告activity声明类去掉就行了。也有部分app的广告需要修改到Dalvik代码。

这款软件直接删去他的activity启动类就不会有广告出现了,当然也不耗流量。

-----------------------------------------

本篇文章重点介绍的是处理回编译失败问题,广告去除会在以后的文章中专门写一篇。

我的老师,教师节快乐。

                                                                                                                                 2014.09.10 Sarkozy















编译工具包 下载后的操作步骤 Android APK编译 未做测试全是最新工具包,另附已经做过测试的工具包,部分是旧工具,自己可替换 http://download.csdn.net/detail/haoqinghua/5500751 一、Apk编译得到Java源代码 下载反编译工具包,打开apk2java目录下的dex2jar-0.0.9.9文件夹,内含apk编译成java源码工具,以及源码查看工具。 dex2jar:apk编译工具 ,是将apk中的classes.dex转化成jar文件 jdgui:源码查看工具,是一个反编译工具,可以直接查看反编译后的jar包源代码 具体步骤: 首先将apk文件后缀改为zip并解压,得到其中的classes.dex,它就是java文件编译再通过dx工具打包而成的,将classes.dex复制到dex2jar.bat所在目录dex2jar-0.0.9.9文件夹。 在命令行下定位到dex2jar.bat所在目录,运行 dex2jar.bat classes.dex 生成 classes_dex2jar.jar 然后,进入jdgui文件夹双击jd-gui.exe,打开上面生成的jar包classes_dex2jar.jar,即可看到源代码 二、apk编译生成程序的源代码和图片、XML配置、语言资源等文件 如果是汉化软件,这将特别有用 首先还是要下载此反编译工具包,其中包含最新的apktool 1.5 具体步骤: 下载反编译工具包,打开apk2java目录下的apktool1.4.1文件夹,内含三个文件:aapt.exeapktool.bat,apktool.jar 注:里面的apktool_bk.jar是备份的老版本,最好用最新的apktool.jar 在命令行下定位到apktool.bat文件夹,输入以下命令:apktool.bat d -f abc123.apk abc123, apktool.bat 命令行解释:apktool.bat d -f [apk文件 ] [输出文件夹] 反编译的文件如下(AndroidManifest.xml为例): 将反编译完的文件重新打包成apk,很简单,输入apktool.bat b abc123(你编译出来文件夹)即可,命令如下: 打包apk后的文件在目录C:\HelloAndroid下,生成了两个文件夹: build dist 三、 图形化反编译apk 上述步骤一、二讲述了命令行反编译apk,现在提供一种图形化反编译工具:Androidfby 首先,下载上述反编译工具包,打开Androidfby目录,双击Android编译工具.exe,就可以浏览打开要反编译apk
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值