apk反编译获取完整源码及apk反编译后的处理
⼀、⼯具准备:apktool , dex2jar , jd-gui
⼆、使⽤dex2jar + jd-gui 得到apk的java源码
1.⽤解压⼯具从 apk包中取出 classes.dex ⽂件
⽤命令(dex2jar.bat classes.dex)得到⼀个 jar⽂件
2.⽤jd-gui反编译⼯具将得到.jar⽂件反编译成.java⽂件
三、使⽤apktool得到apk的xml⽂件
1.⽤命令(apktool d xxx.apk xxx_xml)反编译xxx.apk包
2.从 xxx_xml ⽂件夹得到xml⽂件
四、第⼆步 得到的程序源代码 和 第三步 得到的xml⽂件组合下,即可得到完整的apk源码。
五、应⽤: /去⼴告,加 values-zh-rCN, values-zh-rTW, values-de, values-fr
1.在步骤三的⽂件夹xxx_xml/res/ 下, 建⽂件夹: values-zh-rCN,values-zh-rTW
2.1复制l 到  values-zh-rCN 并翻译.
2.2 去⼴告见;
3.重建APK,⽤命令(apktool b xxx) ,输出到ABC/dist/out.apk
或命令( apktool b xxx out.apk)
六、重新打包 和 签名
======================================================
1) apk应⽤程序
apk就是 把 反编译之后apk 下的res/values⽂件夹内l⽂件的内容 (注意:我们的例⼦⾥ 只有⼀个l,有时候 可能 不⽌ ⼀个 *xml ⽂件,那么 我们 需要把 相应的 位置 都)。
⼀个apk应⽤在后应该能在英⽂和中⽂系统下都能使⽤。/values⽬录下的是英⽂语⾔包。为了建
⼀个中⽂语⾔包,与/values并⾏创建⼀个⼦⽂件夹:/values-zh-rCN(必须⽤这个⽂件名!)。这⾥values-zh是中国地区语⾔包(包含港澳台及内地),values-zh-rCN是中⽂简体语⾔包(只包含内地),values-zh-rTW是中⽂繁体语⾔包(港澳台)。把/values⽂件夹⾥的l等语⾔⽂件复制进/values-zh-rCN。在我们的例⼦中,只有l⼀个⽂件。
进⼊/values-zh-rCN,⽤⽂本编辑器打开l,然后你就翻译吧,把英⽂描述译成相应的中⽂。
⾼级内容:以上的是修改l,把英⽂译成相应的中⽂就好了,然后打包和签名。但是,在有些apk⽂件⾥,所显⽰的字符⽂字并不都在xml⽂件⾥。apk原作者把某些字符写在代码中。反编译后,存放在/smali⽂件夹⾥。⼀层⼀层地下去,最后你会看到⼀⼤堆Dalvik码⽂件,都是以.smali为⽂件扩展名。举⼀个例⼦,⽤⽂本编辑器打开某个.smali⽂件,看到:
const-string v5, "ServiceMode"
“ServiceMode”会在apk执⾏时显⽰为英⽂。因此,需要。在I897 ROM⾥,⽤⼯程模式特殊代码看到的多半属于这⼀类。汉译起来⾮常花时间。我们要把ServiceMode译成“服务模式”。怎么处理呢?你不能把const-string v5, "ServiceMode"直接改成const-string v5, "服务模式"。打包会失败的。正确的做法是把相应的中⽂字符⽤16进制的unicode来表⽰。例如:把“服务模式”⽤16进制的unicode表⽰就是\u670d\u52a1\u6a21\u5f0f 。每⼀个汉字⽤4个字符表⽰,\u表⽰为16进制的unicode码。好了,正确
的汉译是:
const-string v5, "\u670d\u52a1\u6a21\u5f0f "
⽹上有中⽂字符与16进制unicode码的对照表或转换⼯具。
2) 修改图标标签
每⼀个apk⽂件都有⼀个“图标标签”。将apk程序安装进⼿机后,在图标下⾯显⽰图标标签⽂字。这个图标标签的内容是可以修改的。在\res\values下到l,修改其中的⼀⾏:
<string name="app_name">图标标签</string>
例如:<string name="app_name">静⾳启动</string>
同理,如果是窗⼝⼩插件,要修改widget_name。
3) 去掉apk中的⼴告
有很多apk应⽤都带有⼴告。为了去掉程序中的⼴告,要修改l⽂件与⼴告有关的内容。在/res⽬录下到⽂件l。通常在/layout⽬录下,有时也被放在其它⽬录下。甚⾄,有时不存在main.
xml⽂件,⼴告⾏被放在其它xml⽂件内。只能细⼼逐个⽂件进⾏查。⽆论哪⼀种情况,查看其内容,你会看到有⼀项类似的命令如下。这就是⼴告显⽰。
<com.admob.android.ads.AdView android:id=”@id/ad” android:layout_width=”fill_parent”
android:layout_height=”wrap_content” admobsdk:backgroundColor=”#ff000000″
admobsdk:textColor=”#ffffffff” admobsdk:keywords=”Android application” />
将其改为:
xml文件怎么打开<com.admob.android.ads.AdView android:id=”@id/ad” android:layout_width=”0.0dip”
android:layout_height=”0.0dip” admobsdk:backgroundColor=”#ff000000″
admobsdk:textColor=”#ffffffff” admobsdk:keywords=”Android application” />
可以看到,关键是要把fill_parent改为0.0dip,把wrap_content改为0.0dip,其它内容保持不变即可。这种改法就是不给⼴告显⽰空间,当然你就看不到⼴告了。