记一次还未成功的反编译锤子桌面APP

更新信息时间
《记一次还未成功的反编译锤子桌面APP》20171129
暴力替换数据库更新item信息20171201

暴力替换数据库更新item信息

在之前的分析过程中得知,只要更新数据库的数据,其中设置messageNumber就是角标数,那现在直接取出laucher.db然后手动更新它再替换回去。看是不是会有效果

工具版本
谷歌N67.0.1
smartisan_launcher_v1.5.1.apk1.5.1
Navicat Premium11.1.13

一、导出launcher.db数据库
1.文件存在/data/data/com.smartisans.home/databases/launcher.db,将其导出至电脑(需要root)。

2.修改表(table_iteminfos)中的数据,将其改为你想要的数字,然后重新将launcher.db保存,导入手机重新替换原来的db文件。

3.打开锤子桌面即可看到效果了~


《记一次还未成功的反编译锤子桌面APP》

锤子科技很早就已经发布了“锤子桌面”这款APP,我反编译这个APP源于“角标”适配。锤子除了系统APP有角标之外,单独为微信、应用宝适配了角标。太讨厌了。本次反编译没有取得实质的成果,如果想要成果的可以不用往下看了。

一、工具列表

名称版本下载链接
smartisan_launcher_v1.5.1.apk1.5.1官方
apktool_2.3.0.jar2.3.0官方
dex2jar2.0官方

二、开始反编译

1.使用apktool反编译,直接报错,但是会反编译好AndroidManifest.xml文件,这样可以看到一些静态注册的广播。优先找静态注册的广播是因为多数机型角标的原理是发送广播,由launcher程序接收并更新icon。

2.直接搜索“receiver”关键词查找静态注册的广播,找到两个广播:

<receiver android:name="com.smartisanos.launcher.receiver.LauncherReceiver">
    <intent-filter>
        <action android:name="android.intent.action.EXTERNAL_APPLICATIONS_AVAILABLE"/>
        <action android:name="android.intent.action.EXTERNAL_APPLICATIONS_UNAVAILABLE"/>
    </intent-filter>
    <intent-filter>
        <action android:name="com.android.launcher.action.INSTALL_SHORTCUT"/>
        <action android:name="com.smartisanos.launcher.shortcut_removed"/>
    </intent-filter>
    <intent-filter>
        <action android:name="smartisan.intent.action.LAUNCHER_SETTINGS_CHANGED"/>
    </intent-filter>
    <intent-filter>
        <action android:name="com.smartisanos.launcher.update_icon"/>
    </intent-filter>
    <intent-filter>
        <action android:name="com.smartisanos.launcher.SORT_ICON"/>
    </intent-filter>
    <intent-filter>
        <action android:name="com.smartisanos.COLOR_THEME_CHANGED"/>
    </intent-filter>
    <intent-filter>
        <action android:name="com.smartisan.push.MESSAGE_RECEIVE"/>
        <data android:mimeType="vnd.com.smartisanos.launcher/*"/>
    </intent-filter>
    <intent-filter>
        <action android:name="com.android.providers.downloads.ACTION_SYNC_DATA_FINISH"/>
    </intent-filter>
    <intent-filter>
        <action android:name="android.intent.action.DOWNLOAD_COMPLETE"/>
    </intent-filter>
    <intent-filter>
        <action android:name="smartisan.alarm.upload.tracker"/>
    </intent-filter>
</receiver>
<receiver android:name="com.smartisanos.launcher.receiver.DataDumpReceiver">
    <intent-filter>
        <action android:name="com.smartisanos.launcher.datadump"/>
        <action android:name="launcher.dumpsurfaceview"/>
    </intent-filter>
</receiver>

3.解压apk文件,获取class.dex文件,利用dex2jar反编译为jar包,再利用jd-gui查看源码。首先一点就是直接找上述两个广播。只有LauncherReceiver.java有内容,那就只能看它了。

三、尝试调试源码

