qq700418 发表于 2016-10-17 16:44

记一次小白的手游脚本破解过程及难题【未完成】

最近因为一直有玩一个网游,发现一款直接内置进手游lua脚本的辅助。
于是来了兴趣,开始研究。


这是那款辅助的安装包,

里面的文件是这样的,妈呀连个后缀都没有我要怎么弄,因为我也是个半懂不懂的小白,于是开始各种查文件头啊什么的。

后来发现某些文件并没有加密,直接txt就可以打开于是乎,看到了这些代码,但是我不懂这是什么语言写的。但是通过一些代码的txt文本输出,结合辅助的界面,发现这些并为加密的文件只是一个界面的输出。然后我那股兴奋又开始蛋疼了。

接下来对里面一些加密的文件进行分析,

看到这些我也不懂是什么啊。各种百度啊什么的。发现这是自定义的一些加密压缩。那可咋整啊
后来翻看手游本身的一些文件跟这个安装文件一样没有后缀的资源文件。发现加密方式一样。都是这个文件头。那解密就要从手游本身入手了。可能这个辅助脚本直接调用的手游本身的加密方式吧。

先看看手游的资源目录┌─HashRes
┊      ├─00
┊               ├─000000
┊               ├─   ┊
┊               ├─FFFFFF
┊      ├─01
┊      ├─┊
┊      ├─FF
HashRes中的文件夹名称和子文件名组合成了一个4字节的Hash名,如下图反编译so文件后看到的寻找资源的Hash路径
http://img.my.csdn.net/uploads/201603/24/1458804146_5918.jpg

先分析文件怎样加载的,在IDA中反汇编中定位到cocos2d::LuaStack::luaLoadBuffer()这个方法
http://img.my.csdn.net/uploads/201605/28/1464365001_7312.png
首先注意的是strncmp ( const char * str1, const char * str2, size_t n )的返回值:若str1与str2的前n个字符相同,则返回0lrc4这个类就是解密lua的根据上面的分析后,因为学C#的 我就用C#写了个提取工具解密文件代码片段
最终得到的lua资源文件为lua编译过的二进制文件

至于为什么不是luac后缀。这个我存储的时候特意区分的。

并不是lua源码,想得到源码就得反编译luaq文件。
其实我也就是个小白。到这我不知道改怎么弄了,就各种百度找资料反编译啊。
各种求助。有人告诉我用unluac。我也不懂什么就去下载。

就是这个东西。幸亏有编程基础。一眼就看出来了这是一个java文件呀。
可是多年没用java电脑并没有装。
然后各种折腾安装控制台。
泥煤啊。后来发现这个只需要一个java环境直接可以运行了。

就是这样就可以反编译出来加密的lua脚本了。
当我满怀兴奋的去开始折腾。结果呢。出来的是乱码。
我就奇怪了。结果各种求助啊。
就发现泥煤的lua脚本加密方式也是自定义的。
说什么自定义lua虚拟机的Opcode。
没听过啊。什么鬼。
这就要求助大神了。
一翻折腾
在IDA中定位lua_load然后一直跟到f_parser进入luaU_undump→LoadFunction→luaG_checkcode→symbexec,在symbexec中有个switch的循环里面有部分的opcode,通过和源码中的逻辑比对找出对应的opcode
这是大神完成的。我也不懂。
找到了Opcode之后就是修改反编译工具里面的Opcode为你找到的Opcode。
发现还是要用到java工作台
unluac.jar直接修改OpcodeMap里的map,改成对应游戏修改后的Opcode即可
然后继续尝试反编译


我想这应该是lua的源码的 。因为没有学过这个语言不大了解。
我查看这些源码的时候发现这个语言他为什么写法都用字符串拼起来的。
对了。上面的源码就是辅助的lua脚本源码了。因为他真的用的是手游的加密方式。我不知道他怎么做到的。
这个作者也够拼的吧。

好了拿到源码了。开始破解了。我想当然的以为找到他的登陆提示就改他的判断就可以了吧。
但是我找遍所有代码没发现有登陆提示的文字啊。没有一句中文。这是咋回事呢。
那就找平常编程用的方法的定义名称吧。
尝试admin login等
结果login就找到了。不知道是不是登陆验证。放上代码。

找到这个login的调用

通过login调用找到这个方法。
有没大神看下这个是不是验证。因为我还没破解成功呢。

