
本回答信息来自针对微信Android客户端以及知乎Android客户端的分析。\x0d\\x0d\我手机上装了一键清理的软件,平时从来不让微信在后台运行,但是每当打开知乎,不出三秒,微信消息就来了,消息并不固定,只是感觉微信被打开了,我在想知乎是不是跟微信合作,后台打开微信,然后以此来赚钱的呢?\x0d\首先针对题主的疑问,准备的回答:不是\x0d\\x0d\实际的情况是,知乎调用微信sdk中分享的相关接口,微信sdk的相关接口里面,给微信发送了一个广播,微信app就被唤醒了,这不是知乎的主观行为,而是微信的(而且结合实际的分析来看,这个应该也算是正常的功能)。\x0d\\x0d\以下是详细分析:\x0d\\x0d\1首先说一下app的被唤醒(自启动)机制。\x0d\app自启动,基本上都是依靠Android的广播来实现的,而且是静态注册的广播(在AndroidManifestxml文件中进行配置的广播),发送广播的方法在一般情况下是sendBroadcast。\x0d\\x0d\2按照惯例,反编译一下微信apk,然后搜索一下它能够由哪些静态广播进行唤醒,同时抓取广播相关的log。\x0d\\x0d\结合微信的AndroidManifestxml文件以及抓取的log,可以知道相关的BroadcastReceiver是EntryReceiver,相关的action为\x0d\\x0d\comtencentmmpluginopenapiIntentACTION_HANDLE_APP_REGISTER\x0d\comtencentmmpluginopenapiIntentACTION_HANDLE_APP_UNREGISTER\x0d\\x0d\从其名称上看,是和注册/注销相关,具体接收到广播之后做了哪些处理,这些就不赘述了。\x0d\\x0d\I/ActivityManager(1107):Startproccomtencentmmforbroadcastcomtencentmm/pluginbasestubWXEntryActivity$EntryReceiver:pid=28779uid=10131gids={50131,3003,1028,1015,3002,3001}\x0d\\x0d\\x0d\\x0d\\x0d\\x0d\\x0d\\x0d\3接下来分析知乎的代码\x0d\\x0d\搜索一下知乎反编译之后的smali文件(sendBroadcast),其中只有一条是和微信相关的\x0d\\x0d\zhihu_203_176/smali/com/tencent/mm/sdk/openapi/jsmali:invoke-virtual{v0,v4,v1},Landroid/content/Context;->sendBroadcast(Landroid/content/Intent;Ljava/lang/String;)V\x0d\\x0d\再看一下反编译的java文件,能够比较清楚的看到,就是利用comtencentmmpluginopenapiIntentACTION_HANDLE_APP_REGISTER\x0d\这个action来进行注册,检查一些必要的信息。\x0d\\x0d\根据这些信息,结合微信和知乎反编译之后的文件,已经可以完整的分析具体发生了哪些事情了。\x0d\\x0d\comtencentmmsdkopenapij\x0d\\x0d\publicfinalbooleana(StringparamString)\x0d\{\x0d\if(!b("comtencentmm"))\x0d\{\x0d\comtencentmmsdkplatformtoolsaa("MicroMsgSDKWXApiImplV10","registerappfailedforwechatappsignaturecheckfailed");\x0d\returnfalse;\x0d\}\x0d\thisb=paramString;\x0d\comtencentmmsdkplatformtoolsab("MicroMsgSDKWXApiImplV10","registerapp"+thisagetPackageName());\x0d\ContextlocalContext=thisa;\x0d\Stringstr1="weixin://registerappappid="+thisb;\x0d\Stringstr2="comtencentmm"+"permissionMM_MESSAGE";\x0d\IntentlocalIntent=newIntent("comtencentmmpluginopenapiIntentACTION_HANDLE_APP_REGISTER");\x0d\Stringstr3=localContextgetPackageName();\x0d\localIntentputExtra("_mmessage_sdkVersion",553910273);\x0d\localIntentputExtra("_mmessage_appPackage",str3);\x0d\localIntentputExtra("_mmessage_content",str1);\x0d\localIntentputExtra("_mmessage_checksum",ba(str1,str3));\x0d\localContextsendBroadcast(localIntent,str2);\x0d\comtencentmmsdkplatformtoolsab("MicroMsgSDKMMessage","sendmmmessage,intent="+localIntent+",perm="+str2);\x0d\returntrue;\x0d\}\x0d\\x0d\4最后,因为偷懒,所以我只是大概的静态分析了相关代码,没发现知乎和微信做了什么丧失的事情,然后大概加了段logcheck了一下,从中也可以看出的确是和分享有关,至于使用时机及频率是否合适,这个和问题没什么关系,不做讨论。\x0d\\x0d\D/hillwind(5766):javalangThrowable\x0d\D/hillwind(5766):atcomhillwindandroidutilRLogprintStackTrace(RLogjava:11)\x0d\D/hillwind(5766):atcomtencentmmsdkopenapija(UnknownSource)\x0d\D/hillwind(5766):atcomzhihuandroidutilafb(WeChatHelperjava:43)\x0d\D/hillwind(5766):atcomzhihuandroidwidgetab(ActivityChooserModeljava:721)\x0d\D/hillwind(5766):atcomzhihuandroidwidgetShareActionProvidersetShareIntent(ShareActionProviderjava:98)\x0d\D/hillwind(5766):atcomzhihuandroiduifragmentbxa(QuestionViewerFragmentjava:221)\x0d\D/hillwind(5766):atandroidsupportv4appja(FragmentManagerjava:1973)\x0d\D/hillwind(5766):atandroidsupportv4appgonCreatePanelMenu(FragmentActivityjava:226)\x0d\D/hillwind(5766):atandroidsupportv7aba(ActionBarActivityjava:233)\x0d\D/hillwind(5766):atandroidsupportv7aga(ActionBarActivityDelegateICSjava:146)\x0d\D/hillwind(5766):atandroidsupportv7abonCreatePanelMenu(ActionBarActivityjava:200)\x0d\D/hillwind(5766):atandroidsupportv7ag$aonCreatePanelMenu(ActionBarActivityDelegateICSjava:293)\x0d\D/hillwind(5766):atcomandroidinternalpolicyimplPhoneWindowpreparePanel(PhoneWindowjava:472)\x0d\D/hillwind(5766):atcomandroidinternalpolicyimplPhoneWindowdoInvalidatePanelMenu(PhoneWindowjava:878)\x0d\D/hillwind(5766):atcomandroidinternalpolicyimplPhoneWindow$1run(PhoneWindowjava:257)\x0d\D/hillwind(5766):atandroidosHandlerhandleCallback(Handlerjava:733)\x0d\D/hillwind(5766):atandroidosHandlerdispatchMessage(Handlerjava:95)\x0d\D/hillwind(5766):atandroidosLooperloop(Looperjava:136)\x0d\D/hillwind(5766):atandroidappActivityThreadmain(ActivityThreadjava:5140)\x0d\D/hillwind(5766):atjavalangreflectMethodinvokeNative(NativeMethod)\x0d\D/hillwind(5766):atjavalangreflectMethodinvoke(Methodjava:515)\x0d\D/hillwind(5766):atcomandroidinternalosZygoteInit$MethodAndArgsCallerrun(ZygoteInitjava:786)\x0d\D/hillwind(5766):atcomandroidinternalosZygoteInitmain(ZygoteInitjava:602)\x0d\D/hillwind(5766):atdalviksystemNativeStartmain(NativeMethod)
说明返编译失败了。
1反编译Apk得到Java源代码
首先要下载两个工具:dex2jar和JD-GUI
前者是将apk中的classesdex转化成Jar文件,而JD-GUI是一个反编译工具,可以直接查看Jar包的源代码。
具体步骤:
首先将apk文件,将后缀改为zip,解压,得到其中的classesdex,它就是java文件编译再通过dx工具打包而成的;
解压下载的dex2jar,将classesdex复制到dex2jarbat所在目录。在命令行下定位到dex2jarbat所在目录
运行 dex2jarbat classesdex
生成 classesdexdex2jarjar
2反编译apk生成程序的源代码和、XML配置、语言资源等文件
还是下载工具,这次用到的是apktool
具体步骤:
将下载的两个包解压到同一个文件夹下,应该会有三个文件:aaptexe,apktoolbat,apktooljar
1解压缩下载的两个文件包,apktool-install-windows-r04-brut1tar解压缩后得到的包里有aaptexe 和apktoolbat(注意要把apktool141tar解压后的一个jar 文件copy到解压后的\apktool-install-windows-r04-brut1文件夹里)
2特别注意:你要反编译的文件一定要放在C盘的根目录里
BIOS中内存频率设置的方法步骤如下:
1、首先打开计算机,然后敲击键盘上的F2进入BIOS界面,如图所示。
2、进入BIOS界面后,再敲击键盘上的F7进入Advanced模式,如图所示。
3、进入Advanced模式界面后,再在d出的选项菜单内使用鼠标单击Ai Tweaker选项,如图所示。
4、再在界面内单击DRAM Frequency选项即可将华硕主板的内存在BIOS内设置为1600,如图所示。
扩展资料
BOIS基本设置
1、磁盘驱动器设置
包括自动检测IDE接口、启动顺序、软盘硬盘的型号等。
2、键盘设置
包括上电是否检测硬盘、键盘类型、键盘参数等。
3、存储器设置
包括存储器容量、读写时序、奇偶校验、ECC校验、1M以上内存测试及音响等。
4、Cache设置
包括内/外Cache、Cache地址/尺寸、BIOS显示卡Cache设置等。
5、ROM SHADOW设置
包括ROM BIOS SHADOW、VIDEO SHADOW、各种适配卡SHADOW。
6、安全设置
包括硬盘分区表保护、开机口令、Setup口令等。
一、APK生成 odex文件方法:
编译开源GIT上的build/tools /dexpreopt/dexopt-wrapper这个,使用dexopt-wrapper即可, *** 作步骤将dexopt-wrapper放到/data/local目录中,使用adb shell执行linux命令行,使用cd命令进入/data/local目录,cd /data/local/dexoptwrapper android123apk android123odex
二、合并odex和 少dex的apk 为完整的apk文件
需要用到的工具是smali,一个开源的java处理软件:
1下载的baksmali和 smali的jar文件到工作目录
2把ROM里面的coreodex, extodex, frameworkodex, androidpolicyodex, servicesodex这5个文件也放在同一目录(也可以放在别的目录,通过设置BOOTCLASSPATH指定,默认就是当前目录)。
例:以teeter为例子 (HTC一些Android常常会内置),ROM里面拿出来的可能是2个文件,teeterapk + teeterodex。
1、分解odex文件:java -jar baksmali-121jar -x teeterodex如果没其他问题,会在工作目录生成一个out的目录,里面是分解出来的一些文件,我们在此不深究这些文件的作用。
2、把分解得到的文件变成classesdex:java -Xmx512M -jar smali-121jar out -o classesdex,这样得到了一个有用的classesdex文件
3、用WinZip或者WinRAR打开teeterapk文件,把这个classesdex 放进去
4、最后再用signapk把最新得到的这个包含classesdex的apk重新签署一下 (Auto Sign签名工具往期的文章里有下载),就生成一个可以安装的单独APK程序了。
5、签名完成后即可安装使用了
以上就是关于在Android系统上启动知乎app时会唤醒微信是什么原因全部的内容,包括:在Android系统上启动知乎app时会唤醒微信是什么原因、为什么我用apktool反编译systemui.apk后里面只有smali文件夹、主板BOIS里面应如何设置等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)