话说这种文章到底算不算移动安全贴啊……如果不是的话应该算是『编程语言区』 的?我有点慌,如果不对的话帮忙移动一下,谢谢
还有复制粘贴会导致排版变乱……我刚刚就中招了OTZ

超级炒冷饭——乖离性MA科技制作简谈(1) 登陆部分
脱机挂?什么东西?很多人是一脸懵逼的……很多人还停留在什么八门神器啊什么IGG上面
但是实际上游戏偷懒这种事情早就已经高的不知道哪里去了
本文仅仅是简谈,所以需要一定的理解力(其实是我语文老师死的早)
如果有很多人想看的话会继续详细化的
今天就尝试带大家手把手来弄一个乖离性百万亚瑟王科技……柿子要挑软的捏,毕竟明文包现在我们开始吧……XD


讲道理……任何一个网路游戏我们都可以理解成用户操作客户端与伺服端的通信,乖离也是如此
那么我们的目标是修改客服端数据然后作大死?当然不是……
本教程不是干这些的
我们是把用户操作这部分交由自动化操作,然后自己实现一个客服端与伺服器通信
那么我们先定一个小目标:成功的登录游戏 这个目标也是本章讲的内容
捕获通讯
当然,联网游戏必然会有通讯,所以我们首先就是要抓包一波,不抓一把难道硬生生看着客服端瞎搞么

在它loading的时候我们用fiddler就可以捕获到很多东西了

嗯?刚刚好遇见切切活动啊……不过还是继续写吧23333

当出现这个画面的时候就意味着我们的抓包已经结束了……游戏可以关掉了,因为我们本章目标仅仅是登陆而已
接下来的过程我们分析一下包就好我们先来看看明显到爆炸的login……不是abcd这样子的真是太好了HHHH,有些游戏不仅仅是封包加密,就连地址都是abcd

看着这个post……我们重新登陆几次就可以发现,变化的只有UUID与hash_token而已构造这个包的话用

