前言

最近在某乎上有人在问我如何将打好的包更改包名。了解我的同学大概都知道,我喜欢自己动手做实验,再将自己的方式分享给大家,这次我选择了一个阅读类型app,随机选的。先看效果

如何做到的呢,那就把我的思路分享给大家。
ps:侵删!仅供个人学习使用,不适宜商用。

准备工作

咪咕阅读v7.1.1app
apktool
一个编辑器,(我用vscode装了smali高亮插件)

思路

  • 利用apktool拆包咪咕阅读
  • 首先更改AndroidManifest.xml里面的包名
  • 全局更改com.xxx.xxxx类似的包名
  • 全局更改smali类型代码的包名字符串Lcom/xxx/xxxx
  • 全局更改所有com/xxx/xxxx文件夹的名称,因为java文件里面要求包名和文件夹路径要对应
  • 更改删除app原本的包名或签名校验相关smali代码
  • apktool b打包apk
  • jarsigner 签名 ,安装apk

开始逆向

拆包

apktool d com.ophone.reader.ui_7.1.1_129.apk

更改包名

在AndroidMaifest.xml里面我们发现他的包名是 com.ophone.reader.ui
我就把我的包名改成com.ophone.reader.ui01吧

将所有com.ophone.reader.ui替换成com.ophone.reader.ui01

更改smali的包名

将所有Lcom/ophone/reader/ui替换成
Lcom/ophone/reader/ui01

更改文件夹名称

更改所有com/ophone/reader/ui 的ui文件夹名为ui01
ps:其实以上三步可以写成程序吧,大体思路都是关于文件的读写,还有重命名等

开始打包

更改完了app的包名准备打包,

apktool b com.ophone.reader.ui_7.1.1_129

打好的包我的路径在
com.ophone.reader.ui_7.1.1_129/dist里面,
看到了我们逆向动了手脚的apk了

然后签名执行以下命令

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore "MartinHanKey.jks" -signedjar _signed.apk ".\com.ophone.reader.ui01_7.1.1_129.apk" "MartinHan"

以上命令我就不解释了,可以具体自己查询。

运行

开始运行了,发现有如下问题,如图

很明显啊,开发者加了签名校验,或者包名校验。

思路

后来我搜索了如下字符串“你安装版本xxxx”搜到了如下字符串

<string name="check_sign_notice">您安装的版本不是官方版,建议您访问wap.cmread.com官网下载安装(注意:安装新版本需卸载当前版本)</string>

跟着这个name=check_sign_notice在public.xml里面看到了这个

<public type="string" name="check_sign_notice" id="0x7f0701bf" />

由此可见,其实他的id就是7f0701bf。
继续全局搜索这个id我在WelcomePageActivity里面发现了如下代码,这段代码比较关键,需要我们细细研读。

    #这里调用了setContentView方法invoke-virtual {p0, v0}, Lcom/cmread/bplusc/bookshelf/WelcomePageActivity;->setContentView(Landroid/view/View;)V#这里调用了com.cmread.bplusc.layout.as类的a方法,将结果传入v0,也就是根据这个#v0来判断下面的条件.line 171invoke-static {p0}, Lcom/cmread/bplusc/layout/as;->a(Landroid/content/Context;)Zmove-result v0#根据刚才的结果进行跳转if-nez v0, :cond_3#设置了WelcomePageActivity的E变量.line 172iput-boolean v4, p0, Lcom/cmread/bplusc/bookshelf/WelcomePageActivity;->E:Z#下面的就不具体解释了,其实就是创建了那个对话框.line 173iget-object v0, p0, Lcom/cmread/bplusc/bookshelf/WelcomePageActivity;->g:Landroid/content/Context;.line 175invoke-virtual {p0}, Lcom/cmread/bplusc/bookshelf/WelcomePageActivity;->getResources()Landroid/content/res/Resources;move-result-object v2#这就是那一段提示非官方版的文字const v3, 0x7f0701bfinvoke-virtual {v2, v3}, Landroid/content/res/Resources;->getString(I)Ljava/lang/String;move-result-object v2.line 176invoke-virtual {p0}, Lcom/cmread/bplusc/bookshelf/WelcomePageActivity;->getResources()Landroid/content/res/Resources;move-result-object v3const v4, 0x7f070278invoke-virtual {v3, v4}, Landroid/content/res/Resources;->getString(I)Ljava/lang/String;move-result-object v3.line 177invoke-virtual {p0}, Lcom/cmread/bplusc/bookshelf/WelcomePageActivity;->getResources()Landroid/content/res/Resources;move-result-object v4const v5, 0x7f070156invoke-virtual {v4, v5}, Landroid/content/res/Resources;->getString(I)Ljava/lang/String;move-result-object v4new-instance v5, Lcom/cmread/bplusc/bookshelf/hu;invoke-direct {v5, p0}, Lcom/cmread/bplusc/bookshelf/hu;-><init>(Lcom/cmread/bplusc/bookshelf/WelcomePageActivity;)Vnew-instance v6, Lcom/cmread/bplusc/bookshelf/hw;invoke-direct {v6, p0}, Lcom/cmread/bplusc/bookshelf/hw;-><init>(Lcom/cmread/bplusc/bookshelf/WelcomePageActivity;)Vnew-instance v7, Lcom/cmread/bplusc/bookshelf/hx;invoke-direct {v7, p0}, Lcom/cmread/bplusc/bookshelf/hx;-><init>(Lcom/cmread/bplusc/bookshelf/WelcomePageActivity;)V.line 173invoke-static/range {v0 .. v8}, Lcom/cmread/uilib/dialog/h;->a(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/cmread/uilib/dialog/CommonReaderDialog$a;Lcom/cmread/uilib/dialog/CommonReaderDialog$a;Lcom/cmread/uilib/dialog/CommonReaderDialog$b;Z)Lcom/cmread/uilib/dialog/CommonReaderDialog;goto/16 :goto_0..............................# goto_0具体位置代码如下,其实就是调用了父类的方法onKeyDown,然后就return了。.line 1071:cond_0:goto_0invoke-super {p0, p1, p2}, Lcom/cmread/uilib/activity/CMActivity;->onKeyDown(ILandroid/view/KeyEvent;)Zmove-result v0:goto_1return v0

