• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

【放置江湖】LUA手游 基于HOOK 解密修改流程

原作者: [db:作者] 来自: [db:来源] 收藏 邀请



1.下载拿到《放置江湖》 apk 后我们第一步检查游戏框架,直接查看 \lib 目录里面的 so就可以了。
 
很明显这也是一款基于cocos2dlua 开发的游戏。接着我们查看,他的lua脚本。
 
看来lua 脚本被加密了,解密的话,我还是比较推荐用Hook luaL_loadbuffer 的方法解密,我一般都比较喜欢用cydia substate框架。
[C] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
#define LIB "/data/app-lib/com.xhtt.app.fzjh-1/libcocos2dlua.so"
 
void * (*old_luaL_loadbuffer)(void * L, const char * buff, size_t  size, const char * name);
void * new_luaL_loadbuffer(void * L, const char * buff, size_t  size, const char * name)
{
    // 这里加入保存 buff 到内存卡的代码
    void * ret = old_luaL_loadbuffer(L, buff, size, name);
    return ret;
}
 
MSInitialize {
    MSImageRef ref = MSGetImageByName(LIB);
    void *sym_luaL_loadbuffer= MSFindSymbol(ref,"luaL_loadbuffer");
    MSHookFunction(sym_luaL_loadbuffer, (void*)&new_luaL_loadbuffer, (void **)&old_luaL_loadbuffer);
};

代码弄好以后,启动运行一次游戏就可以把游戏的全部Lua解密出来;
解密出来的代码 是lua 文件,不是luac的 这样就省去我们 反编译luac 代码的流程。

2.我们拿到了lua脚本代码后怎么用呢?修改了lua的逻辑以后在怎么加载到游戏里面去呢?
由于我也是第一次尝试**解密lua框架手游,我能想到的还是 luaL_loadbuffer 这个方法,在我们解密的过程中用这个方法拿到了lua明文代码,我们修改后的lua明文代码,还是在这个地方偷梁换柱。

如果采用改包的方式,我们还需要 把明文加密, 替换APK 文件, 签名。这个过程太复杂了。而且频繁的修改就要频繁的重复这个过程;
至于实现的话,为了让没有root的安卓用户也可以使用,我们又要用到 VA 框架了。

 

这是一个树林打鸟的任务,我们需要把  经验超过后的打工奖励 修改一下。把 这里我把5改成200 而且还有金币奖励;
接下来我们就该操刀 VA 游戏框架了。
VA HOOK SO 的实现过程 有很多,发一下核心实现过程
java 实现部分:
[Java] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
public class Native {
    private final static String TAG = "Plugin-Native";
    static {
        try{
            System.loadLibrary("plugin");
        }catch (Exception ex){
            Log.e(TAG, ex.getMessage(), ex);
        }
    }
 
    public static native void hook(String p);
}

c++ 实现部分:
[C++] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
extern "C" {
JNIEXPORT void JNICALL Java_com_plugin_Native_hook(JNIEnv *env, jclass jclazz, jstring p) {
    const char *path = env->GetStringUTFChars(p, NULL);
 
    MSHookType _hook;
    _hook = (MSHookType) findSymbol("libva-native.so", "_ZN5Cydia14MSHookFunctionEPvS0_PS0_");
    void *sym_luaL_loadbuffer = findSymbol(
            path,
            "luaL_loadbuffer");
 
    if (_hook != NULL && sym_luaL_loadbuffer != NULL) {
        _hook(sym_luaL_loadbuffer, (void *) &new_luaL_loadbuffer, (void **) &old_luaL_loadbuffer);
    }
 
}
}

[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
void *(*old_luaL_loadbuffer)(void *L, const char *buff, size_t size, const char *name);

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Lua(十五)——协同程序发布时间:2022-07-22
下一篇:
某lua游戏简单分析发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap