
android中有时候需要获取应用的签名信息,签名信息一般有:公钥,算法名,MD5值,序列号。要想获取这些信息首先该APK应用要有系统权限。
1 在配置文件里添加系统权限:android:sharedUserId="androiduidsystem"
2 获取签名信息的字符信息:
String signature_key = "";
try{
PackageInfo packageInfo = contextgetPackageManager()getPackageInfo(pkgName,
PackageManagerGET_SIGNATURES);
Signature[] signatures =
packageInfosignatures;
SignatureKeyparseSignature(signatures[0]toByteArray());
} catch (NameNotFoundException e) {
eprintStackTrace();
} catch (NullPointerException e) {
eprintStackTrace();
}
(1)其中packageInfo 得到的是指定包名的签名信息的字符串。另提及多说一句:在程序中我们一般使用
List list =
mPackageManagergetInstalledPackages(0);来得到所有的安装包的信息,这其中包括应用名,包名,大小
(2)
其中[]signatures里是存放的签名的字符串数组。我们一般取用第一个signatures[0]来做为该应用的签名信息。这里有一个疑惑就是为什么得到的是一个字符串的数组列表,而不是一个字符串,也有的开发者采用:
StringBuilder builder = new StringBuilder();
for(Signature sign: signatures
){
builderappend(signtoCharsString());
builderappend("/n");
}来得到所有的签名信息。在这里我验证过,signatures
的长度为1,所以指定apk的签名信息就为signatures[0]。
至于第二种方法有待发现。
3 获取签名的MD5值
public static final String getMD5String(byte[] paramArrayOfByte)
{
char[] asciiTable = { 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
97, 98, 99, 100, 101, 102 }; // ascii表对应的数字和字符的编码
try
{
MessageDigest md5MessageDigest =
MessageDigestgetInstance("MD5");
md5MessageDigestupdate(paramArrayOfByte);//
byte[]
tempByte = md5MessageDigestdigest();
int i =
tempBytelength;
char[] tempChar = new char[i
2];
int j = 0;
int k =
0;
while (true) { //
将二进制数组转换成字符串
if (j >= i)
{
return new
String(tempChar);
}
int m
= tempByte[j];
int n = k +
1;
tempChar[k] = asciiTable[(0xF & m >>>
4)];
k = n +
1;
tempChar[n] = asciiTable[(m &
0xF)];
j++;
}
}
catch (Exception e)
{
eprintStackTrace();
}
return
null;
}
(1) 其中参数就是上一步得到的签名的byte数组。
4 获取公钥,签名算法,签名序列号
public static void parseSignature(byte[] signature)
{
try
{
CertificateFactory
certFactory =
CertificateFactorygetInstance("X509");
X509Certificate cert = (X509Certificate) certFactorygenerateCertificate(new
ByteArrayInputStream(signature));
String pubKey =
certgetPublicKey()toString(); //公钥
String signNumber =
certgetSerialNumber()toString();
Systemoutprintln("signName:" +
certgetSigAlgName());//算法名
Systemoutprintln("pubKey:" +
pubKey);
Systemoutprintln("signNumber:" +
signNumber);//证书序列编号
Systemoutprintln("subjectDN:"+certgetSubjectDN()toString());
} catch (CertificateException e)
{
eprintStackTrace();
}
}
5 电脑查看APK签名信息
查看三方应用或是系统应用签名
用winrar打开待查看的apk,将其中META-INF文件夹解压出来,得到其中的CERTRSA文件
1keytool
-printcert -file META-INF/CERTRSA
命令是:keytool -printcert -file
<签名文件RSA的路径>
2jarsigner -verify -verbose -certs Superuserapk
此条未验证成功
支持原作者 : >
android怎么在代码里获得系统文件的读写权限
1、必须是Android系统开发人员,否则你无法修改initrc等文件。
2、你的应用程序必须要获得system权限。
在应用层 你要想用代码获得系统文件权限,除非你手机root了
要么你自己做rom。 自己修改 init,rc
本来以为就没有办法在应用程序这一层改系统时间了,后来在网上搜了好久,知道这个目的还是可以达到的。
第一个方法简单点,不过需要在Android系统源码的环境下用make来编译:
1 在应用程序的AndroidManifestxml中的manifest节点中加入
android:sharedUserId="androiduidsystem"这个属性。
2 修改Androidmk文件,加入LOCAL_CERTIFICATE := platform这一行
3 使用mm命令来编译,生成的apk就有修改系统时间的权限了。
第二个办法麻烦点,不过不用开虚拟机跑到源码环境下用make来编译:
1 同上,加入android:sharedUserId="androiduidsystem"这个属性。
2 使用eclipse编译出apk文件,但是这个apk文件是不能用的。
3 用压缩软件打开apk文件,删掉META-INF目录下的CERTSF和CERTRSA两个文件。
4 使用目标系统的platform密钥来重新给apk文件签名。这步比较麻烦,
首先找到密钥文件,在我的Android源码目录中的位置
是"build argetproductsecurity",下面的platformpk8和platformx509pem
两个文件。
然后用Android提供的Signapk工具来签名,signapk的源代码是
在"build oolssignapk"下,
用法为"signapk platformx509pem platformpk8 inputapk outputapk",
文件名最好使用绝对路径防止找不到,也可以修改源代码直接使用。
这样最后得到的apk和第一个方法是一样的。
最后解释一下原理,首先加入android:sharedUserId="androiduidsystem"这个属性。通过Shared User id,拥有同一个User id的多个APK可以配置成运行在同一个进程中。那么把程序的UID配成androiduidsystem,也就是要让程序运行在系统进程中,这样就有权限来修改系统时间了。
只是加入UID还不够,如果这时候安装APK的话发现无法安装,提示签名不符,原因是程序想要运行在系统进程中还要有目标系统的platform
key,就是上面第二个方法提到的platformpk8和platformx509pem两个文件。用这两个key签名后apk才真正可以放入系统进程中。第一个方法中加入LOCAL_CERTIFICATE := platform其实就是用这两个key来签名。这也有一个问题,就是这样生成的程序只有在原始的Android系统或者是自己编译的系统中才可以用,因为这样的系统才可以拿到 platformpk8和platformx509pem两个文件。要是别家公司做的Android上连安装都安装不了。试试原始的Android 中的key来签名,程序在模拟器上运行OK,不过放到G3上安装直接提示"Package has no signatures that match those in shared user androiduidsystem",这样也是保护了系统的安全。
Java代码
1、必须是Android系统开发人员,否则你无法修改initrc等文件。 2、你的应用程序必须要获得system权限。
在应用层 你要想用代码获得系统文件权限,除非你手机root了
要么你自己坐rom。。。。 自己修改 init,rc
1、必须是Android系统开发人员,否则你无法修改initrc等文件。 2、你的应用程序必须要获得system权限。 在应用层 你要想用代码获得系统文件权限,除非你手机root了 要么你自己坐rom。。。。 自己修改 init,rc
第一个方法简单点,不过需要在Android系统源码的环境下用make来编译:
1 在应用程序的AndroidManifestxml中的manifest节点中加入android:sharedUserId="androiduidsystem"这个属性。
2 修改Androidmk文件,加入LOCAL_CERTIFICATE := platform这一行
3 使用mm命令来编译,生成的apk就有修改系统时间的权限了。()
第二个方法
1 同上,加入android:sharedUserId="androiduidsystem"这个属性。
2 使用eclipse编译出未签名apk文件,
3 用google带的签名来签名
最最后还说下,这个android:sharedUserId属性不只可以把apk放到系统进程中,也可以配置多个APK运行在一个进程中,这样可以共享数据,应该会很有用的。如何使Android应用程序获取系统权限
安卓开发我想获取System许可权
System许可权需要先获取ROOT许可权,由于 /system 和 /data都是root使用者的目录,普通使用者没有读写许可权,需要获取root许可权才可以,修改。
目前应用市场有非常多的一键ROOT工具,这里就不举例了,功能基本都是一样的,Root许可权的获取方式:
1用手机连线电脑,下载一键root工具。
2下载成功后,开启一键ROOT软体。会出现root准备,点选下一步,正式开始root。
3检查root条件,要是需要档案备份的话,一定要备份后。点选开始ROOT。
4root正式开始,需要几钟左右时间,期间可能会重启数次,root就会完成。
5root完成后,就可以随意删除手机中的垃圾应用了包括系统应用。
当你获取root许可权后通过adb访问 /system/app目录:
adb shell 进入shell模式
su 切换到root使用者
chmod 777 /system/app 修改/system/app目录的许可权为 777即可
exit 退出root使用者
cd /system/app 即可进入/system/app 目录了
获取root许可权后,将apk复制到/system/app目录下即可。
如何获取System许可权@echo off
title 进入system
sc Create SuperCMD binPath= "cmd /K start" type= own type= interact
sc start SuperCMD
如何获取system许可权1、在开始/执行中输入:regedt32exe并回车来执行regedt32exe。
2、点“许可权”以后会d出视窗点新增将我登入时的帐户新增到安全栏内,这里我是以administrator的身份登入的,所以我就将administrator加入,并设定许可权为“完全控制"。这里需要说明一下:最好是新增你登入的帐户或帐户所在的组,切莫修改原有的帐户或组,否则将会带来一系列不必要的问题。等隐藏超级使用者建好以,再来这里将你新增的帐户删除即可。
3、再点“开始”→“执行”并输入"regeditexe" 回车,启动登录档编辑器regeditexe。 开启键:HKEY_LOCAL_MAICHINE\SAM\SAM\Domains\aount\user\names\hacker$"
4、将项hacker$、00000409、000001F4汇出为hackerreg、409reg、1f4reg,用记事本分别打这几个汇出的档案进行编辑,将超级使用者对应的项000001F4下的键"F"的值复制,并覆盖hacker$对应的项00000409下的键"F"的值,然后再将00000409reg与hackerreg合并。
5、在命令列下执行 user hacker$ /del将使用者hacker$删除: user hacker$ /del
6、在regeditexe的视窗内按F5重新整理,然后打档案-汇入登录档档案将修改好的hackerreg汇入登录档即可
7、到此,隐藏的超级使用者hacker$已经建好了,然后关闭regeditexe。在regedt32exe视窗内把HKEY_LOCAL_MACHINE\SAM\SAM键许可权改回原来的样子(只要删除新增的帐户administrator即可)。
8、注意:隐藏的超级使用者建好后,在帐户管理器看不到hacker$这个使用者,在命令列用“ user”命令也看不到,但是超级使用者建立以后,就不能再改密码了,如果用 user命令来改hacker$的密码的话,那么在帐户管理器中将又会看这个隐藏的超级使用者了,而且不能删除。
window7怎么获取system许可权在日常使用系统中,经常有一些像恶意顽固程式及无法删除档案、需要高许可权 *** 作、丢失密码、要求最高私密性的问题。在本文中,将教你如何使用Windows 7最高许可权账户system,解决各位TX的所有此类问题!(本文适用于所有NT6)
众所周知,在NT6中原本最高许可权的账户是TrustedInstaller,但此账户没有普通帐户的桌面,只能右键获取许可权,非常不便。但如果使用system,它拥有单独的桌面,可以像使用普通帐户一样使用,但又拥有所有TrustedInstaller的许可权,所以在该账户里进行特殊 *** 作更方便。
开始!
系统需调动system账户的时候只有载入档案启动、预登陆、关机的时候。只要在这时能开启explorerexe就能进入system帐户 *** 作。在启动和关机时无法呼叫任何程式,我们将焦点聚在预登入时。
预登入时,能调动的程式有:narratorexe(轻松访问中心)、shutdownexe(关机/重启)。又因后者调动引数,因此我们考虑将narratorexe替换成能调动explorerexe的程式。这样的程式有:taskmgrexe(工作管理员)、cmdexe、直接调动explorerexe。我们一般选择cmdexe。
先登入系统,如果是忘记密码或病毒可用winPE。先获取许可权,可获取TrustedInstaller许可权,用以下程式码储存成reg档案:
Windows Registry Editor Version 500
[HKEY_CLASSES_ROOT\\shell\runas]
@="Take Ownership"
"NoWorkingDirectory"=""
[HKEY_CLASSES_ROOT\\shell\runas\mand]
@="cmdexe /c takeown /f \"%1\" & icacls \"%1\" /grant administrators:F"
"IsolatedCommand"="cmdexe /c takeown /f \"%1\" & icacls \"%1\" /grant administrators:F"
[HKEY_CLASSES_ROOT\Directory\shell\runas]
@="Take Ownership"
"NoWorkingDirectory"=""
[HKEY_CLASSES_ROOT\Directory\shell\runas\mand]
@="cmdexe /c takeown /f \"%1\" /r /d y & icacls \"%1\" /grant administrators:F /t"
"IsolatedCommand"="cmdexe /c takeown /f \"%1\" /r /d y & icacls \"%1\" /grant administrators:F /t"
右键单击档案点管理员取得所有权,再将4X:\windows\system32\narrtorexe重新命名成cmdexe1,将cmdexe重新命名成narrtorexe,最后将cmdexe1重新命名成cmdexe。如果是DOS启动盘用以下命令:(X:为系统所在盘)
ren X:\windows\system32\narrtorexe cmdexe1
ren X:\windows\system32\cmdexe narrtorexe
ren X:\windows\system32\cmdexe1 cmdexe
这样就成功的开启了system。登出后,依次单击右下角的轻松访问中心 ------〉启动讲述人------〉应用 ,在命令提示符视窗中输入start explorer ,即可使用system登陆!
分流
开启system后,请转向需要的任务:
一:需特权、删档案
以安全模式进入system,直接删掉!
二:丢失密码
右键单击计算机,点选管理,进入里面的使用者。右键单击丢失密码帐户点设定密码即可!
三:保卫电脑!
新建一个标准使用者,然后删掉其他除system的所有帐户,包括Admor。这样别人只能使用那个标准账户。如果真的一点都不能让别人看,那删掉后就别新建了
win7系统怎么获取system许可权 win7系统获取system许可权的详细步骤win7 32获得system许可权的方法:
1、开启记事本,输入下列文字:
Windows Registry Editor Version 500
[HKEY_CLASSES_ROOT\\shell\runas]
@="获取许可权"
"NoWorkingDirectory"=""
[HKEY_CLASSES_ROOT\\shell\runas\mand]
@="cmdexe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F"
"IsolatedCommand"="cmdexe /c takeown /f \"%1\" && icacls \"%1\" /grant administrators:F"
[HKEY_CLASSES_ROOT\Directory\shell\runas]
@="获取许可权"
"NoWorkingDirectory"=""
[HKEY_CLASSES_ROOT\Directory\shell\runas\mand]
@="cmdexe /c takeown /f \"%1\" /r /d y && icacls \"%1\" /grant administrators:F /t"
"IsolatedCommand"="cmdexe /c takeown /f \"%1\" /r /d y && icacls \"%1\" /grant administrators:F /t"
2、然后储存为汇入reg档案;
3、然后双击汇入reg;
此时会d出警告提示,允许程式通过即可;
4、然后选择system,滑鼠右键选择获取许可权。
日常使用系统中,经常有一些像恶意顽固程式及无法删除档案、需要高许可权 *** 作、丢失密码、要求最高私密性的问题。在本文中,将教你如何使用Windows 7最高许可权账户system,解决各位TX的所有此类问题!
system可以做什么?
在非SYSTEM许可权下,使用者是不能访问某些登录档项的,比如
“HKEY_LOCAL_MACHINE\SAM”、“HKEY_LOCAL_MACHINE\SECURITY”等。这些项记录的是系统的核心资料,但
某些病毒或者木马经常光顾这里。比如在SAM专案下建立具有管理员许可权的隐藏账户,在预设情况下管理员通过在命令列下敲入“ user”或者在“本地使用者和组”(lusrmgrmsc)中是无法看到的,给系统造成了很大的隐患。在“SYSTEM”许可权下,登录档的访问就没有任何障碍,一切黑手都暴露无遗!
*** 作:开启登录档管理器,尝试访问HKEY_LOCAL_MACHINE\SAM和HKEY_LOCAL_MACHINE\SECURITY
那么现在,我们就可以无限访问而不受限制了~
说起windows的系统,大家一定都不陌生。但是电脑在法律上作为大家的所有物,是否真的拥有全部许可权呢?
通过cmd下的 user指令我们能够清楚的看到,在一般的系统中,存在的许可权有一下几个
伺服器托管景安最快!
点选进入
机房位于骨干节点,使用者访问网站全国最快。 景安—河南最大的多线伺服器托管商!
查 看
香港免备案VPS,便宜又稳定!
点选进入
骑士互联-专业提供香港免备案VPS,便宜,稳定 国内免备案vps,可自助管理,安装系统
查 看
以我个人的计算机为例,我是win7 64位的旗舰版系统,目录下有
administrator,GUEST,郑迟殿下这三个系统使用者,那么这些使用者是干嘛的呢?
从这张
恒讯达通讯 专业租手机
点选进入
恒讯达通讯,专业为企业提供手机租赁 服务的公司:13651075300
查 看
图可以明显看出(也就是一楼途中画红色圈圈),administrator使用者被我开启并且正在使用中,那么这个使用者是干嘛的呢?
没错,它就是超级管理员使用者!不过它一般预设是关闭的,这是微软为了使用者安全而设定的一个保护措施(开启的方式:在cmd文框中输入 user administrator /active:yes 注意空格,将yes改为no则关闭,但需要一定许可权),这里为了避免麻烦我还是直接使用了这个使用者,一般同学请不要随意开启哦~
一楼图中画绿色圈圈的就是来宾使用者(也就是guest),它的主要任务是为了避免电脑被客人或者其它人员恶意修改无法启动所设定的,一般情况下是预设开启的,当然也可以关闭它哦
同样也是借助 user指令(在cmd文字框中输入 user guest /active:no,同上)实现的
一楼图中画蓝色圈圈则是我自己用来执行虚拟机器、病毒等特殊档案所专门建立的使用者(当然也比较自恋),这里就不多做介绍
看到这里许多看官就会问,标题不是获取system许可权吗?怎么在 user指令中看不到system的使用者呢?
好问题!不过细心的使用者可能早就发现了这个来无影去无踪的神秘使用者以及它所拥有的神秘许可权
几乎所有的系统核心程序都隶属与system这个特殊的神秘的使用者,那么它是干嘛的呢?
system使用者是微软为了防止系统被恶意破坏和使用者乱使用系统许可权而设定的仅由机器管理的使用者,从开机到桌面载入完成都是由它在 *** 作,可以说,system是windows个人系统的最高统治者,以RW 0的许可权控制者整台机器,唯一的主宰者(即使你拥有administrator许可权,但是该使用者的许可权级别仅为RW 3,许可权远不及system)。既然是主宰为什么在登陆介面中没有它?系统出错了?
系统没有错,作为唯一的主宰者怎么会出现在系统欢迎登陆介面呢?你见过有哪个王站在城堡门口微笑的欢迎自己的臣民?
既然它是主宰者,又怎么会让我们这些“臣民”所控制呢?
这才是本帖的核心内容所在
方案一:这是一个以sc指令为基础的指令码,原理很简单,自己观察你会发现所有的服务都是由system所建立和执行的(请自行百度sc指令等相关知识,本文不做科普)
sc Create SuperCMD binPath= "cmd /K start" type= own type=
interact
sc start SuperCMD
它的奇妙之处在于建立了一个互动式服务,在启动之后,会d出交汇式服务检测,点选显示讯息即可进入来自system许可权下的桌面(不过你会发现只有一个属于system的命令符而不是administrator的命令符),借助隶属于system执行explorer就可以开启桌面了
方案一验证:你可以使用whoami指令对当前使用者进行验证,当然也可以核对HKCU,方法是在HKCU下随便新建一个Test子项,然后重新整理,再看看HKU\S-1-5-18下是否同步出现了Test子项,如果是,就说明系统当前载入的就是SYSTEM帐户的使用者配置单元
方案二:直接使用cmd指令以system的许可权载入explorer(等同于变相提权)
指令如下:
taskkill /f /im explorerexe
at time /interactive
%systemroot%\explorerexe
这样做有一个缺点,如果你登出了你所登入的帐号(如administrator),那么系统会提示你发生严重错误并且在一分钟内强制重启
验证同上
方案三:使用Support Tools提权(不推荐)
由于该方式有较多不确定因素,因此不做详细介绍,也不提供Support Tools的对应下载地址,请慎重 *** 作
方案四:通过psexec提权
这是个人非常推荐的方案,比较安全。这里我们利用psexec与控制台应用程式相当的完全互动性来实现提权(与方案一基本相同)
同样需要先做掉explorer,再重建,使其获得system许可权
taskkill /f /im explorerexe
psexec -i -s -d explorer
到此,对于system的介绍和许可权获取方法教程就结束了!
访问系统还原档案:
说明:系统还原是windows系统的一种自我保护措施,它在每个根目录下建立“System Colume Information”资料夹,储存一些系统资讯以备系统恢复是使用。如果你不想使用“系统还原”,或者想删除其下的某些档案,这个资料夹具有隐藏、系统属性,非SYSTEM许可权是无法删除的。如果以SYSTEM许可权登入你就可以任意删除了,甚至你可以在它下面建立档案,达到保护隐私的作用。
*** 作:在资源管理器中点选“工具→资料夹选项”,在d出的“资料夹选项”视窗中切换到
“检视”标签,在“高阶设定”列表中撤消“隐藏受保护的作业系统(推荐)”复选框,然后将“隐藏档案和资料夹”选择“显示所有档案和资料夹”项。然后就可以无限制访问系统还原的工作目录C:\System Volume Information了 ~
但是请不要随意修改,可能会造成系统回访的错误
手工防毒:
说明:使用者在使用电脑的过程中一般都是用Administrator或者其它的管理员用
户登入的,中毒或者中马后,病毒、木马大都是以管理员许可权执行的。我们在系统中毒后一般都是用防毒软体来防毒,如果你的杀软瘫痪了,或者防毒软体只能查出来,但无法清除,这时候就只能赤膊上阵,手工防毒了。在Adinistrator许可权下,如果手工查杀对于有些病毒无能为力,一般要启动到安全模式下,有时就算到了安全模式下也无法清除干净。如果以SYSTEM许可权登入,查杀病毒就容易得多。
*** 作:在system的许可权下,taskkill与ntsd指令变得很无敌,可以和ark级别的工具相媲美了,不过后者具有一定的危险性,慎用!
使用taskkill与ntsd指令,对病毒程序进行暴力结束,并且借助某些核心级工具对目标程序的驱动、服务、回拨进行暴力破坏也变得轻松,但是要注意识别,报蓝就不关我的事了~
总结:System许可权是比Administrator许可权还高的系统最高许可权,利用它可以完成很多常规情况下无法完成的任务,它的应用还有很多,我所举例的不过冰山一角。请记住,权利越大责任也就越大,任何事物都具有双面性,如果你拿不起,请放下。如果你非要拿起,那就用它来做有益的事情。当臣民拥有了比王更大的权利,能有几个人能不做谋权串位的事?只是希望不要利用这权利滥杀无辜罢了,电脑和系统,都是我们最亲近的朋友!
安卓开发中如何获取userId?当手机使用者(即User)下载你(即开发者)的应用程式,在安装(Install)时,Android就会给予一个UID。
在Packagelist(放在/data/system)中存放著系统各个程式的user id。你可以这样获取:
PackageManager pm = getPackageManager();
ApplicationInfo ai = pmgetApplicationInfo("gesoftbitlavendercloud", PackageManagerGET_ACTIVITIES);
Logd("!!", "!!" + aiuid);
这个uid和Linux下的uid含义可不同哦。
Android一直是单使用者作业系统,在Android 42中才加入了多使用者支援。
安卓开发中 怎么获取theme在Android 开发中全屏显示的方式有三种,分别介绍如下: 1、在Activity中进行设定,程式码如下: getWindow()setFlags(WindowManagerLayoutParamsFLAG_FULLSCREEN, WindowManagerLayoutParamsFLAG_FULLSCREEN); 此行程式码必须写在Activity指定布局档案之前,否则会报错误。 2、在android专案的主配置档案的application的属性中设定,设定方式一: android:theme="@android:style/ThemeNoTitleBarFullscreen" 3、在android专案的主配置档案的application的属性中设定,设定方式二: android:theme="@style/fullscreem"。
以上就是关于如何获取android 签名信息全部的内容,包括:如何获取android 签名信息、Android应用程序获取system权限、android怎么在代码里获得系统文件的读写权限等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)