到此为止,我们了解了以上的方法,就知道了,关键点就在于if-nez v0, :cond_3,
现在吧if-nez改成if-eqz,然后再次打包运行
如图:

写在结尾

一切都彻底搞定啦,打到了本文章开始的效果,咪咕阅读双开,更改了他的包名,而且还过了校验。

关于我

个人博客:MartinHan的小站
知乎:MartinHan01

Android逆向之路---改apk包名、达到多开效果相关推荐

  1. 获取安卓应用APK包名的方法

    应用商店按照符合Android标准的原则进行设计,使用包名(Package Name)作为应用的唯一标识.即:包名必须唯一,一个包名代表一个应用,不允许两个应用使用同样的包名.包名主要用于系统识别应用 ...

  2. (转)[Android] 利用 ant 脚本修改项目包名

    [Android] 利用 ant 脚本修改项目包名在开发android应用项目的时候,经常会有这样的需求,一个应用项目,要求 房价上半年下行 下半年或回暖 在不同的OEM下有不同的包名,不同的资源,不 ...

  3. Android文件夹路径/data/data/包名/

    文件之获取文件夹路径/data/data/ 应用程序在运行的过程中如果需要向手机上保存数据,一般是把数据保存在SDcard中的. 大部分应用是直接在SDCard的根目录下创建一个文件夹,然后把数据保存 ...

  4. android 漫画切换,Android逆向之路---让我们试试另一种方法看漫画-(2)

    前言 上次我们分析到了快看漫画的协议部分,这次我们根据他的协议来手动写个脚本,然后执行以后,可以把他的漫画自动下载到电脑上面, 然后自动拼接图片,这样就可以实现在电脑上当成一个长图来看漫画了,没有广告 ...

  5. android 11兼容适配之根据包名查看是否安装第三方应用

    android 11兼容适配之根据包名查看是否安装第三方应用 本文介绍android 11的兼容性适配之一的根据包名唤起第三方应用功能.包括但不限于(支付宝.微信.QQ.微博.百度地图.高德地图.腾讯 ...

  6. Android studio修改项目名称和包名

    Android studio修改项目名称和包名 (android studio v2021) 如想要修必包的名称,包的名称是和项目中的文件夹一致的,所有一般会有空的目录(com.xxx.yyy.zzz ...

  7. Android逆向之路---脱壳360加固原理解析

    前言 众所周知,上次说到了如何脱壳360加固,大致意思就是安装一个xposed插件,然后自动就会脱壳了,那么这个插件是如何工作的呢,本次重点说说这个. 上次说道了dumpDex脱壳360加固,其实先说 ...

  8. android adb apk包名,ADB命令简单使用--查看包名、activity等

    1.连接设备 adb connect ip 2.查看连接的设备 adb devices 3.安装/卸载Android 应用 adb install packagesname adb uninstall ...

  9. Android之在linux终端执行shell脚本文件(通过aapt)得到apk包名

    1.问题 我们在ubuntu上经常想看到apk的包名,然后在终端通过pidcat.py packageName 过滤日志,我们常用的办法手机连接电脑,然后打开这个app adb shell dumps ...

最新文章

  1. 软件工程第二周阅读作业
  2. Java知识系列 -- 反射
  3. dnslog 在 sql注入中的应用
  4. 代码对比与文件对比的一个简单方法
  5. MySQL之IFNULL()、ISNULL、NULLIF用法
  6. python的内存管理机制及调优手段_Python的内存管理机制及调优手段?
  7. python爬虫--爬取豆瓣top250电影名
  8. activemq spring 集成与测试
  9. Mac电脑C盘空间不足怎么办?
  10. bnuoj 29065 鸣人的查克拉
  11. 拓嘉辰丰电商:拼多多所属哪种电商模式
  12. 《基本控制结构》-小组作业 (1~10)
  13. 移动直播初露锋芒,能否成为社交的下一个风口?
  14. [GO项目]开源免费在线客服系统-真正免费开源-GOFLY0.3.2发布-极简强大Go语言开发网页客服...
  15. windows系统下redis安装以及设置redis开机自启动方法教程
  16. 学习Linux的第五课时
  17. 打灰太狼oc核心代码实现
  18. 电子电路2-CAD4-(4-35)
  19. java搭建直播平台_直播平台简单搭建笔记
  20. 国科大人工智能学院《计算机视觉》课 —ޮ典型视觉应用和系统

热门文章

  1. MapReduce程序调整Map/Reduce task内存参数
  2. 教你如何组建家庭卡拉OK系统
  3. 谷歌浏览器突然不能翻译成中文了,怎么解决?(谷歌无法翻译,最新)
  4. Django 自定义404页面
  5. BAT常问面试题JVM
  6. WeMall:一元超值购,购惊喜,够时尚!
  7. 【QCA】ubuntu1804 与 QSDK 编译环境适配问题
  8. 中国科技网 CSTNET
  9. YouTube 架构学习体会
  10. 【WLAN】【测试】WPS测试方法小结