跪求 “应用锁 / 程序锁 / 密码锁”的原理

flying_vip_521 2011-09-07 10:21:59
目前在开发应用锁apk中的功能,有源码的米,可收购(15110105695)

应用锁的实现原理,知道的请指导一下小弟,谢谢了

想做自己的应用锁的哥们,也留下爪印,讨论一下呗,看看大家都怎么想的
...全文
1146 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
嗨瓶哥 2013-12-23
  • 打赏
  • 举报
回复
有解决的没有啊
u012546996 2013-11-05
  • 打赏
  • 举报
回复
最近我做这个做的好久将诶啊。。。请楼主分享下。。。
奔跑的乌龟 2013-09-01
  • 打赏
  • 举报
回复
楼主解决这个问题了,我也遇到了这个问题,我是在服务中开启线程通过获取任务栈顶层不停的监听受保护 的应用,当监听到时弹出密码框,但是输入密码后还会再次弹出密码框,因为此时这个受保护的应用已经处于顶层,又是不停的监听,所以会不断地弹出密码框。这个怎么解决啊??? 还有就是不停的监听还会造成耗电量太大 ?? 楼主怎么解决的??
sukis111 2012-10-27
  • 打赏
  • 举报
回复
小弟现在要做这个 但是没有一点头绪,可以分享一下不
一π胡言_ripple 2012-10-27
  • 打赏
  • 举报
回复
这个必须用正则表达式匹配次才能快。
我试过了,可以。但是我的需求是要求每一次用都弹出来,正则就不行了。
因为同一个应用每一次使用过程中都会出现很多activity重复启动,这种方式只使用于一次性加密的情况,重复加密不太好,因为back健等不会导致activitymanager重新启动一个activity
骑不快的单车 2012-09-17
  • 打赏
  • 举报
回复
大哥你的做出来了吗 分享分享 小弟现在要做这个 但是没有一点头绪 给个例子吧
duke19810210 2012-02-09
  • 打赏
  • 举报
回复
我恰好也在做相同的需求,楼主是否可以共享下源码。
risfi 2011-12-25
  • 打赏
  • 举报
回复
楼主你的程序锁做出来了吗?
可以共享下吗?
shuishi0 2011-12-13
  • 打赏
  • 举报
回复
请问 如何保护用户设置的数据 以及 不让没有权限的用户将其卸载掉?
wudi3111835 2011-11-29
  • 打赏
  • 举报
回复
哥们你的锁做出来了吗?我也想做撒,分享下吧
flying_vip_521 2011-10-08
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 hangxin1940 的回复:]

看这里
http://www.cnblogs.com/hangxin1940/archive/2011/09/29/2196001.html
[/Quote]

Thanks!
flying_vip_521 2011-09-23
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 l417584711 的回复:]

反编译 Smart.App.Protector
[/Quote]


反编译过了,只是里边的代码比较乱,有些关键的地方,看不明白。

目前的问题是,当我启动应用的时候,这个应用首先启动,主界面启动后,才弹出密码验证界面,体验太差,求解。

service中启动一个线程,时时监听log输出情况,当检测到有应用程序启动时,则启动密码验证界面

Thread thread = new Thread(new Runnable() {
public void run() {
while (flag) {
System.out.println("////////////////////////////////////////////////////");
String str1;// log
String str2;// 类名
String str3;// 包名
try {
// Log.e(TAG, "=========================");
Runtime localRuntime1 = Runtime.getRuntime();
String[] arrayOfString1 = new String[2];
arrayOfString1[0] = "logcat";
arrayOfString1[1] = "-c";
Process localProcess1 = localRuntime1.exec(arrayOfString1);
int i = localProcess1.waitFor();

Runtime localRuntime2 = Runtime.getRuntime();
String[] arrayOfString2 = new String[2];
arrayOfString2[0] = "logcat";
arrayOfString2[1] = "ActivityManager:I *:S";

Process localProcess2 = localRuntime2.exec(arrayOfString2);
InputStream localInputStream = localProcess2.getInputStream();
InputStreamReader reader = new InputStreamReader(localInputStream);
BufferedReader localBufferedReader = new BufferedReader(reader);

str1 = localBufferedReader.readLine();//获取log
am = (ActivityManager) ProtectorService.this.getSystemService("activity");
ComponentName componentName = ((ActivityManager.RunningTaskInfo) ProtectorService.this.am
.getRunningTasks(1).get(0)).topActivity;
str2 = componentName.getClassName();
str3 = componentName.getPackageName();
//是否为启动一个应用
boolean start = str1.contains("android.intent.category.LAUNCHER");
//是否被保护/密码锁应用
boolean protector = mRunProList.contains(str3) || str3.equals("com.innofidei.protector");
System.out.println("ispass==" + !isPass+";start="+start+";protector="+protector);

//如果应用被保护,且没有通过密码验证,则进入密码验证界面
//isPass标志应用是否通过密码验证
if (start && protector && !isPass) {
System.out.println("----------in------------>");
// 如果是地址薄和拨号应用,则通过log来确定访问的是哪个tab页
if (str3.equals("com.android.contacts")) {
Intent intent = new Intent();
intent.addCategory("android.intent.category.LAUNCHER");
intent.setAction("android.intent.action.MAIN");
if (str1.contains("DialtactsContactsEntryActivity")) {
str2 = "com.android.contacts.DialtactsContactsEntryActivity";
} else if (str1.contains("DialtactsActivity")) {
str2 = "com.android.contacts.DialtactsActivity";
}
intent.setComponent(new ComponentName(str3, str2));
MyApplication.intent = intent;
} else {
MyApplication.intent = am.getRecentTasks(1, 0).get(0).baseIntent;//设置密码验证后需要启动应用的intent
}

Intent lockIntent = new Intent(ProtectorService.this, PasswordLockActivity.class);
lockIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK).putExtra("pkg", str3)
.putExtra("where", "service");
startActivity(lockIntent);//启动密码验证界面
System.out.println("----------finish------------>");
}
isPass = false;//标记设置为false
} catch (Exception localException) {
return;
}
}
}
});










