AItechnology 发表于 2020-8-12 13:23

去除一个图片爬虫软件第三方插件

最近逛吾爱时发现一个帖子https://www.52pojie.cn/forum.php?mod=viewthread&tid=1234153&extra=page%3D1%26filter%3Dtypeid%26typeid%3D232
里面分享了一个图片爬虫的软件,软件很好,非常感谢搂住分享,但发现软件需要一些除了网络之外的权限,所以初衷就是让这么好的软件再净化净化,去除其中的第三方插件和不必要的权限,废话不多说,直接开始。
在分析开始前,打开MT管理器,开启Activity记录,看自己打开的界面的Activity的包名。我找程序主界面就是这么干的

下面贴出结果
com.example.so.finalpicshow.mvp.ui.activities.DefineActivity:程序主界面
com.example.so.finalpicshow.mvp.ui.activities.GalleryActivity:"本地"界面
com.example.so.finalpicshow.mvp.ui.activities.HuabanActivity:"花瓣"界面
com.example.so.finalpicshow.mvp.ui.activities.lastversion.AdShwoActivity:"共享"界面
com.example.so.finalpicshow.mvp.ui.activities.lastversion.AccountAndCodeActivity:"密码"界面
com.example.so.finalpicshow.mvp.ui.activities.Setting2Activity:"设置"界面
有了前面的准备,现在打开AndroidKiller这反编译神器,准备开干,直接把软件拖进去,等待反编译完成,然后回编译安装验证,无签名验证,没有其它任何异常,说明可以直接修改软件了。
1.分析manifest.xml文件
先删除一些不必要且可能有风险的权限
    <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <uses-permission android:name="android.permission.GET_TASKS"/>
    <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT"/>//检测用户行为
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>//开机启动
    <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"/>
    <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
    <uses-permission android:name="android.permission.READ_PROFILE"/>
    <uses-permission android:name="android.permission.READ_CONTACTS"/>//读取联系人
接下来看看有哪些Activity等信息;
初始化的application名称:com.example.so.finalpicshow.MyApplication
可能存在的第三方插件(友盟)
<meta-data android:name="UMENG_APPKEY" android:value="590c82808f4a9d5a94002041"/>
<meta-data android:name="UMENG_MESSAGE_SECRET" android:value="46baabeab0009bc3ad582ebaf3f2ec32"/>
存在的Activity有:com.example.so.finalpicshow.mvp.ui.activities.DefineActivity
程序入口Activity:com.example.so.finalpicshow.mvp.ui.activities.lastversion.ChangeActivity
其它的Activity有:
com.example.so.finalpicshow.mvp.ui.activities.ShowPicDetail2Activity
com.example.so.finalpicshow.mvp.ui.activities.MidDetailActivity
com.example.so.finalpicshow.mvp.ui.activities.SettingsActivity
com.example.so.finalpicshow.mvp.ui.activities.GalleryActivity
com.example.so.finalpicshow.mvp.ui.activities.lastversion.DownloadManagerActivity
com.example.so.finalpicshow.mvp.ui.activities.VedioListActivity
com.example.so.finalpicshow.mvp.ui.activities.OriginPlayerActivity
com.example.so.finalpicshow.mvp.ui.activities.BookShowActivity
com.example.so.finalpicshow.mvp.ui.activities.HuabanActivity
com.example.so.finalpicshow.mvp.ui.activities.Setting2Activity
com.example.so.finalpicshow.mvp.ui.activities.lastversion.ManhuaChapterActivity
com.example.so.finalpicshow.TestAlias
com.example.so.finalpicshow.mvp.ui.activities.lastversion.VideoDetaiActivity
com.example.so.finalpicshow.mvp.ui.activities.lastversion.AccoutActivity
再看看其注册的服务,下面这个服务是接入的bomb推送服务插件
<service android:exported="true" android:label="PushService" android:name="cn.bmob.push.lib.service.PushService" android:process=":bmobpush">
<service android:name="cn.bmob.push.lib.service.PushNotifyService" android:process=":bmobpush"/>
注册的广播接收器,用来第三方插件的自启动等
<receiver android:name="cn.bmob.push.PushReceiver">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED"/>
                <action android:name="android.intent.action.USER_PRESENT"/>
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
            </intent-filter>
      </receiver>
      <receiver android:name="com.example.so.finalpicshow.event.push.MyPushMessageReceiver">
            <intent-filter>
                <action android:name="cn.bmob.push.action.MESSAGE"/>
            </intent-filter>
      </receiver>
      <receiver android:name="cn.bmob.push.PushNotifyReceiver" android:process=":bmobpush">
            <intent-filter>
                <action android:name="cn.bmob.push.action.HEARTBEAT"/>
                <action android:name="cn.bmob.push.action.NOTIFY"/>
            </intent-filter>
      </receiver>
