好友
阅读权限10
听众
最后登录1970-1-1
|
最近逛吾爱时发现一个帖子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
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|