精华内容
下载资源
问答
  • 引言 App要上苹果支付渠道,苹果...只能提高应用的安全性,防止支付信息泄露或被篡改,因此打算引入https这种安全传输协议。 什么是Https,与Http有哪儿些异同 HTTPS(全称:Hypertext Transfer Protocol over...

    引言

          App要上苹果支付渠道,苹果支付票据容易被人篡改、伪造,造成平台收益与实际交易额对不上;且由于苹果支付平台暂时没有对账功能,造成很难区分真伪;只能提高应用的安全性,防止支付信息泄露或被篡改,因此打算引入https这种安全传输协议。

    什么是Https,与Http有哪儿些异同

         HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。 它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统的最初研发由网景公司进行,提供了身份验证与加密通讯方法,现在它被广泛用于万维网上安全敏感的通讯,例如交易支付方面。

    https协议需要到ca申请证书,一般免费证书很少,需要交费。http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议;
    http和https使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443。
    http的连接很简单,是无状态的,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全。
    HTTPS解决的问题:
          1 . 信任主机的问题. 采用https 的server 必须从CA 申请一个用于证明服务器用途类型的证书. 该证书只有用于对应的server 的时候,客户度才信任次主机. 所以目前所有的银行系统网站,关键部分应用都是https 的. 客户通过信任该证书,从而信任了该主机. 其实这样做效率很低,但是银行更侧重安全.
          2 . 通讯过程中的数据的泄密和被窜改。
    (摘自百度百科)

          HTTP超文本传输协议 (HTTP-Hypertext transfer protocol) 是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通过因特网传送万维网文档的数据传送协议。

    Https请求交互过程

          1.peer终端发送一个request,https服务端把支持的加密算法等以证书的形式返回一个身份信息(包含ca颁发机构和加密公钥等)。

          2.获取证书之后,验证证书合法性。

          3.随机产生一个密钥,并以证书当中的公钥加密。

          4.request https服务端,把用公钥加密过的密钥传送给https服务端。

          5.https服务端用自己的密钥解密,获取随机值。

          6.之后双方传送数据都用此密钥加密后通信。

    时序图如下:

    第一步:服务器端配置

    1、生成密钥库和证书:

         因使用java环境,下面使用jdk下面的keytool工具来生成相应的密钥库和证书,下面的命令是在windows 7 下面测试通过的,可以直接复制使用
         1)创建目录,如d:/sslDemo
         2)使用资源管理进入d:/sslDemo,按住shift+右键,弹出菜单,选择"在此处打开命令行".
         3)生成服务器证书库

    keytool -validity 36500 -genkey -v -alias server -keyalg RSA -keystore server.keystore -dname "CN=www.itjoyee.com,OU=itjoyee.com,O=itjoyee.com,L=Wuhan,ST=HuBei,c=cn" -storepass 123456 -keypass 123456
    注: 服务器证书库参数“CN”必须与服务端的IP地址相同,否则会报错,客户端的任意。(有些信息可有可无,例如L,St等)

      回车,会提示你输入一些个人信息及组织信息如: 
      What is your first and last name? 
      What is the name of your organizational unit? 
      What is the name of your organization? 
      What is the name of your City or Locality? 
      What is the name of your State or Province? 
      What is the two-letter country code for this unit? 
      Is <CN=***, OU=***, O=***, L=***, ST=***, C=CN> correct? 
      这里输入yes,回车即可。 

    公共名称(cn)应该是服务器的域名。 


    JDK中keytool常用命令 
    -genkey      在用户主目录中创建一个默认文件".keystore",还会产生一个mykey的别名,mykey中包含用户的公钥、私钥和证书 
    -alias       产生别名 
    -keystore    指定密钥库的名称(产生的各类信息将不在.keystore文件中 
    -keyalg      指定密钥的算法  
    -validity    指定创建的证书有效期多少天 
    -keysize     指定密钥长度 
    -storepass   指定密钥库的密码 
    -keypass     指定别名条目的密码 
    -dname       指定证书拥有者信息 例如:  "CN=sagely,OU=atr,O=szu,L=sz,ST=gd,C=cn" 
    -list        显示密钥库中的证书信息      keytool -list -v -keystore sage -storepass .... 
    -v           显示密钥库中的证书详细信息 
    -export      将别名指定的证书导出到文件  keytool -export -alias caroot -file caroot.crt 
    -file        参数指定导出到文件的文件名 
    -delete      删除密钥库中某条目          keytool -delete -alias sage -keystore sage 
    -keypasswd   修改密钥库中指定条目口令    keytool -keypasswd -alias sage -keypass .... -new .... -storepass ... -keystore sage 
    -import      将已签名数字证书导入密钥库  keytool -import -alias sage -keystore sagely -file sagely.crt 
                 导入已签名数字证书用keytool -list -v 以后可以明显发现多了认证链长度,并且把整个CA链全部打印出来。


          4)从服务器证书库中导出服务器证书(如果是web服务到此可以结束)
    keytool -export -v -alias server -keystore server.keystore -storepass 123456 -rfc -file server.cer

          5)生成客户端信任证书库(由服务端证书生成的证书库,客户端使用此证书验证服务端来源可靠)
    keytool -import -v -alias server -file server.cer -keystore client.truststore -storepass 123456 -storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider

    注:-storetype BKS 是生成android上面可以识别的格式,如果不指定jdk默认生成的格式是JKS.
    -provider org.bouncycastle.jce.provider.BouncyCastleProvider,需要下载jar包bcprov-jdk16-1.46.jar放到jdk1.7.0_65\jre\lib\ext\目录下.
    注意需要jdk16,其他的版本android下面有版本不匹配的问题.

          6)生成客户端证书库
    keytool -validity 36500 -genkeypair -v -alias client -keyalg RSA -storetype PKCS12 -keystore client.p12 -dname "CN=clients.itjoyee.com,OU=jiajianfa,O=jiajianfa,L=Wuhan,ST=HuBei,c=cn" -storepass 123456 -keypass 123456

         7)从客户端证书库中导出客户端证书
    keytool -export -v -alias client -keystore client.p12 -storetype PKCS12 -storepass 123456 -rfc -file client.cer

    注:客户端证书可以产生多个.

         8)将客户端证书导入到服务器证书库(使得服务器信任客户端证书,服务器端用此验证客户端的合法性)
    keytool -import -v -alias client -file client.cer -keystore server.keystore -storepass 123456

          9)查看服务端证书中信任的客户端证书
    keytool -list -keystore server.keystore -storepass 123456

    2、服务器端配置
    由于使用tomcat,下面使用tomcat做为实例配置.
    2.1、在tomcat安装目录下新建key目录,将上面生成的server.keystore复制过去.
    2.2、编辑tomcat安装目录下的conf目录下的server.xml,如:d:\sslDemo\apache-tomcat-7.0.55\conf\server.xml
    找到Connector,修改如下:

    1 <Connector port="8444" protocol="org.apache.coyote.http11.Http11NioProtocol" 
    2            maxThreads="150" 
    3            SSLEnabled="true" scheme="https" secure="true"
    4            keystoreFile="${catalina.base}/key/server.keystore" keystorePass="123456"
    5            
    6            clientAuth="true" sslProtocol="TLS"
    7            truststoreFile="${catalina.base}/key/server.keystore" truststorePass="123456"/>

    注:           
    port配置https访问的端口
    SSLEnabled="true" 开启https服务
    scheme="https"
    secure="true"    开启服务端安全通信,客户端获取服务器端证书
    keystoreFile="${catalina.base}/key/server.keystore" keystorePass="123456" 服务器证书库

    clientAuth="true" 开启验证客户端
    sslProtocol="TLS" 使用的协议
    truststoreFile="${catalina.base}/key/server.keystore" truststorePass="123456" 服务器证书库(已导入客户端证书)

    3、测试
    由于生成证书CN配置的是www.itjoyee.com,故需要修改C:\Windows\System32\drivers\etc\hosts
    添加

    192.168.0.50    www.itjoyee.com
    注:
    192.168.0.50 为服务器的ip

    启动tomcat
    打开浏览器
    地址栏输入 http://www.itjoyee.com:8080/
    可以访问

    地址栏输入https://www.itjoyee.com:8444/
    访问结果,为无法显示,因为,没有使服务器端生成的信任的客户端证书

    双击client.p12,输入密码,在此访问https://www.itjoyee.com:8444/
    此时会有证书相关的提示,点击"确认",接着会提示网站安全证书有问题,点击继续访问,即可进入正常访问页面

    4、tomcat下的服务强制使用ssl配置
    已ROOT服务为例,修改D:\sslDemo\apache-tomcat-7.0.55\webapps\ROOT\WEB-INF\web.xml
    添加

    1 <security-constraint>       
    2     <web-resource-collection>
    3         <web-resource-name >SSL</web-resource-name>  
    4         <url-pattern>/*</url-pattern>
    5     </web-resource-collection>
    6     <user-data-constraint>
    7         <transport-guarantee>CONFIDENTIAL</transport-guarantee>  
    8     </user-data-constraint>
    9 </security-constraint>

    打开浏览器
    地址栏输入 http://www.itjoyee.com:8080/会有证书相关提示

    第二步:Android工具类

    为了方便测试android下双向认证可以用,生成证书的时候把域名换成服务器的ip地址,验证才可以通过。

     1 public class HttpClientSslHelper {
     2     private static final String KEY_STORE_TYPE_BKS = "bks";
     3     private static final String KEY_STORE_TYPE_P12 = "PKCS12";
     4     private static final String SCHEME_HTTPS = "https";
     5     private static final int HTTPS_PORT = 8444;
     6     
     7     private static final String KEY_STORE_CLIENT_PATH = "client.p12";
     8     private static final String KEY_STORE_TRUST_PATH = "client.truststore";
     9     private static final String KEY_STORE_PASSWORD = "123456";
    10     private static final String KEY_STORE_TRUST_PASSWORD = "123456";
    11     private static KeyStore keyStore;
    12     private static KeyStore trustStore;
    13     public static HttpClient getSslHttpClient(Context pContext) {
    14         HttpClient httpsClient = new DefaultHttpClient();
    15         try {
    16             // 服务器端需要验证的客户端证书
    17             keyStore = KeyStore.getInstance(KEY_STORE_TYPE_P12);
    18             
    19             // 客户端信任的服务器端证书
    20             trustStore = KeyStore.getInstance(KEY_STORE_TYPE_BKS);
    21             
    22             InputStream ksIn = pContext.getResources().getAssets().open(KEY_STORE_CLIENT_PATH);
    23             InputStream tsIn = pContext.getResources().getAssets().open(KEY_STORE_TRUST_PATH);
    24             try {
    25                 keyStore.load(ksIn, KEY_STORE_PASSWORD.toCharArray());
    26                 trustStore.load(tsIn, KEY_STORE_TRUST_PASSWORD.toCharArray());
    27             } catch (Exception e) {
    28                 e.printStackTrace();
    29             } finally {
    30                 try {
    31                     ksIn.close();
    32                 } catch (Exception ignore) {
    33                 }
    34                 try {
    35                     tsIn.close();
    36                 } catch (Exception ignore) {
    37                 }
    38             }
    39             SSLSocketFactory socketFactory = new SSLSocketFactory(keyStore, KEY_STORE_PASSWORD, trustStore);
    40             Scheme sch = new Scheme(SCHEME_HTTPS, socketFactory, HTTPS_PORT);
    41             httpsClient.getConnectionManager().getSchemeRegistry().register(sch);
    42         } catch (KeyManagementException e) {
    43             e.printStackTrace();
    44         } catch (UnrecoverableKeyException e) {
    45             e.printStackTrace();
    46         } catch (KeyStoreException e) {
    47             e.printStackTrace();
    48         } catch (FileNotFoundException e) {
    49             e.printStackTrace();
    50         } catch (NoSuchAlgorithmException e) {
    51             e.printStackTrace();
    52         } catch (ClientProtocolException e) {
    53             e.printStackTrace();
    54         } catch (IOException e) {
    55             e.printStackTrace();
    56         }
    57         return httpsClient;
    58     }
    59 }

    实例代码:

     1 AsyncTask testTask = new AsyncTask() {
     2             @Override
     3             protected Object doInBackground(Object... params) {
     4                 try {
     5                     HttpClient httpsClient = AppSslApplication.getHttpsClient(MainActivity.this.getBaseContext());
     6                     HttpGet httpget = new HttpGet(HTTPS_URL);
     7                     HttpResponse response = httpsClient.execute(httpget);
     8                     HttpEntity entity = response.getEntity();
     9                     Log.e("Response status", response.getStatusLine().toString());
    10                     if (entity != null) {
    11                         Log.e("Response", "Response content length: " + entity.getContentLength());
    12                         BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(entity.getContent()));
    13                         String text;
    14                         while ((text = bufferedReader.readLine()) != null) {
    15                             Log.e("Response status", text);
    16                         }
    17                         bufferedReader.close();
    18                     }
    19                     httpsClient.getConnectionManager().shutdown();
    20                 } catch (ClientProtocolException e) {
    21                     e.printStackTrace();
    22                 } catch (IllegalStateException e) {
    23                     e.printStackTrace();
    24                 } catch (IOException e) {
    25                     e.printStackTrace();
    26                 }
    27                 return null;
    28             }
    29         };
    30         testTask.execute();

    参考:http://blog.csdn.net/yuxiaohui78/article/details/41975915

    转载于:https://www.cnblogs.com/innchina/p/5554949.html

    展开全文
  • 用的HTTP协议成为另一个引起问题的协议。 HTTP协议可用于传输大小文件。同时,您可以使用高级功能,例如断点续传。许多FLASH浏览器使用HTTP协议进行视频播放。 如上所述,由于ISP之间的“跨网络支付”问题,某些...

    用的HTTP协议成为另一个引起问题的协议。 HTTP协议可用于传输大小文件。同时,您可以使用高级功能,例如断点续传。许多FLASH浏览器使用HTTP协议进行视频播放。
    在这里插入图片描述
    如上所述,由于ISP之间的“跨网络支付”问题,某些地方(小型运营商,小区域)的服务器缓存HTTP请求。客户端:客户端http代理在服务器之间设置HTTP代理,解析HTTP请求并缓存请求的资源以存储跨网络计费。此处会出现一些问题,例如费用损失,错误的相应结果,错误的请求等。
    大多数CDN供应商将服务器端日志用于计费目的。上述代理服务器可以通过减少实际请求数来减少实际流量。但是,这种类型相对较少,所以没什么大不了的。一些http代理实现中存在错误。例如,对于具有范围请求的HTTP服务器,代理将丢失范围信息,并将整个文件返回给客户端,从而导致客户端请求失败。抱怨CDN服务质量差。
    还有一些HTTP代理通过组合不同的HTTP请求标头而导致服务器解析错误。例如,该请求包含多个范围信息。它支持标准的http,但不支持实际的业务层。
    对于此类问题,通常可以通过向HTTP标头和URL参数添加任意信息来避免这种情况。但是,最好的选择是直接在请求的链接中包含随机路径,以使上述缓存服务器无法缓存所有信息并使用https协议。
    我们在编程中经常听到的是时间,空间和空间的交换。作为可以提高程序性能的灵丹妙药,高速缓存是典型的后者(时间空间)。
    随着用户数量和访问次数的增加,应用程序需要支持更多的并发性,而同时应用程序服务器和数据库服务器正在执行更多的计算。但是,通常应用程序服务器资源是有限的,并且数据库每秒可以接受的请求数也受到限制(甚至读取和写入文件)。您如何有效地利用有限的资源来提供最大的吞吐量?一种有效的方法是引入缓存。在每个链接上,请求都可以直接从缓存中获取并返回目标数据,从而减少计算量,有效提高响应速度,并为更多用户提供有限的资源。
    缓存并非能治愈所有疾病
    首次与缓存“ MAP”联系
    我第一次遇到缓存是在我上三年级的时候。在系统中,默认情况下,所有接口都可能需要获取用户信息和某些用户配置。当时,我们的系统检查的更多而更改的更少。这也可以显着提高性能。当时的做法是保持全球化。单例地图被缓存。当时,类名是DBMirror。
    大致如下:
    类DBMirror {
    私有静态映射小于字符串,而用户大于userCache=新的HashMap为(小于)
    public static void putUser(字符串键,用户){
    userCache.put(key,user);
    }
    公共静态用户getUser(字符串键){
    返回userCache.get(key);
    }
    专用DBMirror(){}
    }
    该代码非常简单,并且基本上可以满足当时系统的要求,从而减少了许多数据库读写操作。这是我第一次意识到数据库并不是当时唯一的存储库。
    但是,上面的代码有一个主要缺点,随着用户数量的增加,缺少合适的剔除算法会导致地图变大,并且在极端情况下会发生内存溢出。
    一般移除策略
    如上所述,如果不使用消除算法,则内存空间会越来越大且无法回收。然后,我们来讨论一般的删除策略。FIFO(先进先出)
    在先进先出策略中,如果缓存空间不足以为新数据腾出空间(超过最大因子限制),则首先清除进入缓存的第一个数据。
    LFU(较少使用)
    最少使用的策略是确定元素的使用次数并清除较少使用的元素以释放空间。
    LRU(最近最少使用)
    最近使用的策略通过根据元素上次使用的时间戳擦除使用次数最多的时间戳记的元素来释放空间。
    其他
    为缓存元素设置一个过期时间,并清理超出其过期时间的元素。
    随机清洁
    优先处理大对象
    简单的缓存分类
    本地缓存:指应用程序的缓存组件。最大的优点是应用程序和缓存处于同一进程中。请求缓存非常快,没有过多的网络开销。单个应用程序不需要群集支持或群集。在某些情况下,在节点不需要相互通知的情况下使用本地缓存更为合适。同时,还有一个缺点,因为缓存与应用程序结合在一起,因此多个应用程序无法直接共享缓存,并且群集中的每个应用程序或每个节点必须维护自己的缓存。单独的缓存浪费了内存。
    分布式缓存:是指与应用程序分离的缓存组件或服务,最大的优点是它是独立于本地应用程序的独立应用程序,并且多个应用程序可以直接共享缓存。缺点既有优点也有缺点。由于它是一个独立的应用程序,因此需要与本地节点进行通信,这会在网络上产生依赖性,并且如果缓存服务崩溃,则可能会影响所有依赖性节点。
    对于某些单实例服务,或默认情况下其数据未更改的数据,可以使用本地缓存来提高性能。否则,您可以使用分布式缓存。
    没有最好的技术解决方案,只有最适合您的解决方案。
    缓存使用
    Java集合类
    以上面的简单示例为例,DBMirror可以使用Map实现简单的内存缓存,而Set和List都可以实现内存缓存的功能。您可以根据并发性选择不同的实现类:HashMap,LinkedHashMap,TreeMap,LinkedTreeMap等。ConcurrentHashMap .总会有一个能让您满意的
    尽管此实现非常简单,但它也具有致命的缺点。不能回收未使用的缓存。
    番石榴缓存
    很多人都熟悉Guava,但这是Google提供的非常有用的Java工具包。 Guava Cache是Guava的本地缓存实现,基于LRU算法,并提供各种缓存过期策略,过期时间,容量等。它简化了高速缓存的使用,并使高速缓存的使用更加激烈。咖啡因
    Caffeine是基于Java 8开发的高性能缓存库,可提供最佳命中率。
    在本地缓存方面,SpringFramework5.0(SpringBoot2.0)放弃了Google的GuavaCache,而选择了“咖啡因”(Drop Guava缓存由Caffeine [SPR-13797]#18370取代)。您可以充分见证性能和可靠性的好处。
    性能测试位于https://github.com/ben-manes/caffeine/wiki/Benchmarks。
    高速缓存
    Ehcache是一个纯Java开源缓存框架,具有简单的配置,清晰的结构,强大的功能,非常轻巧的缓存实现,并且常用的Hibernate包含了相关的缓存功能。
    我在开发初期就使用过它,但是我不知道它是否仍在使用中。
    记忆快取
    基于高性能分布式内存的键值对象存储系统,用于存储小块任意数据(字符串,对象)
    访问数据库以减少数据库的读写负担。
    雷迪斯
    Redis还是基于用作数据库,缓存和消息代理的内存中数据结构的高性能存储。
    它支持更多数据结构,例如字符串,哈希,列表,集合,带范围查询的排序集合,位图,超日志,地理空间索引。
    Redis具有内置的复制,Lua脚本,LRU删除,事务和各种级别的磁盘持久性,并通过Redis Sentinel和Redis Cluster自动分区提供了高可用性。
    弹簧缓存
    Spring Cache不是缓存的实现,而是缓存管理的抽象解决方案,该解决方案消除了样板方法的使用,并保护了Spring最好的缓存使用细节。

    展开全文
  • 1.加密参数分析 图片 只有一个加密参数:zsData ,看起来像 base64 编码。那先去在线 base64 网站试着解密一下,如果是就可以少掉很多头发啦 然鹅。。。并不是 ↓ 所以继续,把apk拖进 ...图中标记 2 函数 ,里面

    1.加密参数分析

    图片

    图片

    只有一个加密参数:zsData ,看起来像 base64 编码。那先去在线 base64 网站试着解密一下,如果是就可以少掉很多头发啦

    然鹅。。。并不是 ↓

    图片

    所以继续,把apk拖进 jadx,反编译后搜索 zsdata ↓

    图片

    图片

    图片

    图片

    点击跳转到图中标记 1 的函数  ↓
    

    图片

    可以看到最后调用图中标注为 4 的 native 函数。

    native 层的函数,如果想省事就用 rpc 调用,

    想掉头发就去还原算法。

    先简单说下 frida-rpc:

    图中标记的 2 的函数 ,里面的操作只是把str 和 str1 转换成 bytes 数组,最后传给 native 函数,没有其他的操作。

    啥意思呢,就是这里函数 2 跟函数 4 的返回结果实际上是一样的。

    那我们进行 hook 或者 frida-rpc 调用的时候都只需要关注76行的 函数 2 就行了,它参数和返回值都是字符串,都不用转换类型,打印或者传参都十分方便,比较省事。

    这个函数第一个参数是 Context ,是上下文,其余三个参数不知道是什么,上frida hook 一下 ↓

    Java.perform(
    

    图片

    可以看到都打印出来了,现在知道了参数,那我们就可以用 frida-rpc 来调用这个函数

    rpc.exports = {
    

    图片

    完事

    native 层分析

    1.定位加密函数

    用 IDA 打开"libmarketsec-mk-2345"文件

    搜索一下函数名 o000000O 发现搜不到,那就是动态注册的。

    那就从 JNI_OnLoad 函数里找到注册函数,再找到真实函数名,具体操作请看上一篇。

    顺利的找到真实的函数名为:abc

    image.gif

    image.gif

    为什么这里有六个参数?

    是因为前面两个是JNI的参数,从第三个参数开始才是java层传来的参数,固定用法,记住就好。

    2.静态分析

    先找到 return,看最后的返回值是哪个变量赋值的

    一顿分析

    图片

    分析后找到关键函数,最后 return 的值就是 17

    v17 = j_j_salt_b64_encode(v31, (int)v13);
    

    继续找v31 和 v13

    图片

    v31是 java 层传进来的第 2 个参数转换成的 bytes 数组,也就是这一长串转换的

    图片

    然后找 v13

    图片

    图片

     因为
    

    现在知道了 j_j_salt_b64_encode() 函数的两个参数

    还要进入这个函数,看看它是怎么加密的

    图片

    简单说下这个算法

    这个函数里有两个关键函数:

    1. 23行的 j_j_md5() 函数,

    2. 38行的 j_j_base64() 函数,

    j_j_md5() 函数对’ZySOW5KE3-1.Vtw#!8u&~5XeT%74Mz>bG’进行md5编码后转换成 bytes 数组

    36行 v5=参数1的数组长度, 只要v5!=v8,就一直循环,33行右边是两个数组的元素进行异或运算,填充到 v7

    38行的 result 就是我们要的 zsdata 参数,j_j_base64() 对填充后的 v7 bytes 数组进行 base64 加密。得到 zsdata

    python 还原算法:

    encode_str = r'{"terminal":"{\"iccid\":\"\",\"romName\":\"\",\"50uid\":\"\",\"geo\":\"\",\"httpAgent\":\"Dalvik/2.1.0 (Linux; U; Android 6.0.1; Nexus 5 Build/MMB29S)\",\"mac\":\"344df73cc3ee\",\"romVersion\":\"\",\"timestamp\":\"' + ts + r'\",\"oaid\":\"\",\"locationInfo\":\"{\\\"area\\\":\\\"\\\",\\\"province\\\":\\\"\\\",\\\"city\\\":\\\"\\\"}\",\"osVerCode\":\"23\",\"imei\":\"359250052185137\",\"50uuid\":\"\",\"brand\":\"google\",\"osVerName\":\"6.0.1\",\"netinfo\":\"WiFi\",\"resolution\":\"1080*1776\",\"adid\":\"874cc857371673e6\",\"userAgent\":\"Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5 Build/MMB29S; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/44.0.2403.117 Mobile Safari/537.36 package/com.market2345 versionName/7.5 versionCode/127\",\"imsi\":\"\",\"model\":\"Nexus 5\"}","page":"1","type":"az_xpyx"}'
    

    测试,通过

    图片

    展开全文
  • 随着跨境电商发展,越来越多跨境电商客户开始寻求更有效推广方式,比如whatsapp群发链接信息宣传产品,获取客户。 WhatsApp程序借助推送通知服务,可以即刻接收亲友和同事发送信息。可免费从发送手机短信...
       随着跨境电商的发展,越来越多的跨境电商客户开始寻求更有效的推广方式,比如whatsapp群发链接信息宣传产品,获取客户。
      WhatsApp程序借助推送通知服务,可以即刻接收亲友和同事发送的信息。可免费从发送手机短信转为使用WhatsApp程序,以发送和接收信息、图片、音频文件和视频信息。
     WhatsApp是基于手机号码注册的,在注册的时候,需要你输入你的手机号码,并接受一条验证短信,然后WhatsApp会搜索你的手机联系人中已经在使用的人并自动添加到你的手机联系人名单里。
    

    WhatsApp如何添加客户?
    通常只要将客户的手机号保存在通讯录中,登录WhatsApp就可以添加导入了。
    但是要实现大批量发送信息,则直接可以导入国外的电话号码到通讯录,直接群发消息,目前测试发现一个whatsapp号一天正常发100条信息是没问题的。如果批量注册10000账号,那么每天就可以发送100万条信息出去,成本极其低廉,非常适合游戏等行业的出海业务。
    由于WhatsApp 是基于 signal 协议实现的 e2e 端到端加密,每条消息使用单独的密钥加密,保证了前向安全和后向安全(其中群消息安全性稍弱,只实现了后向安全)。一般来说whatsapp逆向的重点主要在两个方向,一个是直接针对移动端版本的逆向,可以实现完整的手机验证码登录,难度较大,另外一个则是针对 web 版本的逆向,但是 web 版本的登录还是依赖移动端扫码登录,价值比较低,相对来说,难度也小一些。针对移动端安卓版本的逆向github 上最出名的项目当属于基于 python 实现的版本,但该项目由于原来作者发布时间较久,原来作者也不继续研究,目前已经无法正常运行。我近期详细看了一下这个版本的逆向逻辑,针对该版本更新了一些库和字段,优化了风控监测点,发现可以正常注册登录账号,收发消息,进行群相关的操作。但是由于资源有限,没有足够的号进行测试,所以无法确定是否大批量发送信息时是否会出现问题,具体还需要等处理完注册模块,实现自己可以批量注册后才能知道。

    展开全文
  • 利用全球领先用第三方云平台-机智云,打造了基于Nuleo-STM32F413...手机APP利用机智云提供通用APP,无需自己开发APP,单片机端代码使用STM32CubeMX生成框架,协议层使用机智云代码自动生成工具生成。 视频演示:
  • 最近在做项目wap版,有个需求就是,先判断手机上是否有我们的APP应用,如果有话打开应用,没有才跳转到wap页面。 wap简单来说就是运行在移动端浏览器上网站。不管应用在什么地方,总之就是浏览器呗...
  • 最近有一项目要求是不通过苹果商店,二是通过扫描二维码进行下载app,当然了安卓手机是非常容易做到,这里主要讲述苹果。以及两个应用合并为一个知识点。其实很多分发平台就是这样做。比如:fir.im等等吧...
  • 话不多说直接上代码: function openApp() { const u = navigator.userAgent; // ios if (u.match(/(iPhone|iPod|iPad);?/i)) { window.location.href = "XXXX";... // 安卓协议,由安卓开发那边提供(打
  • web页面判断手机里是否安转应用的原理就是:首先试着打开手机端某个app的本地协议;如果超时就转到app下载页,下载该app。 URL scheme 的作用 客户端应用可以向操作系统注册一个 URL scheme,该 scheme 用于从...
  • 最近开发一个IOS项目需要不通过将APP发布到Appstore上直接安装到客户手机上,本来觉得苹果这么封闭流程,应该不可以实现吧,结果竟然还正能实现,这边主要是利用苹果自家浏览器safari和itms-services协议,...
  • 1 //html代码中 a 标签,以微信为例,默认是调用weixin scheme,去打开本机微信,如果没有则跳转到相应连接 2 <... 4 // 为btn-download 绑定事件,如果在500ms内,没有解析到协议,那...
  • 客户端-服务器消息传输层基于TCP/IP协议实现消息封装、拆分和一些相关传输机制。 演示 存储库中内容 MobileBankApp(中文版) 这是一个基于安卓简单模拟手机银行软件系统。本系统客户端和服务器端采用Java语言...
  • 移动端h5调起手机app

    2020-05-16 22:51:58
    当所做h5页面在微信端打开时,想要调起手机的app,一般我们会用scheme协议监测本地的应用,要是没有则下载app,有话就直接打开。 但是微信上是屏蔽了,所以我们要是在微信端,则得提示用户用浏览器打开页面再...
  • open311-mobile是Open311协议的参考客户端。 当前可以通过iTunes以“ GeoReporter”名称使用。 GeoReporter应该适用于具有Open311 GeoReport v2兼容端点服务器任何组织。 Open311- //open311.org Open311 ...
  • 转载 http://www.52im.net/thread-1536-1-1.html1、前言相信活跃在即时通讯网社区开发者们都很清楚,即时通讯应用(包括IM聊天应用、实时消息推送应用等)流量消耗是一个IM(尤其移动端IM)很重要评估指标,...
  • 对于android,您可以通过下载每个新带有扩展名.apk文件来安装该应用,然后在接受来自未知来源安装后,在手机中将其打开。 尚不适用于ios。 安装该应用程序后,需要从1.7.0版进行配​​置,此应用程序配置已...
  • NuMaker Brick 是新唐科技针对物联网应用所设计的一款积木式开发平台,对于想要快速设计物联网创新应用的用户,提供了组合式模块,搭配手机App即看即设(See&Set),一分钟就能完成用户规划设计的功能。NuMaker ...
  • 安卓应用《编程乐园》及《编程学院》《隐私政策及用户协议》 本软件尊重并保护所有使用服务用户个人隐私权。本软件为手机本地应用,不涉及任何网络功能、不申请任何网络权限。因此本软件不会将您个人隐私信息...
  • 首先下载Wireshark和模拟器(天天模拟器,夜神模拟器),天天模拟器在自带的应用商店里面能够登录微信。 然后打开Wireshark选择一个网卡开始抓包。 开始抓包后,在模拟器中要抓取的APP中对想要资源进行点击访问...
  • 随着移动端App是越来越火,各种各样的应用也越来越多,如雨后春笋般出现,对各类app数据需求大幅度增加,而app数据采集确实困扰已久难点。现在 速豹IP代理 通过网上收集整理,给大家分享一下如何采集移动App的...
  • 手机App抓包(HTTP&HTTPS协议)

    万次阅读 2019-05-14 11:55:41
    同学们在进行手机App应用测试或者调试时,经常需要检查客户端到服务器之间数据交互是否正确,同时可能为了构造一些假数据,特殊场景,经常需要对手机App应用进行抓包操作,今天就给大家介绍一下针对手机App抓包操作 ...
  • 1,Safari浏览器跳转到第三方的应用程序,就需要在你的应用程序中定义一个特殊标示,也就是一个URL协议,TARGETS - >信息 - > URL类型 - >添加一个URL协议 屏幕快照 其中URL方案字段就是你这个APP的特殊...
  • 我们在开发 App 应用中,经常会遇到打开第三方程序场景,比如打开手机淘宝、通过第三方浏览器打开一个 url 等等。 App不像网页可以使用http超链接互相跳转,但手机os设计了scheme机制,可以通过特殊链接互相调起...
  • 为了实现本次应用,需烧写BLE 协议栈软件库及应用程序到RL78/G1D 演示板,并安装相应APP 到Android 智能手机,从而通过BLE 功能实现手机对智能锁控制。其中RL78/G1D 演示板由主控板(RTK0EN0002C01001BZ 套件)和...
  • 《9秒小说阅读器》采用免费开源且跨平台移动应用开发引擎CrossApp开发,是一款完全开源、免费、跨平台的手机小说下载阅读器,基于最宽松MIT开源协议,所以开发者可以完全免费、毫无顾虑使用《9秒小说阅读器》...
  • 利用ipad的协议可以可以实现大数据抓取功能,可以使信息分类,应用到各个行业。比如服装,医疗,酒店,餐饮,零售各个环节都可能有需要。利用微信协议可以自由采集男女分类,兴趣爱好,手机号,地区等等环节进行筛选...

空空如也

空空如也

1 2 3 4 5 ... 19
收藏数 371
精华内容 148
关键字:

手机app应用的协议