当前位置: 首页 > news >正文

天水网站建设博客产品营销策划

天水网站建设博客,产品营销策划,在网站用什么做页面布局,项目名称有创意大全网上各种教程、各种工具用不了,才会有这个文章。附件是我修改的支持luajit 2.1.0-beta2反编译的LJD lua bytecode解密 知己知彼很重要,搜索“cocos2dx lua 加密”大概可以找到类似下面的代码。 bool AppDelegate::applicationDidFinishLaunching() {...C…

网上各种教程、各种工具用不了,才会有这个文章。附件是我修改的支持luajit 2.1.0-beta2反编译的LJD

 

lua bytecode解密

 

知己知彼很重要,搜索“cocos2dx lua 加密”大概可以找到类似下面的代码。

bool AppDelegate::applicationDidFinishLaunching()
{...CCLuaStack *pStack = pEngine->getLuaStack();// 如果设置了 -e 和 -ek 要加上下面这句// pStack->setXXTEAKeyAndSign("aaa", 3);// 如果设置了 -e 和 -ek -es 则要加上下面这句pStack->setXXTEAKeyAndSign("aaa", 3, "XT", 2);// load frameworkpStack->loadChunksFromZip("res/framework_precompiled.zip");pStack->loadChunksFromZip("res/game.zip");pStack->executeString("require 'main'");return true;
}

 

我的目标是一个ANDROID游戏,APK文件直接解压。一般情况是libcocos2dlua.so,IDA 打开,函数窗口直接搜索applicationDidFinishLaunching,就能带你飞,可惜只有loadChunksFromZip,没有setXXTEAKeyAndSign,这保存解密KEY的被编译优化了。怎么办?IDA字符串窗口帮你忙,编译器编译代码的时候都是就近原则,只要是差不多地方出现的字符串,都会被放在一起。加密的ZIP文件,文件头几个字符就是setXXTEAKeyAndSign的SIGN参数,加上ZIP文件本身的路径,搜索目标ZIP文件就可以了。如图,IDA显示附近也就几个字符串,剩下的KEY参数是哪个,一个一个试就可以了。

 

加密的ZIP文件:

 

 

IDA中的字符串,第一个黑块是SIGN参数,非常幸运,尝试第二个黑块就是KEY:

 

 

https://github.com/cocos2d/cocos2d-x/search?p=1&q=loadChunksFromZip&type=&utf8=%E2%9C%93 找到cocos2dx的loadChunksFromZip的源码

 

        if (isXXTEA) { // decrypt XXTEAxxtea_long len = 0;buffer = xxtea_decrypt(bytes + stack->_xxteaSignLen,(xxtea_long)size - (xxtea_long)stack->_xxteaSignLen,(unsigned char*)stack->_xxteaKey,(xxtea_long)stack->_xxteaKeyLen,&len);zip = ZipFile::createWithBuffer(buffer, len);} else {if (size > 0) {zip = ZipFile::createWithBuffer(bytes, (unsigned long)size);}}

 

这里我遇到一点困难,cocos2dx的源码项目,没有xxtea的源码!不过还是让我在github搜索出来了,源码在此:

 

https://github.com/xxtea/xxtea-c

 

直接写个C++代码,就把加密的ZIP解出来了。顺带一提,Sign就是用来跳过,跟什么PE,MZ是一样的。

 

HANDLE hFileOUT = CreateFile(L"e:\\tmp\\y1\\xxx\\assets\\res\\de_xxx.zip", GENERIC_ALL, 0, 0, CREATE_ALWAYS, 0, 0);
HANDLE hFile = CreateFile(L"e:\\tmp\\y1\\xxx\\assets\\res\\xxx.zip",GENERIC_ALL, 0,0,OPEN_EXISTING,0,0);
if (hFile != INVALID_HANDLE_VALUE)
{
DWORD dwSize = GetFileSize(hFile, 0);size_t  dwOut = 0;
DWORD dwRead = 0;
LPBYTE p = new BYTE[dwSize];ReadFile(hFile, p, dwSize, &dwRead, 0);
DWORD dwSignLen = 3;
LPBYTE p2 = (LPBYTE)xxtea_decrypt((void *)(p + dwSignLen), dwSize - dwSignLen,(void *) "key", &dwOut);WriteFile(hFileOUT, p2, dwOut, &dwRead, 0);
delete p;CloseHandle(hFileOUT);
CloseHandle(hFile);
}

 

de_xxx.zip的头两个字节变成喜闻乐见的PK,解压,搞定。

 

Luajit ASM

 

解压出来的文件,都是LuaJIT— a Just-In-Time Compiler for Lua,文件头长这样:

 

 

 

http://luajit.org/download.html 可以下载到LuaJIT的源码,不过兼容性有点糟糕,需要找到正确的版本才有效。回到IDA字符串窗口搜索luajit,可以确认目标APK使用的是2.1.0-beta2。下载源码,编译之后,使用类似下面的命令行:

 

luajit.exe -bl xxx.lua.bytecode xxx.lua.asm

 

可以看到LUA的ASM代码了,LUA ASM长这样:

 

0013    TGETV    4   4   1

0014    CALL     3   4   2

0015    ISNEXT   6 => 0019

0016 => MOV      8   7

0017    MOV      9   2

0018    CALL     8   1   2

0019 => ITERN    6   3   3

0020    ITERL    6 => 0016

0021    RET0     0   1

 

BYTECODE的定义在http://wiki.luajit.org/Bytecode-2.0 。不过我智商不够,看不懂,

 

Luajit decompiler

 

搜索了无数反编译文章,基本就是https://github.com/NightNord/ljd ,然而这货2014年之后就再没更新了,并不能用,没有选择,只能自己动手改。

 

1. 由于新Opcode导致的失败

 

luajit 2.1.0-beta2源码的lj_bc.h里的#define BCDEF,下方就是长长一串Opcode定义。

 

Ljd源码的bytecode\instructions.py 和 rawdump\code.py的两张Opcode表必须跟luajit 2.1.0-beta2 的lj_bc.h一一对比,少了的就要补上。

 

这里不得不吐槽一下luajit,新增Opcode其实并没有人用,Opcode是通过数组维护的,随便加个新的Opcode都会导致原有的Opcode编码改变。。。

 

2. 由于assert导致的失败,注释掉就好了。虽说有点不负责,但是反编译各种语法处理我也不懂。

 

LJD改好之后,main.py xxx.lua.bytecode > xxx.lua,终于可以看到正常的代码:

 

DeprecatedNetworkClass = {} or DeprecatedNetworkClasslocal function deprecatedTip(old_name, new_name)
print("\n********** \n" .. old_name .. " was deprecated please use " .. new_name .. " instead.\n**********")return
endDeprecatedNetworkClass.WebSocket = function ()
deprecatedTip("WebSocket", "cc.WebSocket")return cc.WebSocket
end
_G.WebSocket = DeprecatedNetworkClass.WebSocket()return

 

完毕!

 

20170417补充说明:

 

请大家先确认自己的目标,再使用代码。如果版本不一致,你们需要先对比luajit源码中的lj_bc.h和https://github.com/NightNord/ljd的bytecode\instructions.py 和 rawdump\code.py中的OPCODE表,对得上,才能正确反编译,对不上就自己参照着来改。

 

 

 

上传的附件:
  •  ljd-master2.1.0b2.7z (84.45kb,745次下载)
http://www.lbrq.cn/news/2755423.html

相关文章:

  • 直播网站开发 java知识点百度关键词优化软件怎么样
  • 做直播网站找哪个网站好站长之家站长工具综合查询
  • 访问wordpress.com搜索引擎优化名词解释
  • 日本做僾网站百度的竞价排名是哪种方式
  • 商城网站 搭建软件开发工资一般多少
  • 网站seo应用seo专业培训课程
  • 网站首页的滚动图片怎么做的网络营销企业网站优化
  • 做企业网站步骤在百度平台如何做营销
  • 关于服装店网站建设的策划方案营销怎么做
  • 大数据平台网站建设人员优化方案怎么写
  • 哪些主机可以做美女图片网站优化网络软件
  • 福州免费项目建设管理系统网络营销优化推广
  • 校园 网站建设 知乎惠州seo网站管理
  • 做滚动图的免费网站产品推广方式都有哪些
  • 计科专业毕设做网站谷歌外贸seo
  • 网站怎么做推广和宣传语竞价推广遇到恶意点击怎么办
  • 北京商地网站建设公司如何让网站快速收录
  • 建设的比较好的网站企业培训课程有哪些
  • 南昌网站排名seo关键词排名优化软件怎么选
  • 花钱让别人做的网站版权是谁的win优化大师官网
  • 素材网大全杭州seo关键字优化
  • 做网站的案例百度手机助手下载2021新版
  • 网站公司维护网站建设明细报价表
  • 网站建设空间是指什么江苏网站开发
  • wordpress给tag增加字段惠州seo优化
  • wordpress模板 付费企业关键词优化价格
  • 做网站用vue还是用jqueryseminar怎么读
  • 近期疫情最新通报青岛谷歌优化公司
  • 长春网站建设同信今天的新闻最新消息
  • 做攻略的网站网络营销做得比较成功的企业
  • Python day48.
  • 【MySQL学习|黑马笔记|Day7】触发器和锁(全局锁、表级锁、行级锁、)
  • PowerShell 第11章:过滤和比较(上)
  • 【读论文】医疗AI大模型:百川开源Baichuan-M2
  • pdf合并代码
  • 基于机器学习的赌博网站识别系统设计与实现