前言
昨天我们简单玩转了关于Android逆向工程之如何破解APK修改资源文件,原文地址如下:
HLQ逆向坎坷路 之 首战 看我破解APK修改资源文件
而今天,我们继续开启Android逆向之路第二弹,修改包名以及玩个流氓签名方式。
这里大家需要思考一个问题:
假设现在test.apk以及被签名,那么还能被签名么?
本文目标
阅读完本文,你我一起收获如下技能:
Android逆向工程之修改包名;
换个方式签名
开车
习惯了开车,一天不开出去溜达溜达,浑身燥痒~
首先,我们来编辑一个小Demo,本Demo具有如下特征:
Activity中提供Button方便界面跳转;
Activity中依旧设置默认显示文字以及图片内容。
一、修改包名
依旧按照原来的路子,具体分为如下几个步骤:
使用ApkTool解包;
修改Apk名称、Icon、默认文字以及图片。
完成之后进入我们今天正题:修改包名。
众所周知,修改后包名,也就是意味重新生成一个Apk。
那么,在解包生成的目录下找到AndroidManifest.xml,着手修改package以及对应引用。
这里注意,可使用Notepad++,进行全局替换,简单快捷~
接下来,打开解包生成的smali目录,修改根目录:
紧接着,继续修改smali中对原有路径的引用:
依次替换原有路径~ 见下图~
通过apktool进行回包:
对生成的包进行签名:
签名完成:
运行查看效果:
OK,修改包名到此结束。
这里LZ简单总结下:
解包之后修改主配置文件中AndroidManifest.xml中package以及对应引用;
修改smali目录下所有对之前包的引用。
切记,缺一不可~!否则会出现找不到Class。
二、对已签名的Apk签名
有的小伙伴说了,签名之后不能再签名。
我不服,你别管我用什么方式,我给你把已签名的文件在签名一次~~~
少年就是狂~~~
步骤如下:
将已签名APK修改后缀为ZIP;
打开压缩文件,删除META-INF目录;
将后缀改为apk再使用签名文件签名。
如下图:
之后再使用批处理文件进行签名,完成后运行,是不是很Nice?
简单说一下这里面取巧方式:
首先,我们查看这个META-INF目录下包含什么内容:
MANIFEST.MF:列出了apk的所有文件,以及这些文件内容所对应的base64-encoded SHA1 哈希值;
ANDROIDD.SF:签名文件
ANDROIDD.RSA:证书。
So,其中的过程则是我们通过移除META-INF使其变成一个未签名的Apk,之后通过签名进行重新签名。
这里需要注明一点,已签名的Apk文件不可再签名。
下面简单比较下已签名和未签名的Apk解压目录:
Smali解释
Smali,Baksmali分别是指安卓系统里的Java虚拟机(Dalvik)所使用的一种.dex格式文件的汇编器,反汇编器。
Android采用的是Java语言进行开发,但是Android系统有自己的虚拟机Dalvik,代码编译最终不是采用的Java的class,而是使用的Smali。我们反编译得到的代 码,jar的话可能很多地方无法正确的解释出来,如果我们反编译的是Smali则可以正确的理解程序的意思。
Smali语言是Davlik的寄存器语言,语法上和汇编语言相似。
以上说法可能都有点绕,这里找了一个比较通俗的解释:
Smali文件夹里面其实就是每个Java类所对应的Smali文件。 Android虚拟机Dalvik并不是执行Java虚拟机JVM编译后生成的class文件,而是执行再重新整合打包后生成的dex文件,dex文件反编译之后就是Smali代码,可以说,Smali语言是Dalvik的反汇编语言。
枉我泱泱大安卓,要学的是在是太多了~~~
参考资料
Android签名机制之—签名过程详解;
安卓逆向分析,为什么需要学习smali,直接反编译成java语言不就行了嘛?;
smali 语言语法;
Android逆向基础知识Smali;