手记

HLQ逆向坎坷路 之 第二弹 修改包名以及玩个淫思奇巧(关于apk签名后再次签名)

前言

昨天我们简单玩转了关于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;

原文链接:http://www.apkbus.com/blog-904057-77741.html

0人推荐
随时随地看视频
慕课网APP