文章目录

  • 本周知识清单
  • SDK为游戏提供哪些功能
    • 什么是SDK
    • SDK在游戏中提供的功能
  • SDK技术特点
    • 简洁易用
    • 稳定
    • 高效
    • 模块化开发
    • 组件化开发
    • 插件化开发
  • SDK各功能模块如何实现的
      • 制作SDK
      • 打包成jar
      • 打包成aar
      • arr包的使用
    • 关于注册/登录模块的思考
  • Window Fidder网络抓包工具
    • Fiddler抓包步骤
    • Fiddler常用功能
      • 1)抓包开启
      • 2)Statistics 性能分析
      • 3)Inspector查看数据内容
      • 4)AutoResponder拦截指定规则的请求
      • 5)Composer自定义请求
      • 6)Filters请求过滤规则
  • Android反编译
    • 常用的反编译工具
  • 一周小结
  • 参考资料

本周知识清单

  • SDK为游戏提供哪些功能
  • SDK技术特点
  • SDK各功能模块如何实现的
  • Window Fiddler网络抓包工具
  • Android反编译工具apktool、dex2jar、jd-gui、jadx

SDK为游戏提供哪些功能

什么是SDK

SDK(software development kit)
软件开发工具包,只是简单的为某个程序设计语言提供应用程序接口的一些文件,但也可能包括能与某种嵌入式系统通讯的复杂的硬件。一般的工具包括用于调试和其他用途的实用工具。SDK还经常包括示例代码、支持性的技术注解或者其他的为基本参考资料澄清疑点的支持文档。软件工程师通常从目标系统开发者那里获得软件开发包。为了鼓励开发者使用其系统或者语言,许多SDK是免费提供的。SDK经常可以直接从互联网下载。

SDK在游戏中提供的功能

  • 登录功能:登录(用户名,手机号);注册(一键注册,用户名注册,手机号注册);实名认证等。
  • 支付功能:支付宝;微信;银联;平台币;AppStore(iOS平台)。
  • 个人中心:修改密码;绑定手机号;交易记录;平台币充值;退出帐号等。
  • 礼包中心:礼包展示;礼包码领取等。
  • 后台管理系统:参数配置;权限管理;子渠道管理;游戏管理;用户管理;订单管理,补单;数据统计分析,报表;对账单,结算配置等。

SDK技术特点

简洁易用

SDK提供的文档和接口需要使用者容易理解和调用。

稳定

  • 对外提供稳定的API,无非常严重情况不可更改
  • 对外提供稳定的业务
  • SDK运行时的稳定
  • 版本稳定更新,相比面向普通用户的应用,SDK版本的迭代非常缓慢

高效

  • 更少的内存占用:因为SDK服务和宿主程序运行在同一个进程中,SDK需要避免占用进程过多资源
  • 更少的内存抖动:短时间内创建释放大量对象导致的(一般是循环内创建对象)易导致频繁的GC
  • 更少的电量消耗:减少使用耗电模块的时间
  • 更少的流量消耗

模块化开发

根据单一职责将系统拆分为不同的小模块,每个模块相对独立

组件化开发

对逻辑的封装,并具备单个可移植性

插件化开发

将SDK整体划分为两部分:宿主和插件.宿主只向开发者提供必要的服务接口,并提供了自定义插件加载器.而核心的逻辑则是存在于插件中.当需要采集数据的时候,只需要由开发人员开发好数据采集插件并下发到指定设备即可;当需要修复SDK缺陷时,同样也只需要下发新的插件包即可.

通过在SDK使用插件化方案,可以有效的对开发者屏蔽手动更新的过程.宿主相对稳定,一旦确定,一般不会变动,而后续的业务变化则只需要通过更新插件来支撑.

SDK各功能模块如何实现的

通过体验公司发布的游戏可以了解到SDK主要功能模块是登录功能、支付功能、个人中心等,在研究各功能模块怎么实现前应该了解一下如何制作一个SDK

制作SDK

首先要了解到,Android中使用的第三方库有.jar和.aar两种类型,这两种类型返回的区别如下

  • JAR文件(Java Archive File)是Java的一种文档格式,只包含class文件与清单文件,不含资源文件,解压后文件构成
文件夹名称 文件夹内文件功能
assets 原生资源文件
com 存放class文件
META-INF 配置
  • AAR(Android Archive)包是一个Android库项目的二进制归档文件,包含所有资源,class以及res资源文件。解压后文件构成如下
文件夹名称 文件夹内文件功能
aapt Android资源打包工具
aidl Android接口定义
assets 原生资源文件
jni java与natived的桥梁
libs
res 资源文件
AndroidManifest.xml 声明文件
classes java类文件
R 映射资源

打包成jar

1、先使用Android Studio创建项目工程;