然后我把所有的false 改成true 。然后我也没加密回流。直接删掉后缀改成他原来的名称(我也不知道没有回流可以不可以的。有大神告诉下嘛,如果需要回流lua脚本怎么通过他定义的Opcode编译呢)

修改完后我直接把这个文件放回安装包。然后放进手游进行安装。

结果发现不行。没作用。提示还是原来的登陆失败。

我就找原因。发现他还有访问服务器。会重新下载安装包

就是这个文件夹。下载在手游目录。然后立马又删除了。我手速快。复制出来的。原谅我的笨方法。
然后我看了下这个不就是安装包的内容吗。那为什么还需要一个安装包呢。
然后这个安装包的文件不是我修改过登陆验证的。
那他这个重新下载马上删除。我应该怎么替换他的文件呢。

我又看代码,找到他安装会请求服务器的文件什么的。
我彻底蒙圈了。不知道怎么搞了。目前到这一步了。不知道怎么继续破解了

wmsuper 发表于 2016-10-25 14:07

1.其实不用那么麻烦,它的的逻辑大致是这样的检测是否有加密头部(对应文件开头的字符串),如果有则解密,没有的话就直接调用luaL_loadbuffer(),然后检测头部是否的字节码的头部,是的话直接调用字节码加载函数,否则的话就是源码,调用源码加载函数:
tf = ((c == LUA_SIGNATURE) ? luaU_undump : luaY_parser)(L, p->z, &p->buff, p->name);
所以直接改完放入源码是没问题的
2.关于更新问题,一般在lua配置文件有软件版本,有逻辑和界面更新( 有界面、逻辑更新:6.0->6.1 有重大更新:6.9->7.0)会使用热更新,即不更换apk的方式(重大更新需要更新apk包),修改思路要么修改版本号,要么pass掉更新逻辑。
3.如果必须要修改opcode时在lua源码(非luajit)的lopcodes.h中有opcode的 定义 对应软件中的修改之即可,再重新编译生成的luac.exe就能编译软件的lua源码。

跟着我说哦买噶 发表于 2016-10-17 18:22

qq700418 发表于 2016-10-17 17:49
啊。我ID怎么啦。求教

第三章注册、管理账号规则
凡注册的账号自动视为同意注册的账号归论坛所有
包含以下内容的注册名将被无条件删除:
第1条党和国家领导人或其他名人的真实姓名、字、号、艺名、笔名,国家机构或其他机构、和政治、宗教有关之敏感的名称
第2条不文明、不健康、易产生歧义、引起他人误解的名称
第3条非官方途径购买的账号,论坛账号和邀请码禁止贩卖
第4条不论出于何种目的原因,论坛账号均不得转赠或给予他人使用,不得同时拥有多个账号
第5条以通讯账号作为论坛ID(例如:QQ12345或在其他地方说明通讯账号为论坛ID)等 2015年3月28日前注册账号暂不做处理

违反,第五条规定{:17_1058:}

逍遥一仙 发表于 2016-10-17 16:52

第三个图片是json

qq700418 发表于 2016-10-17 17:07

cyp777777 发表于 2016-10-17 16:52
第三个图片是json

其他待解决问题的。大神懂吗

枫叶工作室 发表于 2016-10-17 17:30

屏蔽他的客户端检测网址

qq700418 发表于 2016-10-17 17:34

枫叶工作室 发表于 2016-10-17 17:30
屏蔽他的客户端检测网址

他这个安装的。如果屏蔽了就会显示下载失败稍候再试

跟着我说哦买噶 发表于 2016-10-17 17:36

{:17_1058:}热心提示:楼楼你ID违规了,赶紧花100CB改名吧

qq700418 发表于 2016-10-17 17:49

跟着我说哦买噶 发表于 2016-10-17 17:36
热心提示:楼楼你ID违规了,赶紧花100CB改名吧

啊。我ID怎么啦。求教

二师兄。 发表于 2016-10-17 18:28

1..禁写入权限.2..抓包替换他的下载资源
二个思路你试试看吧

qq700418 发表于 2016-10-17 18:35

跟着我说哦买噶 发表于 2016-10-17 18:22
第三章注册、管理账号规则
凡注册的账号自动视为同意注册的账号归论坛所有
包含以下内容的注册名将被 ...

这个不是我的通信账号。就是注册账号的习惯。管理不要误会啊
页: [1] 2 3
查看完整版本: 记一次小白的手游脚本破解过程及难题【未完成】