1.首先找到了比较显眼的ShortCut相关action,这些快捷方式的action也许比较容易有突破口。

2.com.android.launcher.action.INSTALL_SHORTCUT 广播,发现传入的参数会进行一些判断,重要的是判断包名,如果包名是支持的,才会继续往下执行。

接着可以看到,如果是系统APP或者是微信都支持。

发送广播后,Logcat看到输出一些日志:

11-28 23:04:19.729 8884-8884/? E/NewLauncher: ShortcutAction : handleInstallShortcut [微信]
11-28 23:04:19.729 8884-8884/? E/NewLauncher: ShortcutAction : lunch intent [#Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10000000;package=com.tencent.mm;component=com.tencent.mm/.MainActivity;end]
11-28 23:04:19.729 8884-8884/? E/NewLauncher: Utils : DEBUG : drawableToBitmapWithoutShadow return null by drawable is null
11-28 23:04:19.729 8884-8884/? E/NewLauncher: Utils : isDoubleOpenApp() pkg = com.tencent.mm this is not a doubleApp
11-28 23:04:19.750 8884-9144/? E/NewLauncher: DatabaseHandler : origImg is null, [com.tencent.mm]
11-28 23:04:19.750 8884-9144/? E/NewLauncher: Utils : generateShortcutIcon return null, by src is null
11-28 23:04:19.750 8884-9144/? E/NewLauncher: DatabaseHandler : generateShortcutIcon return null

最后系统会Toast提示“已添加”,然后没有然后了~~

3.com.android.launcher.action.UNINSTALL_SHORTCUT 广播,发送后是不是删除掉快捷方式呢?

发送广播后,Logcat看到输出一些日志

11-28 23:19:24.273 8884-9144/? W/System.err: java.lang.ClassCastException: java.lang.String cannot be cast to com.smartisanos.launcher.data.ShortcutInfo
11-28 23:19:24.273 8884-9144/? W/System.err:     at com.smartisanos.launcher.data.DatabaseHandler.handleEventUninstallShortcut(DatabaseHandler.java:3522)
11-28 23:19:24.273 8884-9144/? W/System.err:     at com.smartisanos.launcher.data.DatabaseHandler.run(DatabaseHandler.java:533)
11-28 23:19:24.273 8884-9144/? W/System.err:     at com.smartisanos.launcher.data.DatabaseHandler.-wrap2(DatabaseHandler.java)
11-28 23:19:24.273 8884-9144/? W/System.err:     at com.smartisanos.launcher.data.DatabaseHandler$1.handleMessage(DatabaseHandler.java:124)
11-28 23:19:24.273 8884-9144/? W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:102)
11-28 23:19:24.273 8884-9144/? W/System.err:     at android.os.Looper.loop(Looper.java:154)
11-28 23:19:24.273 8884-9144/? W/System.err:     at android.os.HandlerThread.run(HandlerThread.java:61)
11-28 23:19:24.274 8884-9144/? E/NewLauncher: DatabaseHandler : handleEventUninstallShortcut return by shortcut is null

因为DatabaseHandler.java没有内容,又一次然后没有然后~~

4.com.smartisanos.launcher.update_icon广播,发送广播后,没有日志输出,也是没有然后,应该是组装的数据JSON格式有问题。

5.com.smartisan.push.MESSAGE_RECEIVE 广播,在AndroidManifest.xml中显示需要设置Type,但是发送广播未有日志,没有然后~~

四、最后

如果能找到方法更新这条数据也许会有进展:

11-29 00:16:46.488 8884-9142/? E/NewLauncher: Cell : ### set item info. setItemInfo(). pid = [3] cid = [4] fid = [-1] id = [68] itemType = [0] userId = [-1] messagesNumber = [0] title = [内涵段子] packageName = [com.ss.android.essay.joke] componentName = [com.ss.android.essay.joke.activity.SplashActivity] isSystemApp = [false] isNewlyInstalled = [false] isNeedDowload = [false] downloadId = [-1]

其中messageNumber就是角标的消息数。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值