2、在项目里面新建一个module;新建一个Class文件,然后添加一个方法(即后面jar包里要调用的方法)

3、在module的gradle里面添加下面的内容(注:文件最外层添加),如下:

task makeJar(type:org.gradle.api.tasks.bundling.Jar) {//指定生成的jar名baseName 'sdk'
//从哪里打包class文件/TestRxJava/testlibrary/from('build/intermediates/classes/debug/com/example/mymodule/')
//打包到jar后的目录结构TestRxJava/testlibrary/libs/into('TestRxJava/testlibrary/libs/')
//    into('org/cmdmac/cloud/pluginsdk/')
//去掉不需要打包的目录和文件exclude('test/', 'BuildConfig.class', 'R.class')
//去掉R开头的文件exclude{ it.name.startsWith('R');}
}
makeJar.dependsOn(build)

4、点击Sync Now,等Android Studio运行完成后,点击右上角的Gradle按钮,然后点开我们的module(就是之前建的 sdklibrary),你取的什么名字在这就是什么名字,点开只有在点开other,然后再展开的方法里面,找到我们的makeJar

5、双击makeJar按钮,等到运行结束,就可以看到build/libs/这个文件夹下面生成了classes.jar文件,就算完成了。

6、将jar包导入你想要用的工程里,然后调用相应的方法就好了

打包成aar

1、首先使用Android Studio通过new Module建立一个lib项目

2、编码,配置,混淆

3、点击最右边的gradle,选择对应的module点击build/assembleRelease脚本
系统会在module目录下的build/outputs/aar下面生成一个release.aar
然后你把这个压缩包解压,把里面的classes.jar作为lib导入到一个项目中(Android Studio自带反编译功能)查看下项目代码是否已经混淆,混淆的程度是否满足你的预期(辛辛苦苦写的代码 随随便便给别人拿走可不好),记住你提供的入口API文件千万不要混淆

arr包的使用

1、点击【File>New>New Module】

2、选择 【Import .JAR/.AAR Package,点击【Next】

3、输入.arr文件所在路径并点击【finish】.

4、点击【File>Project Settings 】(或者使用快捷键[Ctrl+Shift+Alt+S](适用于Windows)).

5、在左侧菜单【Modules】栏目下,选择需要依赖.aar包的module(通常为app).

6、点击Dependencies分页

7、点击右上角绿色的【+】

8、选择【Module Dependency】

9、选择你导入的ARR所在的【Module】

关于注册/登录模块的思考

思路从用户第一次打开游戏出发

1、游戏客户端调用SDK提供的注册页面,用户输入注册信息,SDK将用户信息提交给SDK服务器

2、SDK服务器接受SDK传递过来的用户注册信息 ,为新用户注册,返回用户的token令牌

3、SDK接受到token令牌,将token令牌里的内容解析,然后将信息传递给游戏客户端,游戏客户端向游戏服务端传递该信息

4、游戏客户端接收到该信息,向SDK服务端匹配用户信息,匹配成功后生成该用户唯一标识USERID,然后返回给游戏客户端

5、游戏客户端获取USERID,缓存到本地,使用该ID进行其他操作

6、用户第二次打开游戏客户端,访问缓存的USERID,获取到USERID,然后进行其他操作

Window Fidder网络抓包工具

Fiddler是一个使用C#实现的抓包调试工具,它可以对网络中发送和接受的数据包进行截获、重发、编辑、转存等操作,不仅对电脑本身的数据的抓取,还可以对处于同一局域网内的Android/iphone手机的数据进行操作。是一个非常常用的抓包工具。

### Fiddler的抓包原理
客户端和服务器之间建立一个代理服务器,监听本机发出的请求和服务器返回的响应结果。iddler是以代理web服务器的形式工作的,它使用代理地址:127.0.0.1,端口:8888.当Fiddler启动后将自己变成一个代理服务器,这个代理服务器默认监听127.0.0.1:8888.

Fiddler抓包步骤

1、Fiddler抓取客户端向服务器发送请求

2、fiddler向服务器发送请求进行握手, 获取到服务器的CA证书, 用根证书公钥进行解密, 验证服务器数据签名, 获取到服务器CA证书公钥

3、fiddler伪造自己的CA证书, 冒充服务器证书传递给客户端浏览器, 客户端浏览器做跟fiddler一样的事。

4、客户端浏览器生成https通信用的对称密钥,用fiddler伪造的证书公钥加密后传递给服务器, 被fiddler截获。

5、fiddler将截获的密文用自己伪造证书的私钥解开, 获得https通信用的对称密钥。

6、fiddler将对称密钥用服务器证书公钥加密传递给服务器, 服务器用私钥解开后建立信任, 握手完成, 用对称密钥加密消息, 开始通信。

