开发插件啊。简单的,利用intent将B中的界面拉起来进行处理,这是一种伪插件模式正经的一种框架为:利用PackageManagergetInstalledPackages来获取并筛选出属于A的插件,也就是B,并可以获知里面的package name和activity name。使用限定包名和类名的方式(Intent intent = new Intent(); ComponentName compList = new ComponentName("comandroid", "comandroid"); intentsetComponent(compList);)startActivity()就可以了,不过这样的插件模式还是挺没有意义的。最好的插件应该首先将A和B两个apk定义一样的sharedUserId,然后只是利用contextgetClassLoader()loadClass()之后利用反射直接调用插件里面定义的方法而不是拉起界面。
所需工具:aapt,Android SDK中的工具,只有一个exe,可以直接运行。
keytool,JDK中的工具,需要安装JDK环境。
需要提供目标应用的apk
1、获取包名
例如:aaptexe dump badging C:\Users\Administrator\Desktop\demo-apk-1018791apk > C:\Users\Administrator\Desktop\1txt
获取到的包名是compakgnameswbg
2、获取签名
SHA1: 56:BD:02:6B:9D:53:D7:F5:32:B2:BC:BD:BB:34:5B:F1:CD:EF:7F:C0
这里借助github开源的类apkparser
在项目composerjson中执行下面命令或修改composerjson引入即可
方法二适用于没有JAVA环境的情况下,一般linux都会有openssl环境。
原理:通过分析方法一中,发现apk包解压之后,里面会有rsa签名证书,此证书是一个符合pki体系的x509证书,通过openssl命令即可查看信息。
方法一 用重签名工具,这个在Robotium 中用得比较多
另外一种方式用命令方获取
Aapt dumpbadging xxxxapk
第一个框为包名
第二个框为主Activity名
如果取包名与Activity在命令行中不方例还可以用以下方式获取
Aapt dumpbadging xxxxapk >c:\apktxt
之后打开c:\apktxt
第三种方式,如果你装了Appium 可以这么 *** 作下
进入设置页,选择APK 路径,下面就会显示包名和Activity名称
第四种用hierarchyviewer 查看
Aapt 命令
AAPT dump xmltree XXXAPK AndroidManifestxm >ctxt
之后去CTXT 查看
第6种
Adbshell dumpsys activity activities >d:\logtxt
之后去logtxt 搜package 和Activity
第七种
Adb logcag >d:\3txt
之后打开手机上的应用
打开之后立即在电脑上按ctrl+c
之后去3txt 找PACKAGE和Activity
在发布应用的时候,需要通过keystore文件对apk包进行签名,才能发布到市场上。
在使用微信平台服务时或者其他需要提供MD5值的时候,该如何获取APK/签名文件的SHA1证书,MD5呢?
提供三种种方式:
1通过Android Studio的命令输入来获取:
keytool -list -v -keystore xxxjks
keytool -list -v -keystore xxxkeystore
2通过解压apk来获取:
1) 将apk修改后缀为 rar文件后解压;
2) 进入解压后的META-INF目录,该目录下会存在文件CERTRSA
3) 在该目录下打开cmd,输入命令 :keytool -printcert -file CERTRSA
3通过Eclipse获取
依次在 Eclipse 中打开 Window -> Preferances -> Android -> Build。
Well done!
安卓的APK么?
安卓的APK是个压缩包格式,我给你个思路 具体代码你去写 还是比较简单的
分为两步:①上传按钮点击时解压APK压缩包
②获取压缩包内AndroidManifestxml(apk的包名,版本号,版本名称都在此XML文件内)
③解析这个XML
既然答了 我就完善一下:(在codeplex上面找到的)
using AndroidXml;
using IonicZip;
using System;
using SystemCollectionsGeneric;
using SystemIO;
using SystemLinq;
using SystemText;
using SystemThreadingTasks;
using SystemXml;
namespace APKRead
{
class NamespaceInfo
{
public string Prefix { get; set; }
public string Uri { get; set; }
}
class Program
{
static List<AndroidInfo> androidInfos = new List<AndroidInfo>();
static void Main(string[] args)
{
//要分析的文件名称
var manifest = "AndroidManifestxml";
//读取apk,通过解压的方式读取
using (var zip = ZipFileRead("Newsapk"))
{
using (Stream zipstream = zip[manifest]OpenReader())
{
//将解压出来的文件保存到一个路径(必须这样)
using (var fileStream = FileCreate(manifest, (int)zipstreamLength))
{
// Initialize the bytes array with the stream length and then fill it with data
byte[] bytesInStream = new byte[zipstreamLength];
zipstreamRead(bytesInStream, 0, bytesInStreamLength);
// Use write method to write to the file specified above
fileStreamWrite(bytesInStream, 0, bytesInStreamLength);
}
}
}
//读取解压文件的字节数
byte[] data = FileReadAllBytes(manifest);
if (dataLength == 0)
{
throw new IOException("Empty file");
}
#region 读取文件内容
using (var stream = new MemoryStream(data))
{
var reader = new AndroidXmlReader(stream);
while (readerRead())
{
switch (readerNodeType)
{
case XmlNodeTypeElement:
{
AndroidInfo info = new AndroidInfo();
androidInfosAdd(info);
infoName = readerName;
infoSettings = new List<AndroidSetting>();
for (int i = 0; i < readerAttributeCount; i++)
{
readerMoveToAttribute(i);
AndroidSetting setting = new AndroidSetting() { Name = readerName, Value = readerValue };
infoSettingsAdd(setting);
}
readerMoveToElement();
break;
}
}
}
}
#endregion
FileDelete(manifest);
StringBuilder builder = new StringBuilder();
foreach (var androidInfo in androidInfos)
{
builderAppend(stringFormat("{0}:",androidInfoName));
foreach (var setting in androidInfoSettings)
{
builderAppend("{");
builderAppend(stringFormat("'{0}':'{1}'",settingName,settingValue));
builderAppend("},");
}
builderAppend("\n\n");
}
ConsoleWriteLine(builderToString());
}
}
/// <summary>
/// android应用程序信息
/// </summary>
public class AndroidInfo
{
public string Name { get; set; }
public List<AndroidSetting> Settings { get; set; }
}
/// <summary>
/// 设置
/// </summary>
public class AndroidSetting
{
public string Name { get; set; }
public string Value { get; set; }
}
}
//引用的IonicZip库可以直接通过 nuget下载。
一个安卓应用的apk查看包名的具体步骤如下:
1、首先将手机和电脑连接在一起,点击打开开始菜单栏中的“运行”选项。
2、然后在d出来的窗口中点击输入“CMD”,回车确定。
3、然后在d出来的窗口中点击输入“adb shell dumpsys package”,回车确定。
4、然后在就显示包名了。
这个apk
1jadx分析发现密码验证就放在so层的securityCheck(String str)这个函数里
2在IDA里进行调试
发现有反调试,那么下一步就是先把反调试给破解了。
3经过调试发现崩在这里
这里的v6应该就是密码
以上就是关于如何获取一个安装包(apk)的所有活动(activity)全部的内容,包括:如何获取一个安装包(apk)的所有活动(activity)、PHP获取安卓apk包里的apk签名、如何获取apk包的包名和activity等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)