其它看起来不太友好的Activity
com.example.so.finalpicshow.mvp.ui.activities.lastversion.ChangeActivity//跳转至开头的延迟界面
net.youmi.android.nm.vdo.VideoActivity//似乎和广告有关
com.example.so.finalpicshow.mvp.ui.activities.UploadActivity
com.example.so.finalpicshow.mvp.ui.activities.lastversion.AccountAndCodeActivity
cn.bmob.pay.v3.act.PayAct//似乎要付钱
com.example.so.finalpicshow.mvp.ui.activities.lastversion.PayActivity//似乎要付钱
好了,现在更改主程序入口,因为开头会有延迟界面,估计是以后放广告的界面,删掉所有带<activity-alias>标签的Activity,将com.example.so.finalpicshow.mvp.ui.activities.DefineActivity的Activity改为如下样子
<activity android:configChanges="keyboardHidden|orientation|screenSize" android:label="@string/app_name" android:name="com.example.so.finalpicshow.mvp.ui.activities.DefineActivity" android:theme="@style/ImageTranslucentTheme1">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>
                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
      </activity>
2.前面的分析先结束,进入到程序入口的Application看反编译源码
import android.os.Environment;
import android.support.multidex.MultiDexApplication;
import com.example.so.finalpicshow.utils.CrashHandler;
import io.realm.Realm;
import io.realm.RealmConfiguration.Builder;
import java.io.File;
public class MyApplication
extends MultiDexApplication
{
public static final String PATH_database = Environment.getExternalStorageDirectory().getAbsolutePath() + "/a/database";
public static final String SETTINGS = "settings";
private static MyApplication instance;

public static MyApplication getInstance()
{
    return instance;
}

public void onCreate()
{
    super.onCreate();
    instance = this;
    CrashHandler.getInstance().init(getApplicationContext());
    Realm.init(this);
    Realm.setDefaultConfiguration(new RealmConfiguration.Builder().deleteRealmIfMigrationNeeded().build());
}
}
可以看到在onCreate()方法中初始化一个数据库,另外初始化作者的工具类CrashHandler,搜索CrashHandler发现没有别处引用,所以直接删掉这个CrashHandler的初始化代码
接下来搜索Realm类,这是一个安卓的数据库,所以不用删除
至此,Application不再管它
3.进入主界面代码,看看有没有什么东西,主界面com.example.so.finalpicshow.mvp.ui.activities.DefineActivity
反编译源码之后得到onCreate()方法:
public void onCreate(Bundle paramBundle)
{
    super.onCreate(paramBundle);
    verifyStoragePermissions(this);
    getWindowWidth();
    Bmob.initialize(this, "6e1af9cc924c71448415c6312df77694");
    BmobInstallation.getCurrentInstallation().save();
    BmobPush.startWork(this);
    WebUtil.getInstance().init(this);
    doSomeWork();
    initUI();
    initNav();
}
可以发现其初始化了bomb消息推送平台,怎么办?我们把它初始化的appid给置空。要是选择删除的话,引用的地方有点多,所以个偷懒
另外,把Manifest.xml中Bmob有关的服务和广播接收器全部删了(其实里面的所有广播接收器和服务都是第三方插件注册的,那些不必要的可能窃取用户隐私的权限也来自第三方插件)
这个时候打开DDMS看看log,发现报错的log且后面再也没有看到报错的log,证明第三方插件不能正常启动,我们的目的达到了BmobJNI-->aes:doFinal has error
4.最后就是看看那个支付类,发现只是在Manifest.xml声明了,却没有实现,且处在lastversion包中,说明作者可能在未来会实现收费,但这个版本不收费,最后,这个软件似乎是通过bomb来更新的,但是,我们已经破坏其初始化id,所以不会受到更新提醒了。
至此,这个软件的第三方插件已经被彻底被屏蔽了,达到了最初的目的。
最后,给大伙附上最终结果
链接:https://pan.baidu.com/s/1vJl9iC7pPvd5fLread9jhg
提取码:5pgq

安七灵 发表于 2020-8-12 14:56

不想通过百度网盘下载的可以用下面这个↓
蓝奏云:https://url.cn/grhaF2pG

swz02 发表于 2020-8-12 13:43

下载看看 谢谢分享

chenlonglongche 发表于 2020-8-12 13:43

沙发,感谢楼主分享。

1054650250 发表于 2020-8-12 13:47

谢谢分享

无秽之鸦 发表于 2020-8-12 14:31

感谢楼主分享

HopesOfSummer 发表于 2020-8-12 14:48

昨天刚看到那个软件,今天就看到净化了,666

crosslcy 发表于 2020-8-12 14:50

感谢楼主

yy0738 发表于 2020-8-12 14:56

非常感谢楼主的分享

sky995 发表于 2020-8-12 15:12

直接搜索屏蔽http://推送就行了
页: [1] 2 3 4 5 6
查看完整版本: 去除一个图片爬虫软件第三方插件