aSysBang 2011-09-23
  • 打赏
  • 举报
回复
反编译 Smart.App.Protector
flying_vip_521 2011-09-23
  • 打赏
  • 举报
回复
顶起来,顶起来
flying_vip_521 2011-09-23
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 l417584711 的回复:]

Smart.App.Protector
也是读取log的方式?
[/Quote]

Smart.App.Protector应该不是,因为反编译的源码中没有看到读取log的代码,貌似是通过getRunningTask来监听应用程序的启动。我用过这种方法,虽然能监听到应用的启动,但是却不能阻止应用的启动,所以会造成启动的应用主界面先出现,然后才出现密码验证界面。另外,针对“地址薄”和“拨号”,他们在同一个apk,通过包名获取到的intent不能启动“地址薄”和“拨号”中的任一个,我通过读取log的方式,主要是为了解决这个问题,因为通过log我可以知道程序要启动的是那个tab页,从而自己new一个intent来启动应用。

我不知道自己的问题是出在了哪里?求高手解决?


在反编译的代码中,输入密码时的代码为



public void onClick(View paramView)
{
String str = "";
switch (paramView.getId())
{
case 2131361831:
case 2131361835:
case 2131361839:
default:
label80: this.mPassEdit.append(str);
case 2131361828:
case 2131361829:
case 2131361830:
case 2131361832:
case 2131361833:
case 2131361834:
case 2131361836:
case 2131361837:
case 2131361838:
case 2131361841:
case 2131361842:
case 2131361840:
}
while (true)
{
return;
str = "1";
break label80:
str = "2";
break label80:
str = "3";
break label80:
str = "4";
break label80:
str = "5";
break label80:
str = "6";
break label80:
str = "7";
break label80:
str = "8";
break label80:
str = "9";
break label80:
str = "0";
break label80:
this.mPassEdit.setText("");
continue;
goHome();
}
}


感觉密码验证通过应该是调用的goHome()方法。


private void goHome()
{
Intent localIntent1 = new Intent();
localIntent1.setAction("android.intent.action.MAIN");
localIntent1.addCategory("android.intent.category.HOME");
localIntent1.addFlags(329252864);
//这里的intent为什么没有指定是哪个activity呢?我这样写直接回到home界面的
startActivity(localIntent1);
//下边这些代码又是做什么用的呢?看不明白呀
Intent localIntent2 = new Intent("android.intent.action.MAIN", null);
localIntent2.addCategory("android.intent.category.HOME");
if (getPackageManager().queryIntentActivities(localIntent2, 0).size() > 1);
while (true)
{
return;
finish();
}
}
aSysBang 2011-09-23
  • 打赏
  • 举报
回复
Smart.App.Protector
也是读取log的方式?
jeky_zhang2013 2011-09-10
  • 打赏
  • 举报
回复
需求是什么,防止私人信息被偷看?
看下activity的相关接口和生命周期,看能否在启动之前被截获
flying_vip_521 2011-09-09
  • 打赏
  • 举报
回复
求高手指点。。。。。。。。。。。。。
mylzc 2011-09-08
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 flying_vip_521 的回复:]

继续顶:

现在的问题是:当我拦截到应用的启动,并启动密码验证界面的时候,密码验证界面不是直接启动,而是在启动应用主界面以后才启动,造成应用主界面一闪而过,体验十分不爽,求解。
[/Quote]
可以试下设置intent-filter的优先级
http://yangguangfu.iteye.com/blog/1063732
加载更多回复(10)

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