实习周记1(sdk了解、fiddler抓包、反编译工具)
文章目录
- 本周知识清单
- 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.基本采集流程 2.采集流程 2.1 抓包 2.1.1 抓包背景介绍 2.1.2 使用工具 2.1.3 具体抓包流程 2.2 wxapkg包获取 2.2.1 wxapkg包获取背景介绍 2 ...
- 小程序抓包反编译测试从0到1
APP.小程序抓包,测试教学视频请观看: Android安全逆向技术入门课程--移动安全视频教程-信息安全-CSDN程序员研修院熟悉了解Android程序APK的基本结构.文件格式 掌握APK反编译常 ...
- jar包反编译工具(java-decompiler)
五种反编译工具 1.jd-gui 下载地址:http://java-decompiler.github.io/ 优点:反编译的源代码基本符合,没有乱七八糟新增的修饰符 缺点:反编译过程耗时较长(50M ...
- 推荐一款jar包反编译工具:jd-gui.ext
下载: 链接:https://pan.baidu.com/s/1321vhWNRZ4Hd5GZH-IwWSQ 提取码:7ste 展示:
- 【转】Fiddler抓包工具手机添加代理后连不上网解决办法
转载:Fiddler抓包工具手机添加代理后连不上网解决办法_数据结构和算法的博客-CSDN博客 最近,在工作中需要测试一个监控网络请求的SDK,需要校验该SDK记录的耗时数据的准确性.根据网上大神们提 ...
- Fiddler抓包工具总结(转)
序章 Fiddler是一个蛮好用的抓包工具,可以将网络传输发送与接受的数据包进行截获.重发.编辑.转存等操作.也可以用来检测网络安全.反正好处多多,举之不尽呀!当年学习的时候也蛮费劲,一些蛮实用隐藏的 ...
- 如何使用Fiddler抓包操作?
目前微信公众号和小程序应用越来越多,那么我们如何对二者进行抓包进而在测试中更加准确的定位问题呢?目前通常有三种解决方案,在这里我会一一道来. 备注:本文的阅读前提是读者能够使用Fiddler进行基础的 ...
- 【Fiddler学习】Fiddler抓包HTTPS请求和手机抓包
一.安装Fiddler 百度搜索:Fiddler抓包工具,然后安装即可. 然后打开Fiddler工具,打开浏览器随意输入任何网址,就可以在Fiddler看到抓包信息. 但是:默认情况下,Fiddler ...
- Fiddler抓包使用教程-会话图标
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/72933882 本文出自[赵彦军的博客] 使用fiddler抓包时,会看到左侧按照顺 ...
最新文章
- spring官方文档阅读笔记
- Linux中默认的JDK版本设置
- 配置Maven环境变量-Eclipse/Idea添加Maven
- mysql 中文字段排序( 按拼音首字母排序) 的查询语句
- 如何用C语言测试,C语言单元测试CMock使用(一) 基本用法
- 使用nginx+lua脚本读写redis缓存
- python开发图片_python实现简单的图片隐写术
- 开端-从c语言入门到不放弃
- STM32F429与CC2530 ZigBee模块通信
- 【阿朱归类】2015 新兴互联网公司 TOP 300
- Veil-Evasion安装及使用
- w10桌面计算机图标箭头去除,完美W10如何去除桌面图标快捷方式小箭头
- 高速窄脉冲峰值保持设计
- 算法成华纳旗下歌手?背景音乐经济
- centos7安装dcos
- pythonsocket接口_python socket 模块API
- vm虚拟服务器无法启动,win10升级后vm虚拟主机无法启动的解决办法
- JDBC 基础、CRUD、分页 第一节
- 堆栈的区别及增长方向
- 慧荣SM2269XT量产开卡成功,附SM2269XT量产工具、开卡软件