[C#] 纯文本查看 复制代码
?
1
string login = "{ \"uuid\":\"" + UUID + "\",\"hash_token\":\"" + HashToken + "\",\"clver\":\"460\",\"os\":1,\"carrier\":1,\"market\":2,\"lang\":0,\"device\":\"samsung SM-W2017\",\"token\":\"\",\"os_ver\":\"Android OS 6.1.1 / API-23 (CTC-W2017KEU1APK1)\",\"bsid\":\"\"}";

你要有强迫症的话也可以用json来啊……如同下面代码一样自行序列化反序列化JSON

[C#] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
//var data = JsonConvert.SerializeObject(new LoginPost()
            //{
            //    uuid = UUID,
            //    hash_token = Hash_Token,
            //    clver = "460",
            //    os = "1",
            //    carrier = "1",
            //    market = "2",
            //    lang = "0",
            //    device = "samsung SM-W2017",
            //    token = "",
            //    os_ver = "Android OS 6.1.1 / API-23 (CTC-W2017KEU1APK1)"
            //});

反正这样子来反而会很坑你信不信,运行起来速度反而会慢哦
UUID我们可以在/data/data/net.gamon.kmaTW/shared_prefs/SmartBeat.xml找到
那么hash_token要怎么去计算呢?这种时候就要拆开客户端仔细观察了。噫……unity游戏?这就是我说的软柿子了。

简单搜索hash我们已经可以找到这个地方……很简单对不对……
复制一下我们就可以直接拿来用了,52有代码框插件我就可以放心复制出来了,比起wordpress论坛排版还是挺有难度的

[C#] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
        public static string GetHashFromUUID(string UUID)
        {
            int[] array = new int[12];
            for (int i = 0; i < 12; i++)
            {
                switch (i)
                {
                    case 0:
                        array[i] = 78;
                        break;
                    case 1:
                        array[i] = 68;
                        break;
                    case 2:
                        array[i] = 51;
                        break;
                    case 3:
                        array[i] = 26;
                        break;
                    case 4:
                        array[i] = 35;
                        break;
                    case 5:
                        array[i] = 44;
                        break;
                    case 6:
                        array[i] = 117;
                        break;
                    case 7:
                        array[i] = 46;
                        break;
                    case 8:
                        array[i] = 25;
                        break;
                    case 9:
                        array[i] = 76;
                        break;
                    case 10:
                        array[i] = 44;
                        break;
                    case 11:
                        array[i] = 50;
                        break;
                }
            }
            byte[] bytes = Encoding.UTF8.GetBytes(string.Format("{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}{11}{12}", new object[]
{
            UUID,
            Convert.ToChar(Convert.ToInt32(array[0].ToString(), 16)),
            Convert.ToChar(array[1]),
            Convert.ToChar(array[2]),
            Convert.ToChar(Convert.ToInt32(array[3].ToString(), 16)),
            Convert.ToChar(array[4]),
            Convert.ToChar(Convert.ToInt32(array[5].ToString(), 16)),
            Convert.ToChar(array[6]),
            Convert.ToChar(array[7]),
            Convert.ToChar(Convert.ToInt32(array[8].ToString(), 16)),
            Convert.ToChar(Convert.ToInt32(array[9].ToString(), 16)),
            Convert.ToChar(array[10]),
            Convert.ToChar(Convert.ToInt32(array[11].ToString(), 16))
}));
            SHA1 sHA = new SHA1Managed();
            string HashToken=Convert.ToBase64String(sHA.ComputeHash(bytes));
            return HashToken;
        }

创建一个C#工程……我们来复现这部分计算代码吧

当然画窗口这部分我是不讲的……因为这个完全是看个人的喜好,本例子中就画了文本框用来输入UUID、显示token、显示登陆数据
看代码可知 Convert.ToBase64String(sHA.ComputeHash(bytes)))生成的就是token,bytes部分代码复制即可了
继续观看下一个数据connect

可以看见它发送了一个数据就是login.php返回的sess_key,那么我们应该如何处理才能获取这个sess_key?自己写代码固然是一个方法……但是我更偏好于从游戏程式中拉取它的代码

简单找找看我们可以看见这个,直接把获取key部分弄下来就可以了,其他管这么多干嘛

[C#] 纯文本查看 复制代码
?
1
2
3
4
5
6
public static int GetSSKEY(string jsonstr)
{
    IDictionary dictionary = (IDictionary)Json.Deserialize(jsonstr);
    sess_key = (string)dictionary["sess_key"];
    return 0;
}

这个处理json的部分在 Assembly-CSharp-firstpass.dll里面……我们直接引用这个就好了
嗯……拿到了sess_key我们把它作为一个公有静态变数,别问我为什么,接下来几讲你会明白的
解决了connect我们再看下一个HomeShow

看见这个我们就明白了……登陆已经完成了。还记得上面那张图么……
这些信息就是登陆后会出现的信息关于如何处理这些信息,我们在下一章文章再讨论。
别问我为什么下一章再解决……我去刷卫星炮PA去

卫星炮才1……这输出怎么能有啊……话说有没有大佬带我刷SHAQ地坑啊

接下来就是测试的时候了。

显示了跟fiddler一样的信息……我们的登陆部分成功的完成了撒~
本章工程地址,话说不用网盘行不行……网盘更新很不方便啊ORZ
https://coding.net/u/YoshinoSaku ... 84a3b6d11a84788ea12
请务必看好commit版本……不然会对不上代码的,因为只是为了登陆成功……所以类似逻辑判定都是没有的即使是连基础的UUID是否为空的判定都没有,再后几章才会开始修复各种因为逻辑带来的问题
才会开始讲优化与以外防止与处理
那么今天就到这里了……下一章我看看什么时候刷完卫星炮PA再说
预计是讲述如何处理主页面的信息,并将其化为可读性高的形式
技术这种东西是需要大家一起交流的,故此发进论坛中,因为常年都没有写文章,所以有些语无伦次
这个时候就应该说:请大家斧正
附注http发送部分参考了http://www.cnblogs.com/itjeff/p/4022220.html
词汇注解……不知道为什么每次手快都会打出奇奇怪怪的词汇
程式=程序
ORZ=颜表情,失意体前屈
判定=判断
伺服=服务
变数=变量
信赖CS模组=可信客户端模型
反组译=反编译,但并不是反汇编
稍微把图片上传了一下,才发现论坛并没有自动保存图片到本地的功能,用WP用的太习惯导致没留意这个问题
如果有什么好的建议可以提出哦,下次写东西才能更加的清楚明了

点评

不用开安卓游戏也能肝……脱机挂揭秘与简记(1)相关推荐

  1. 服务器系统挂安卓游戏吗,云服务器可以挂游戏吗

    云服务器可以挂游戏吗 内容精选 换一换 本章节主要介绍弹性云服务器.裸金属服务器和镜像服务,让您更好的了解这些计算服务. 假设您的云服务器已经部署好应用,您可以将这台云服务器创建为私有镜像,然后通过私 ...

  2. 《飞机大战》安卓游戏开发源码(三)

    为什么80%的码农都做不了架构师?>>>    本文章属于原创性文章,珍惜他人劳动成果,转载请注明出处:http://www.pm-road.com/index.php/2014/1 ...

  3. ios android 联机游戏平台,iOS 和安卓游戏终于互通了

    目前市面上绝大多数的游戏都分为 iOS 和安卓版,两个平台的玩家虽然可以联机对战,但游戏数据却不互通.玩家在更换不同平台的手机后,原有角色会因为系统更换而无法在新手机中继续使用. iOS 和安卓游戏数 ...

  4. 安卓手机测评_安卓游戏最新测评

    如今,手机游戏已经逐渐成为许多人生活中不可或缺的一部分.但尴尬的是,有时候我们用手机玩游戏不方便,怎么办?既然电脑可以模拟手持游戏,那还能模拟安卓游戏吗? 答案是安卓游戏最新测评肯定的,现在这个模拟A ...

  5. cs有时说更新到10点,可登录游戏却是服务器维护中,绝地求生居然学起了CS?新开的游戏模式,中国玩家10年前就玩过!...

    原标题:绝地求生居然学起了CS?新开的游戏模式,中国玩家10年前就玩过! 大家周末好,X博士又来了~ 本周的热门游戏事件有点多,一句两句无法说清楚,还是跟X博士一起走进本周的热游情报看看究竟吧. 划重 ...

  6. 兼容android9的游戏盒子,安卓游戏盒子app下载

    手机游戏,是安卓游戏玩家最好的游戏平台. 功能介绍 游戏中心:手机游戏汇集一箩筐,各种刺激各种虐: 个人中心:管理手机上的游戏,"我的手机,我做主"! 游戏礼包:可以在这里领取到各 ...

  7. 安卓游戏广告加速插件_WeFun安卓免费加速体验 那些年不逊于主机游戏的手机游戏...

    更多更好玩的游戏资讯尽在WeFun游戏社区,大家好,WeFun又和大家见面,本期我们要盘点的游戏趣事是什么呢?那么,老规矩,搞快点. 对于现在的玩家来说,说到手游,可能很快就能想到基于安卓或者IOS的 ...

  8. android游戏盒子,安卓游戏盒子

    安卓游戏盒子是一个手机游戏的下载平台,用户可以在这里下载任何你想玩的游戏,并且可以深入的了解到这款游戏的相关信息.安卓游戏盒子是安卓智能手机的资源获取和管理工具.可以给用户提供免费的安卓游戏资源,能够 ...

  9. EA大作安卓游戏:《死亡空间》攻略

    EA的大作<死亡空间(Dead Space)>登陆到了ios平台之后终于空降安卓游戏平台啦,原作在PC平台上就是超火热的大作,这次移植到手机平台上的作品是原死亡空间1代的后续剧情,可以说是 ...

最新文章

  1. tensorflow中tensor的索引
  2. mysql性能优化-慢查询分析、优化索引和配置
  3. MFC中滚动条slider和编辑框edit的联动
  4. bilibili有电脑版吗_你体验过电脑版的《和平精英》吗?不用担心内存,也不用担心卡顿...
  5. 在使用angular2中使用nodejs创建服务器,并成功获取参数
  6. 鞭策你一辈子的好文章
  7. 无监督学习和监督学习的区别
  8. 响应式网站设计_通过这个免费的四小时课程,掌握响应式网站设计
  9. RuntimeError: freeze_support()
  10. (软件工程复习核心重点)第十章面向对象设计-第一节:面向对象设计的基本概念与准则
  11. Visual Studio 2019 v16.4 Preview 2 发布
  12. NHK SHV 的 22.2 声道音频系统
  13. boobooke ORACLE MYSQL C JAVA视频学习资料
  14. Ubuntu下kdiff3的使用
  15. Mac安装ffmpeg时 Failed to download resource quot;texi2htmlquot; 的解决办法
  16. 怎么查看笔记本内存条型号_笔记本如何加内存条之如何查看笔记本内存品牌和型号...
  17. android绘制半圆弧线_android实现简单圆弧效果
  18. 【系列】重新认识Java——基本类型和包装类
  19. 豆瓣的python库安装源
  20. 【转载】Oracle 大字段处理

热门文章

  1. 一眼就会table隔行换色、table表头固定、隔行色、鼠标移动行换色
  2. 如何通俗理解海涅定理
  3. 射频应用>>>Si44xx射频芯片>>>芯片版本信息区分
  4. nopi设置excel单元格的格式汇总
  5. 本人亲测-inno setup打包EXE(较完整实例)
  6. 自适应均衡matlab仿真,对比RLS,LMS以及NLMS的均衡前后星座图效果,调制采用4QAM,16QAM,64QAM
  7. mac版+2018a+matlab,求助,mac系统 点击配置就报错,matlab版本2018a
  8. STM32CubeMX生成STM32F072 USB 自定义HID Device
  9. 用 50 行代码写个听小说的爬虫,以后洗澡也可以听小说了
  10. C# Volo.Abp使用原生sql语句查询