如何识别android apk qihoo360 apk脱壳软件

[大型原创教程]如何完美解决Android系统后台、关联唤醒、自启动、全家桶问题
前提的前提是你的手机必须ROOT,[del]不ROOT也有解决方案,不过疗效不理想,下面我会提到。[/del][collapse=卧槽楼主你写这么多劳资那么忙..]不root,装绿色守护,开不root模式,效果差root了,两个选择,一是冻结/隔离应用,装黑白门、冰箱,效果好,类似把APP丢进箱子里,体验差点。一是干掉他们后台,装绿色守护、360极客版、LBE,但这些APP本身就会不停的在后台折腾,自己考虑。root了有xpsoed框架,用禁止唤醒搞需要后台的,用阻止运行搞随点随用的。 [/collapse][h]热身运动[/h]1.root你的手机 ,root方法各自机型论坛应该能轻松找到,NGA精英玩家大概真的只需要10分钟就能搞定。root会失去保修吗?unroot也只需要10分钟朋友。(对于初级方案,这一步就够了,如果要完美,继续下一步)2.第三方recovery。(如果第一步root是用得卡刷方式,相信recovery你已经有了)[h]懒人方案[/h][b]1.不root搞定后台[/b]这个很简单了,绿色守护提供了不root模式,其原理就是在你锁屏后全自动进入系统菜单点击“停止运行”,听起来就很无聊是不是,...绿色守护:[url]/apk/com.oasisfeng.greenify[/url][b]一键式搞定后台之一[/b]原理是冻结这个APP,并阻止一切对它的唤醒。这个解决起来比较完美了,不会自启不会关联唤醒不会在后台。不好的地方在于:你必须把APP们都丢在一个类似文件夹的东西里面关起来。设置起来不算简单启动这个文件夹本身也需要一定时间loading页面会有广告好的地方是,装个APP就搞定了。以下三个都可以,选自己喜欢的:黑白门:[url]/apk/com.example.bwappdoor[/url]冰箱:[url]/apk/com.catchingnow.icebox[/url]冷桌面:[url]/apk/net.ohrz.coldlauncher[/url][b]一键式搞定后台之二[/b]原理[del]大概[/del]是杀掉这个APP进程,让它处于休眠状态。可选方法1:安装绿色守护,使用root模式,点击+号把你要治理的APP添加进去。选择被唤醒的APP,点击剪刀按钮,切断唤醒。绿色守护:[url]/apk/com.oasisfeng.greenify[/url]可选方法2:安装360极客版,开启超级模式。然后就简单了,跟着它引导走吧。这是360唯一的良心...360极客版:[url]/apk/com.qihoo.antivirus[/url][h]完美方案[/h][b]前戏[/b]除了root之外,用到xpsoed框架。[color=orangered][b]安装xpsoed可能导致你手机无法开机或者需要3wipe才能正常使用。请提前备份。如果你不懂这是些什么操作,请使用上一个方案。[/b][/color]5.0以下直接安装:[url]/apk/de.robv.android.xposed.installer[/url]按照引导激活框架即可。[collapse=XDA发布原帖][url]http://forum./showpost.php?p=&postcount=62[/url][/collapse]5.X/6.X麻烦一些,需要用到recovery才能刷入xpsoed框架。刷入步骤是这样的:1.下载对应安卓版本的卡刷包到你的手机,然后进入recovery刷入。卡刷包去这里下,3M左右,作者也提供了uninstall,就是后悔药。[color=crimson][b]请提前备份你的重要资料,刷入ZIP包之后多数情况会报错,进入recovery 3 wipe再开机就好了。强烈建议你把uninstall包也下载到手机里,万一无法开机还有救...[/b][/color]下载地址:[url]http://forum./showthread.php?t=3034811[/url]怎么选?这取决于你的CPU和和安卓版本arm64是v8,arm指v7,x86就是x86,SDK21是5.0,22是5.1,23是6.0[del]大部分人应该都是arm64,不知道自己下个cpuz看看。[/del]2.进入手机安装xposed管理器:5.X/6.X:[url]/apk/de.robv.android.xposed.installer-5.0[/url]到这里你就开启新世界的大门了,可以尽情的操操操你的手机了。[b]本垒[/b]1.安装阻止运行,并在xpsoed管理器激活它。进入阻止运行,把你想干死的APP都添加进去,新安装的APP会被自动添加到阻止列表,不希望被阻止的请手动排除。除此之外不需要你做人设操作。然后正常使用APP,点击返回键自动杀死这个APP,点击HOME键后台运行。这时候聪明的马桶众就会问了,那我想要一直运行的APP耍流氓怎么办?比如微信。我们继续。阻止运行:[url]/apk/me.piebridge.forcestopgb[/url]2.安装禁止唤醒,并在xpsoed管理器激活它。安装wakelock。步骤1:进入wakelock,它会统计哪些在后台不停闹腾的APP,比如这样:[img]./mon_/436_56a05db36226a.png.medium.jpg[/img]步骤2:进入禁止唤醒,干掉它的唤醒锁。[img]./mon_/436_56a05db277e0e.png.medium.jpg[/img]禁止唤醒:[url]/apk/com.linangran.nowakelock[/url]wakelock:[url]/apk/com.uzumapps.wakelockdetector[/url]什么是CPU唤醒锁,别问了,大部分APP全部唤醒锁都干掉也没问题。[del]至少微信是[/del]如果你想知道:[url]/?p=611[/url]然后就可以愉快的使用你的安卓手机了....[del]这么麻烦老子还不如换苹果...[/del]
常年刷机的都感觉好复杂的样子 还是换苹果吧~
用猴为和神族就可以了,免root
作为技术贴还是要支持的,虽然无心去弄,是我可能早就买个mate8搞定了。
这么麻烦,以前用安卓的时候也就Root下
[quote][pid=28147,1]Reply[/pid] [b]Post by [uid=4589879]安儿宝[/uid] ( 12:34):[/b]常年刷机的都感觉好复杂的样子 还是换苹果吧~[/quote]其实不难,我只是把步骤都写出来了。简单说不root,装绿色守护,开不root模式,效果差root了,装黑白门、冰箱,效果好,但是体验差点root了有xpsoed框架,用禁止唤醒搞需要后台的,用阻止运行搞随点随用的。
换苹果吧,就等双卡态度了
自从用了华为之后,再没有这个烦恼了
这种帖子首先应该是充满这感谢看完的。帖子不复杂,要是我,语文没毕业的水平,写的肯定更加看不懂。我会用大量的流程图来解释我的方法。手机root确实很简单。有了这个方法,手机肯定比以前好用,等换新的手机就试试。
[b]Reply to [pid=28147,1]Reply[/pid] Post by [uid=]竟然有人不爱比亚迪[/uid] ( 12:37)[/b]root之后 我都是用lbe的。。。。。
买个手机还这么折腾真是很有闲心啊之前用s4各种闹心,换了华为6p就没这些烦恼了这么复杂的管理后台模式还是合适水货安卓机
关联唤醒、自启动、全家桶是什么?
从来没遇到过...
[quote][pid=28147,1]Reply[/pid] [b]Post by [uid=4589879]安儿宝[/uid] ( 12:42):[/b][b]Reply to [pid=28147,1]Reply[/pid] Post by [uid=]竟然有人不爱比亚迪[/uid] ( 12:37)[/b]root之后 我都是用lbe的。。。。。[/quote]360极客版和LBE应该都可以,我加到帖子里去不过绿色守护、360极客版、LBE本身就会不停的在后台折腾,所以其实也不怎么推荐的...
[b]Reply to [tid=8928147]Topic[/tid] Post by [uid=]竟然有人不爱比亚迪[/uid] ( 12:27)[/b]我现在用xposed装了绿色守护,阻止运行,禁止唤醒和boot manager。。我是不是太狠了[s:ac:blink]
至少三星是root后没办法复原的
现在6.0根本没觉得需要手动限制这些东西
三星5.x的xposed框架貌似需要deodex过的rom吧,直接装很容易就砖了。[del]还是360极客版省力[/del]
[quote][pid=28147,1]Reply[/pid] [b]Post by [uid=1512418]legend-feng[/uid] ( 12:48):[/b][b]Reply to [tid=8928147]Topic[/tid] Post by [uid=]竟然有人不爱比亚迪[/uid] ( 12:27)[/b]我现在用xposed装了绿色守护,阻止运行,禁止唤醒和boot manager。。我是不是太狠了[s:ac:blink][/quote]绿色守护和阻止运行功能上有重复,没必要...不信你停用绿色守护,然后只用阻止运行,然后去后台看...
挺详细的,就是现在变懒了……
用一个或者多个软件去限制别的软件,归根到底也是曲线救国,不得不承认有些东西就是谷歌的锅
360不支持6.0 6.0.1懒得搞XPOSED 只能用LBE是吧开发者心声
如何加入360开放平台?
登录360账号
应用提交审核
通过审核、发布上线
PC应用:010-
手机应用:010-
PC应用:app-
手机应用:
手机应用:
选择应用类型
Copyright & 2005- All Rights Reserved.
360安全中心 版权所有有的时候,为了实现一些特殊需求,如界面换肤、插件化等,我们希望改变应用的运行环境(surrounding)。例如,我们希望某个应用在运行时,所有Class(包括自定义Application,下面假设它叫MyApplication)都被一个自定义的ClassLoader加载。
要实现这个需求,需要在MyApplication被加载之前,先替换掉API层的默认ClassLoader,否则MyApplication就会被默认ClassLoader加载。但这会产生一个悖论,MyApplication被加载之前,没有任何应用代码可以运行,替换ClassLoader无法办到。Proxy/Delegate Application框架就是用来解决这类问题的。
Proxy/Delegate Application简介
在Proxy/Delegate Application框架里,应用一共有两个Application对象,一个称为ProxyApplication,另一个称为DelegateApplication:
(1) ProxyApplication:框架会提供一个ProxyApplication抽象基类(abstract class),使用者需要继承这个类,并重载其initProxyApplication()方法,在其中改变surrounding,如替换ClassLoader等。
(2) DelegateApplication:即应用原有的Application,应用从getApplicationContext()等方法中取到的都是DelegateApplication。注意DelegateApplication只是一个称谓,并没有一个叫DelegateApplication的基类存在。
使用Proxy/Delegate Application框架,使用者可以在对原有Application类不做任何修改的情况下,改变整个应用的运行环境。所需要做的只是添加一个新的Application类,并相应的修改AndroidManifest.xml。
老的AndroidManifest.xml:
&application
android:name=".MyApplication"
android:icon="@drawable/icon"
android:label="@string/app_name" &
添加的Application类:
public class MyProxyApplication extends ProxyApplication {
protected void initProxyApplication() {
// 在这里替换运行环境,如将ClassLoader替换为自定义的
新的AndroidManifest.xml:
&application
android:name=".MyProxyApplication"
android:icon="@drawable/icon"
android:label="@string/app_name" &
&meta-data
android:name="DELEGATE_APPLICATION_CLASS_NAME"
android:value=".MyApplication" &
&/meta-data&
MyProxyApplication(ProxyApplication)对象对应用是不可见的,应用看到的Application是MyApplication(DelegateApplication),也就是以前的Application对象。这样对于应用而已,似乎一切都没有改变;但它的运行环境已经改变,例如所有的类已经被新的ClassLoader加载了。整个实现是非侵入式的,已有代码无须任何修改,只有AndroidManifest.xml略有改动。
下面开始探讨ProxyApplication本身如何实现。核心问题是两个,一是什么时机调用子类的initProxyApplication()方法,让子类改变surrounding;二是如何加载DelegateApplication并让应用认为它就是真实的Application。另外Android四大组件之一的ContentProvider会给我们带来不少麻烦,需要妥善处理。
ProxyApplication实现:时机
理论上ProxyApplication对任何能够访问到的变量,包括Java层和Native层,都是可以替换(或者HOOK,类似的含义)的;比较有意义的除了ClassLoader外,还有Resources和各路Binder对象。通过这些手段可以实现非常多有意思的功能。具体如何替换ClassLoader、Resources等这里不深入讨论,如有兴趣,在网上可以找到很多相关资料。本文的重点是介绍框架本身,替换ClassLoader仅作为一个例子。
现在的问题是改变surrounding的时机必须足够早,特别是对于ClassLoader来说尤为重要。是否可以在Application:onCreate()里做?我们通常认为,Application是一个Android应用最早被加载的组件;但当应用注册有ContentProvider的时候,这并不正确的。ContentProvider:onCreate()调用优先于Application:onCreate()。
幸好,我们还有另一个方法:attachBaseContext()。Android的几个主要顶级组件(Application、Activity、Service)都是ContextWrapper的子类。ContextWrapper一方面继承(inherit)了Context,一方面又包含(composite)了一个Context对象(称为mBase),对Context的实现为转发给mBase对象处理。这一个听起来很绕的设计,是为了对这些顶级组件中的Context功能做延迟初始化(delay init)的处理。这里不展开讨论了,仅贴一些Android源代码片段做参考。
// android.app.Application
public class Application extends ContextWrapper {
public application() {
super(null);
// android.content.ContextWrapper
public class ContextWrapper extends Context {
Context mB
public ContextWrapper(Context base) {
protected void attachBaseContext(Context base) {
if (mBase != null) {
throw new IllegalStateException("Base context already set");
public AssetManager getAssets() {
return mBase.getAssets();
public Resources getResources()
return mBase.getResources();
ContextWrapper完成这个delay init语义的方法就是attachBaseContext()。可以这样说,Application对象在刚刚构造完成时是“残废”的,访问所有Context的方法都会抛出NullPointerException。只有attachBaseContext()执行完后,它的功能才完整。
在ContentProvider:onCreate()中,我们知道Application:onCreate()还没有运行,但已经可以使用getContext().getApplicationContext()函数获取Application对象,并访问其Context方法。显然,Android的API设计者不能允许此时获取的Application是“残废”的。结论是Application:attachBaseContext()必须要发生在ContentProvider:onCreate()之前,否则API将出现BUG;无论Android的系统版本如何变化,这一点也不能改变。
于是,Application与ContentProvider的初始化次序是这样的:Application:attachBaseContext()最早执行,然后是ContentProvider:onCreate(),然后是Application:onCreate()。我们的解决方案也就很简单了:
public abstract class ProxyApplication extends Application {
protected abstract void initProxyApplication();
protected void attachBaseContext (Context context) {
super.attachBaseContext(context);
initProxyApplication();
ProxyApplication实现:加载DelegateApplication
当子类的initProxyApplication()返回后,ProxyApplication就要加载DelegateApplication,完成自己的历史使命。这一部分在onCreate()中完成,基本是些体力活,但也有些需要注意的地方,下面分步骤简述一下。
(1) 获取DelegateApplication的Class Name
即从AndroidManifest.xml中获取DELEGATE_APPLICAION的metadata值,若不存在,则使用android.app.Application作为默认。这一步比较简单。
String className = "android.app.Application";
String key = "DELEGATE_APPLICATION_CLASS_NAME";
ApplicationInfo appInfo = getPackageManager().getApplicationInfo(
super.getPackageName(), PackageManager.GET_META_DATA);
Bundle bundle = appInfo.metaD
if (bundle != null && bundle.containsKey(key)) {
className = bundle.getString(key);
if (className.startsWith("."))
className = super.getPackageName() + classN
(2) 加载DelegateApplication并生成对象
这里要注意的是使用哪个ClassLoader?答案是应该用getClassLoader()(即Context:getClassLoader()),而不是getClass().getClassLoader()。要仔细揣摩这两者之间的差别。
Class delegateClass = Class.forName(className, true, getClassLoader());
Application delegate = (Application) delegateClass.newInstance();
(3) 替换API层的所有Application引用
即把API层所有保存的ProxyApplication对象,都替换为新生成的DelegateApplication对象。以ProxyApplication的baseContext作为起点顺藤摸瓜,可以找到所有的位置,使用反射一一换掉。注意最后一个mAllApplications是List,要换掉其内部的内容。
baseContext.mOuterContext
baseContext.mPackageInfo.mApplication
baseContext.mPackageInfo.mActivityThread.mInitialApplication
baseContext.mPackageInfo.mActivityThread.mAllApplications
(4) 设置baseContext并调用onCreate
将控制权交给DelegateApplication。当然,后者会认为自己就是“正牌”的Application,后续的其它组件也都会这么认为。这正是我们要的效果。
Method attach = Application.class.getDeclaredMethod("attach", Context.class);
attach.setAccessible(true);
attach.invoke(delegate, base);
delegate.onCreate();
再次对付ContentProvider
前面提到过,Android的顶级组件Application、Activity、Service都是ContextWrapper,这个列表中并没有ContentProvider。ContentProvider不是ContextWrapper,甚至不是Context,而是内部有一个mContext变量,通过getContext()函数获取这个Context。
那么,ContentProvider:getContext()获取到的是哪一个Context?实验证明,ContentProvider:getContext()获取的Context是Application;准确的说,在Proxy/Delegate Application框架里,是ProxyApplication。这就不符合框架的语义了。那么,我们需要像其它处理其它ProxyApplication引用一样,把它换成DelegateApplication吗?这是可行的:遍历API层的ContentProvider列表,将每一个ContentProvider中的mContext都替换为DelegateApplication。
但这种处理方式,会进一步增加对Android API层源代码依赖,是否必要?毕竟Android的API文档中,并没有规定ContentProvider:getContext()返回的必须是Application;如果要取得Application,正确的方式是getContext().getApplicationContext()。那么为什么getContext()就直接返回了Application对象?我们可以从源代码中找到答案:
// in ActivityThread:installProvider()
if (context.getPackageName().equals(ai.packageName)) {
} else if (mInitialApplication != null &&
mInitialApplication.getPackageName().equals(ai.packageName)) {
c = mInitialA
c = context.createPackageContext(ai.packageName,
Context.CONTEXT_INCLUDE_CODE);
} catch (PackageManager.NameNotFoundException e) {
容易看出,因为ProxyApplication对象的getPackageName()函数与ContentProvider对应的包名相同,就会复用ProxyApplication对象作为Context,而不会再创建一个新的packageContext。于是解决方案也很简单了:
public String getPackageName() {
return "";
由于ProxyApplication不是最终的Application,这并不会产生什么副作用。
使用注意事项
不要保留ProxyApplication子类对象的引用,也不要在任何系统回调(包括onCreate)中做事情。onCreate()被基类用于加载DelegateApplication,而其它回调都不会再收到。
在ProxyApplication:onCreate()执行完成之后,虚拟机中所有的线程栈和所有的JAVA对象,都不会再有ProxyApplication对象的引用。ProxyApplication对象将在下一次GC运行时被回收,这也意味着从ProxyApplication到DelegateApplication的替换进行得非常彻底。自然地,ProxyApplication也收不到其它回调了。DelegateApplication会正常的接收所有的回调。
另外,在ProxyApplication子类中,如果需要获取当前APK的包名,需要使用getBaseContext().getPackageName(),而不能简单调用getPackageName()。原因在上面“再次对付ContentProvider”中有说明。504 Gateway Time-out
504 Gateway Time-out博客访问: 309751
博文数量: 67
博客积分: 1175
博客等级: 少尉
技术积分: 1201
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: Android平台
1. monkeyrunner的位置
& &学习monkeyrunner的童鞋们应该都有自己安装的android sdk环境,而monkeyrunner的工具位于android sdk/tools/monkeyrunner.bat文件
2.如何快速的在命令行打开monkeyrunner
& 将android sdk/tools目录加入到环境变量的path中
3.先运行官网上的例子程序
& 注:monkeyrunner只是一组API,需要使用python脚本去调用
& 分析:program.py文件
# Imports the monkeyrunner modules used by this program
from com.android.monkeyrunner import MonkeyRunner,MonkeyDevice,MonkeyImage
import time
# Connects to the current device, returning a MonkeyDevice object
device = MonkeyRunner.waitForConnection() & #连接设备
# Installs the Android package. Notice that this method returns a boolean, so you can test
# to see if the installation worked.
device.installPackage('./360explorer-4.2.8-0910.4.apk') &#安装apk包,./表示该包和monkeyrunner.bat在同一个目录
package = 'com.qihoo.explorer' & & & #apk包名&
activity = 'com.qihoo.explorer.HomeActivity' & &#apk的activity名称, &包名和anctivity名称可以通过aapt命令获取
runComponent = package + '/' + activity
device.startActivity(component=runComponent) & &#启动应用程序
device.press('KEYCODE_MENU','DOWN_AND_UP') & & &#KEYCODE_MENU表示菜单键,打开菜单
time.sleep(10) & & & & & & & & & & & & & & & & &#暂停10秒
result =device.takeSnapshot() & & & & & & & & & #截图
result.writeToFile('./shot1.png','png') & & & & #将截图存放到和monkeyrunner.bat同一个目录下的shot1.png中
& &命令行下执行monkeyrunner &program.py
& &提示错误如下:
& &Can't open specified script file
& &&Usage: monkeyrunner [options] SCRIPT_FILE
& & -s & & &MonkeyServer IP Address.
& & -p & & &MonkeyServer TCP Port.
& & -v & & &MonkeyServer Logging level (ALL, FINEST, FINER, FINE, CONFIG, INFO, WARNING, SEVERE, OFF)
& &解决办法:
& & monkeyrunner & program.py的全路径
阅读(10905) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。

我要回帖

更多关于 android qihoo 的文章

 

随机推荐