7、fiddler接收到服务器发送的密文, 用对称密钥解开, 获得服务器发送的明文。再次加密, 发送给客户端浏览器。

8、客户端向服务器发送消息, 用对称密钥加密, 被fidller截获后, 解密获得明文。

Fiddler常用功能

1)抓包开启

打开Fiddler,自动设置好了http/https的代理,关闭时候,代理还原。开启时确保File –> Capture Traffic开启着。需要Https的话需要开启Tools –> Fiddler Options –> HTTPS 的Decrypt HTTPS Traffic

2)Statistics 性能分析

在使用fiddler代理监听访问时,可以使用statistics分页去统计请求和响应的一些信息。
说明:

1、request count:请求数,表示该session总共发起了多少个请求。

2、Bytes sent:发送请求的字节数(包括请求头和请求体)

3、Bytes received:接收到的字节数(包括响应头和响应体)


4、clientconnected:客户端连接的时间;

5、clientbeginrequest:客户端开始发送请求的时间;

6、gotrequestheaders:获得请求头文件的时间;

7、clientdonerequest:客户端完成请求的时间;

8、determine gateway:确定网关使用的时间;

9、dns lookup:查看dns使用的时间;

10、tcp/ip connect:tcp/ip 连接使用的时间;

11、https handshake:https握手使用的时间;

12、serverconnected:服务连接发生的时间;

13、fiddlerbeginrequest:fiddler开始请求的时间;

14、servergotrequest:服务器得到请求的时间;

15、serverbeginresponse:服务器开始响应的时间;

16、gotresponseheaders:得到响应头文件的时间;

17、serverdoneresponse:服务器完成响应的时间;

18、clientbeginresponse:客户端开始响应的时间;

19、clientdoneresponse:客户端完成响应的时间;

20、overall elapsed:全部花掉的时间(使用客户端完成响应的时间-客户端开始请求的时间)


response bytes(by content-type)–响应的字节(内容格式)


estimated worldwide performance

(世界其他地方的性能–即其他地方访问该网站需要的时间)

可以使用statistics分页,完成简单的性能测试。查看其接口的响应时间。

3)Inspector查看数据内容

该页可以查看当前请求的会话内容,上半部分是请求的内容,下半部分是响应的内容

4)AutoResponder拦截指定规则的请求

AutoResponder允许你拦截指定规则的求情,并返回本地资源或Fiddler资源,从而代替服务器响应。匹配规则有两种匹配方式

  • 字符串匹配(默认):只要包含指定字符串(不区分大小写),全部认为是匹配

  • 正则表达式匹配:以“regex:”开头,使用正则表达式来匹配,这个是区分大小写的

5)Composer自定义请求

该页中可以自定义网络请求

6)Filters请求过滤规则

用于过滤无用的请求信息。有两种方式进行过滤

  • Zone 指定只显示内网(Intranet)或互联网(Internet)的内容:

  • Host 指定显示某个域名下的会话:

Android反编译

无论是开发APP还是SDK,反编译都是非常重要。反编译自己的应用,查看自己代码的混淆。防止其他人利用反编译手段对自己的应用进行破坏。分析其他应用的实现原理。无论是对安全还是自身都有着无可厚非的重要。

常用的反编译工具

目前常用的反编译软件有apktool、dex2jar、jd-gui、jadx。想完全编译一个应用,用一个工具的效果是不足够分析的,因为每个工具都各有所长,综合几个工具一起使用,效果最好。

  • apktool

    资源文件的获取,简单直接的资源文件查看

  • dex2jar

    对修改后缀.apk->.zip的文件解压,获得classes.dex,对classes.dex反编译成jar包

  • jd-gui

    打开dex2jar反编译后jar包,获得java源代码

  • jadx

    这个工具和apktool相似,但拥有gui界面。在apktool中,对应的java类会被反编译成smali文件,jadx使用asm这个工具来生成class文件,实现Java代码的可视化。总体相对apktool来说,性能差一点,不能修改代码和不能进行回编译。

一周小结

这一周的工作主要是针对SDK开发开展一系列知识学习的知识了解,如要SDK的用途,性能特征,如何打包封装等。从开始对SDK开发的懵懵懂懂到现在的略懂还是有很大的帮助。还有针对应用安全的网络抓包,反编译等。这些知识在平时学习中确实是容易忽略的部分。这一周的学习中也了解Android开发代码规范,为打造可维护易扩展的产品做了充足的准备。

参考资料

[1]便捷的将你的项目作为SDK—用aar代替过时的jar

[2]AndroidStudio打包jar包

[3]AndroidStudio封装SDK的那些事

[4]Fiddler 工作原理

[5]fiddler之数据统计(statistics)

