1.schema判断是否安装了某app
①.判断代码
//schema协议前缀
NSString *schema = "wemeet://";
NSURL *url = [NSURL URLWithString:schema];
//判断应用是否安装
bool installed = [[UIApplication sharedApplication] canOpenURL:url];
②.在info.plist文件新增配置
新增key:LSApplicationQueriesSchemes
Type:Array
。
新增items,配置需要识别的app schema参数。
2.如何获取AppStore上某个App的Schema配置列表
①在Mac OSX中安装Apple Configurator 2
软件,打开软件并在apple账号
②准备一台iPhone,该设备上登录的账号和Apple Configurator 2
登录的账号保持一致,并手机连接到电脑上。
③打开iPhone设备上的AppStore app,搜索你所需的app,点击安装按钮,等app安装成功后再进行下一步。
④在Apple Configurator 2
软件的所有设备
面板中双击选中设备,点击添加
->在搜索栏输入刚在iPhone设备中下载的App->搜索到后点击选中App->点击添加
按钮。
⑤下载后会询问iPhone中已经存在该app的提示信息,注意这一步非常重要,弹出对话框后不要对对话框做任何操作,进入下一步。
⑥打开finder(访达)
,按快捷键shift+command+G
,在弹出前往文件夹
对话框中输入内容~/Library/Group Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps
,再敲下回车。进入文件夹可以看到刚才下载的app的安装包。
⑦解压ipa文件找到info.plist文件并找到schema配置列表
将要.ipa
文件的扩展名改成.zip
解压文件,然后进入Payload
文件夹->右击XXX
文件->选择查看包内容
->找到info.plist文件,用文本编辑器打开该文件,找到CFBundleURLTypes
配置项,配置项下就是schema列表。
我写了一个快速查看.ipa
Schema内容的Java程序,如下:
依赖
<dependency>
<groupId>com.googlecode.plist</groupId>
<artifactId>dd-plist</artifactId>
<version>1.23</version>
<scope>test</scope>
</dependency>
ParseIpaTests.java
public class ParseIpaTests {
public static void main(String[] args) {
String path = "/Users/pengjianbo/Library/Group Containers/K36BKF7T3D.group.com.apple.configurator/Library/Caches/Assets/TemporaryItems/MobileApps";
File file = new File(path);
if (file.exists()) {
File[] files = file.listFiles();
if (files == null || files.length == 0) {
return;
}
File dir = files[0];
File[] files2 = dir.listFiles();
if (files2 == null || files2.length == 0) {
return;
}
for (File file1 : files2) {
if(!file1.isDirectory()){
continue;
}
File[] files3 = file1.listFiles();
if (files3 == null || files3.length == 0) {
return;
}
for (File f : files3) {
if (!StringUtils.endsWith(f.getAbsolutePath(), ".ipa")) {
continue;
}
IpaService.getIpaInfoMap(f.toString());
}
}
}
}
}
IpaDao.java
public class IpaDao {
private static final int buffer = 2048;
/**
* 解压Zip文件
* @param ipaPath 文件目录
* @throws IOException
*/
public static File unZip(String ipaPath) throws IOException {
int count = -1;
File file = null;
InputStream is = null;
FileOutputStream fos = null;
BufferedOutputStream bos = null;
ZipFile zipFile = null;
File result = null;
String savepath = "";
savepath = ipaPath.substring(0, ipaPath.lastIndexOf(".")) + File.separator;
File existsSavePath = new File(savepath); // 创建保存目录
if(existsSavePath.exists()){
existsSavePath.delete();
}
existsSavePath.mkdir();
zipFile = new ZipFile(ipaPath); // 解决中文乱码问题
Enumeration<?> entries = zipFile.entries();
while (entries.hasMoreElements()) {
byte buf[] = new byte[buffer];
ZipEntry entry = (ZipEntry) entries.nextElement();
String filename = entry.getName();
boolean ismkdir = false;
// 检查此文件是否带有文件夹
if (filename.lastIndexOf("/") != -1) {
ismkdir = true;
}
filename = savepath + filename;
// 如果是文件夹先创建
if (entry.isDirectory()) {
file = new File(filename);
file.mkdirs();
continue;
}
file = new File(filename);
// 如果是文件夹先创建
if (!file.exists()) {
if (ismkdir) {
new File(filename.substring(0, filename.lastIndexOf("/"))).mkdirs(); // 目录先创建
}
}
file.createNewFile(); // 创建文件
//判断文件名字
if(filename.endsWith(".app/Info.plist")) {
result = new File(filename);
}
is = zipFile.getInputStream(entry);
fos = new FileOutputStream(file);
bos = new BufferedOutputStream(fos, buffer);
while ((count = is.read(buf)) > -1) {
bos.write(buf, 0, count);
}
bos.flush();
bos.close();
fos.close();
is.close();
}
zipFile.close();
try {
if (bos != null) {
bos.close();
}
if (fos != null) {
fos.close();
}
if (is != null) {
is.close();
}
if (zipFile != null) {
zipFile.close();
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
IpaService.java
public class IpaService {
/**
* 1.生成info.plist文件的键值对
*
* @param ipa 输入api文件的路径
* @return map Info.plist文件中的信息转为键值对 .api文件---->.zip文件---->返回Info.plist
*/
public static String getIpaInfoMap(String ipaPath) {
try {
File Infofile = IpaDao.unZip(ipaPath);
// 解析路径中的文件,封装到map集合
NSDictionary parse = (NSDictionary) PropertyListParser.parse(Infofile);
try {
NSString CFBundleDisplayName = (NSString) parse.get("CFBundleDisplayName");
if(CFBundleDisplayName == null){
CFBundleDisplayName = (NSString) parse.get("CFBundleName");
}
System.out.println("CFBundleDisplayName=" + CFBundleDisplayName.getContent());
NSArray urlTypes = (NSArray) parse.get("CFBundleURLTypes");
if (urlTypes == null) {
return null;
}
for (NSObject nsObject : urlTypes.getArray()) {
NSDictionary dictionary = (NSDictionary) nsObject;
NSArray nsArray = (NSArray) dictionary.get("CFBundleURLSchemes");
if (nsArray == null) {
return null;
}
for (NSObject object : nsArray.getArray()) {
NSString nsStr = (NSString) object;
System.out.println("CFBundleURLSchemes=" + nsStr.getContent());
}
}
}catch (Throwable e){
e.printStackTrace();
}
String infoPlist = digui(parse, -1);
return infoPlist;
} catch (Exception e) {
JPanel panel = new JPanel();
JOptionPane.showMessageDialog(panel, "文件类型不支持", "提示", JOptionPane.WARNING_MESSAGE);
}
return null;
}
/**
* 2.递归方法
*
* @param sb
* @return
*/
public static String digui(NSDictionary parse, int count) {
++count;
StringBuffer sb = new StringBuffer();
for (Map.Entry<String, NSObject> entry : parse.entrySet()) {
// 获取文档键对应的值
String object = entry.getValue().toString();
// 获取文档键
String key = entry.getKey();
// 1.判断是否是其他类型
if (object.contains("NSArray") || object.contains("NSDictionary")) {
// 1.1数组类型判断
if (object.contains("NSArray")) {
NSObject[] array = ((NSArray) parse.get(key)).getArray();
// 1.1.1先添加主键
for (int i = 0; i < count; i++) {
sb.append("\t");
}
sb.append(key + ":" + "\r\n");
// 1.1.2判断值类型
for (int i = 0; i < array.length; i++) {
//如果是字典类型,继续递归
if (array[i].toString().contains("NSDictionary")) {
NSDictionary parse3 = (NSDictionary) array[i];
String digui2 = digui(parse3, count);
sb.append(digui2);
}
//如果是数值,直接添加
else {
for (int j = 0; j < count; j++) {
sb.append("\t");
}
sb.append("\t" + array[i] + "\r\n");
}
}
}
//1.2字典类型判断
else {
for (int i = 0; i < count; i++) {
sb.append("\t");
}
sb.append(key + ":" + "\r\n");
NSDictionary parse2 = (NSDictionary) parse.get(key);
String digui3 = digui(parse2, count);
sb.append(digui3);
}
}
// 2.如果是键值对类型直接添加
else {
for (int i = 0; i < count; i++) {
sb.append("\t");
}
sb.append(key + ":" + parse.get(key) + "\r\n");
}
}
return sb.toString();
}
}
schema列表(金融借贷、高风险应用)
金融借贷
应用名称 Schema 应用名称 Schema 柚卡 hnzycfctqh 连连来钱 wx12a20f8d38242e27或LSApplicationQueriesSchemes 拍拍贷 loan.ppdai.com 秒贷款 wxed7adf75b1686f8d 榕树贷 brbanyanrxq 捷信金融 capp或capppro 省呗 shansmycredit 洋钱罐借款 zebra 招联金融 muapp或mucfcapp 小赢分期 xyfq 新浪金融 sinajr 拉卡拉 lkl 你我贷 jiaxuedai 好分期 hfqdl 平安好贷 pahd 哈银消金 hrbbapp 有钱花 duxiaomanloan 幸福花 hcfc-url 360借条 qihooloan 维信闪贷 vblotloan 安逸花 msxfayh或ayh 蒙商消费金融 com.baoyin.credit 分期乐 fenqile 中邮钱包 zywallet 小米贷款 miloan 众安小贷 zaloan 中原消费金融 hnzycfc 虫虫借钱 tcfclient 携程金融 CtripFinanceIphone或CtripFinancephone 戒易花 alipay20200908jiyihua 榕易有钱 brbanyan 喜鹊快贷 yddapp 度小满金融 duxiaomanwallet或dxmwallet 万达普惠 wandaph或wandapuhui 够花 Gouhua 融360贷款 R360BigApp 还呗 huanbei或eloan 大地时贷 wx990b73cc7f6f7b58 来分期 laifenqi 秒借钱包 daikuangou 微贷借款 CreditLoan 金山金融 com.kingsoft.finance.ios 时光分期 shiguangfenqi 功夫贷 gongfudai 宜人贷借款 dkzs或yrdweb 微博钱包 weiboqb 小米借条 miloanx 短借 wx8c159bc0ea6b0167 小马花花 msxfxmhh或msxfxmhh.msxf.com 携程借款 CtripJdIphone或CtripJdphone 摇钱花 xywallet 好来贷 com.jinqiao.app.fsb 360信用钱包 qihooloanxyqb 无域借贷款 wx78c5ff4e90635095 万卡 wanka 运呗 yunbei 新浪分期 xlfq或XLFQby 借钱花 mycardpro或cardniu 豆豆钱 doudoumoneyschem 安逸花极速版 ayhlite 备胎信用 btcredit 融360贷款 R360BigApp 人人贷借款 rrdloan 有钱花极速版 duxiaomanloanlite 魔借 drm-borrower或dianrong-speedloan 苏宁金融 SuningEfubao或com.suning.jr 海尔消费金融 haiercashhf或haiercashlx 极融借款 geerong 小闪分期 com.weishangtech.kskd 随借 wx23183233650713f6 省呗 smycredit 团贷网借款 tuandailoan 马上金融 msxfapp或msxfFinance 晋享钱包 jxqb 天星金融 mifi 顺丰金融 sfpay 万达贷 wdp或wdsd 小花钱包 xhqball 360分期贷 qihooloanfenqidai 你我贷 niwodai 榕树借条 brbanyanrxq 杭银金融 hyxfapp或HyxfApp 国美金融 mylc或gmfinstall 苏宁消费金融 sncfc或sncfcrxf 还呗-还享借 hbcash 中银消费金融 boccfc 平安普惠 PAYiDai 平安消费金融 pacfc 新橙优品 xincheng 长银消费金融 LoanRouter 花鸭借钱 ppxiaodai或leading.huayajieqian.com 华融消费金融 hrcfc 人品贷极速版 en51rpd 阳光消费 ygxf 民生易贷 msyd或MSYiDai 金美信金融 wx58b7be61ba0c7dee 备好贷 btloan 尚诚消费金融 shangcheng 安心花 wx017de833e85e4969 盛银消费金融 cn.com.syxfjr.ios 平安贷款 pinganbankloan 好哒白条 wx49abd2e0bb9054c6 招联好期贷 hqd 信而富 crfMarket 度小满金融Lite bwapp或baiduwallet或dxmwallet 鑫梦享 wx4dc5cf62862e49d2 分期乐借钱 fenqileBorrow 易开花 bobcfc 国美易卡 gomeyk 消邦 hyxbapp 快易花 wdkyh KOO钱包 koou U钱包 drm-uloan 小鱼福卡 fishcard 任意花 easymoney 融易分期 ryfq 羊小咩 xyqb 空手到 icfapp 宜享花 yixianghua 易启分期 hengshenhuo 维信卡卡贷 kkcreditSchem 嗨袋 hubeicfcApp 浪小花 wb898990797 畅行花 comchangxinghuacxh 榕树贷款 brbanyan 桔多多 juzifenqi 58好借 JRHaoJie 云联掌柜 ylzg 百信银行 bxbank 分期易 qmwalle1Enterprise 高风险(VPN/赌博/改机/等)
应用名称 Schema 应用名称 Schema dream gaming dgcom Cydia cydia 轻蜂 QingFeng Melon VPN mvpn 蓝鲸 LanJing VPN fb2402988699750088 快滚加速器 wx3fc209ff51356358 VPN Master fb198196255460714 豌豆代理 peaScheme VPN vpn 羚羊加速器 lingyang Aloha alohabrowser SpeedCN wx8e8fc8f4aacfc4ac ProtonVPN protonvpn 雷霆加速器 ixf PowerVPN fb2497899243660498 雄鹰加速器 XiongYing SkyBlueVPN fb1125906797743109 Ad Blocker VRNGuard UltraVPN hexatech 爱加速 wx3405e18bc8a44f32 Kiwi VPN fb496564300896313 PandaVPN PandaProSchemes VPN-Speed vpnspeed VPN Vault avvpn VPN fb565441297335453 VPN Master masterVPN VPN Point fb460872174508891 Turbo VPN turboVPN Daily VPN open-dailyvpn VPN – Super Unlimited Proxy fb828149437372042 SkyVPN skyvpn Betternet betternet VPNHUB com.appatomic.vpnhub Free VPN fb1075780229101015 VPN – Unlimited Best VPN Proxy fb365179700576422 NordVPN nordvpn SillyDuckVPN shayavpn X-VPN fb314076509753471 Hotspot VPN - VPN Proxy Master fb1556715627872273 ArmorVPN fb2802590519990758 PandaVPN PandaLiteSchemes ExpressVPN expressvpn Windscribe com.windscribe Quark VPN ss Storm Vpn fb2805514809729562 Atlas VPN ATLASVPN iTopVpn fb5467826609957522 VPN 360 vpn360 VPN fb716550731879004 Psiphon psiphon VPN fb424636185280544 Secure VPN fb1035581440282875 VyprVPN vyprvpn Jet VPN jetvpn RayVPN vpnext VPN Panther fb2512983252125630 TorVPN vpntorbrowser
3 条评论
有个APP安全需求,还考虑接个私活?
啥活,说明下需求。邮箱:pengjianbosoft@gmail.com
谢谢分享~~