[6]抓包工具总结

[7]Android逆向之旅—反编译利器Apktool和Jadx源码分析以及错误纠正

实习周记1(sdk了解、fiddler抓包、反编译工具)相关推荐

  1. 微信小程序抓包反编译保姆级教程

    文章目录 1.基本采集流程 2.采集流程 2.1 抓包 2.1.1 抓包背景介绍 2.1.2 使用工具 2.1.3 具体抓包流程 2.2 wxapkg包获取 2.2.1 wxapkg包获取背景介绍 2 ...

  2. 小程序抓包反编译测试从0到1

    APP.小程序抓包,测试教学视频请观看: Android安全逆向技术入门课程--移动安全视频教程-信息安全-CSDN程序员研修院熟悉了解Android程序APK的基本结构.文件格式 掌握APK反编译常 ...

  3. jar包反编译工具(java-decompiler)

    五种反编译工具 1.jd-gui 下载地址:http://java-decompiler.github.io/ 优点:反编译的源代码基本符合,没有乱七八糟新增的修饰符 缺点:反编译过程耗时较长(50M ...

  4. 推荐一款jar包反编译工具:jd-gui.ext

    下载: 链接:https://pan.baidu.com/s/1321vhWNRZ4Hd5GZH-IwWSQ 提取码:7ste 展示:

  5. 【转】Fiddler抓包工具手机添加代理后连不上网解决办法

    转载:Fiddler抓包工具手机添加代理后连不上网解决办法_数据结构和算法的博客-CSDN博客 最近,在工作中需要测试一个监控网络请求的SDK,需要校验该SDK记录的耗时数据的准确性.根据网上大神们提 ...

  6. Fiddler抓包工具总结(转)

    序章 Fiddler是一个蛮好用的抓包工具,可以将网络传输发送与接受的数据包进行截获.重发.编辑.转存等操作.也可以用来检测网络安全.反正好处多多,举之不尽呀!当年学习的时候也蛮费劲,一些蛮实用隐藏的 ...

  7. 如何使用Fiddler抓包操作?

    目前微信公众号和小程序应用越来越多,那么我们如何对二者进行抓包进而在测试中更加准确的定位问题呢?目前通常有三种解决方案,在这里我会一一道来. 备注:本文的阅读前提是读者能够使用Fiddler进行基础的 ...

  8. 【Fiddler学习】Fiddler抓包HTTPS请求和手机抓包

    一.安装Fiddler 百度搜索:Fiddler抓包工具,然后安装即可. 然后打开Fiddler工具,打开浏览器随意输入任何网址,就可以在Fiddler看到抓包信息. 但是:默认情况下,Fiddler ...

  9. Fiddler抓包使用教程-会话图标

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/72933882 本文出自[赵彦军的博客] 使用fiddler抓包时,会看到左侧按照顺 ...

最新文章

  1. spring官方文档阅读笔记
  2. Linux中默认的JDK版本设置
  3. 配置Maven环境变量-Eclipse/Idea添加Maven
  4. mysql 中文字段排序( 按拼音首字母排序) 的查询语句
  5. 如何用C语言测试,C语言单元测试CMock使用(一) 基本用法
  6. 使用nginx+lua脚本读写redis缓存
  7. python开发图片_python实现简单的图片隐写术
  8. 开端-从c语言入门到不放弃
  9. STM32F429与CC2530 ZigBee模块通信
  10. 【阿朱归类】2015 新兴互联网公司 TOP 300
  11. Veil-Evasion安装及使用
  12. w10桌面计算机图标箭头去除,完美W10如何去除桌面图标快捷方式小箭头
  13. 高速窄脉冲峰值保持设计
  14. 算法成华纳旗下歌手?背景音乐经济
  15. centos7安装dcos
  16. pythonsocket接口_python socket 模块API
  17. vm虚拟服务器无法启动,win10升级后vm虚拟主机无法启动的解决办法
  18. JDBC 基础、CRUD、分页 第一节
  19. 堆栈的区别及增长方向
  20. 慧荣SM2269XT量产开卡成功,附SM2269XT量产工具、开卡软件

热门文章

  1. 实战 | 手把手教你用Python+OpenCV实现滑块验证码->自动拖动验证
  2. dede织梦编辑器中插入mp4视频文件方法
  3. 【收藏分享】2022年PHP中高级面试题(三)
  4. Lesson14 Redis集群的搭建
  5. win10系统cf连接服务器失败,win10系统cf连接服务器失败的解决方法
  6. Spring循环依赖的三种方式以及解决办法
  7. MATLAB采用双坐标轴同时绘制柱状图和折线图
  8. 如何写创业计划书[转]
  9. 日语五十音图快速记忆法和搞笑版
  10. Echart地图组件的使用