Android逆向实战篇(Luac文件解密)

本文介绍了一种针对加密的luac文件进行解密的方法,包括如何从APK中找到解密所需的关键元素key和sign,并利用开源工具完成解密过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

luac文件解密还原

近日逆向一个app的时候发现它的主要功能都是用lua实现的,查看资源文件时发现,文件后缀是luac而非lua,打开一看全是乱码。那么毫无疑问,这是一个被加密过的文件,我们需要把它逆向还原出来,或者说解密出来更为合适。

luac加密有两个关键元素,key和sign。sign是加密标记,用于判断脚本是否加密,key是xxtea解密时候的秘钥。我们要做的,就是从apk中找到这两个元素。

从apk中获取线索

apk逆向的事这里就不多说了,这个app没有任何加固,直接apktool就一键逆向了。

首先查看lib文件夹,找出加密lua用的so文件,看到了一个libcocos2dlua.so,毫无疑问它就是我们要找的犯罪嫌疑人。so文件直接用编辑器打开肯定是难搞的,所以直接在linux中执行了一行strings -a libcocos2dlua.so > a.txt,然后把a.txt文件保存下来。我们要找的key和sign就保存在这个文件中,怎么把他们找出来,暂时按下不提,先往下看。

接着,随便找一个luac文件,用编辑器打开它,大概长这样

kldk2019vf�6
q�U�����BA�4n��|<i��P�r�Ql�9#��UQD\ga�<M)�oF$rL$�
��L�l���z���l��7�^�z� O7a�,�.���}\�y���6`�ƥ�B��@�5�����>�(�����Ѷ{|'�Ň����2�e@Wvno�D
......

luac文件的开头处,就是sign,那么这里是kldk2019还是kldk2019vf,我也不知道,先把kldk复制下来,然后去刚才保存的a.txt文件中搜索。于是搜索到了如下内容:

......
APP_RESIGN_ACTIVE_EVENT
APP_BECOME_ACTIVE_EVENT
klnn2019
kldk2019
main.lua
Native OpenUDID = %s
yvcc.YVTool:speechVoice
......

那么很显然,我们要找的sign就是kldk2019,它的上面,就是key了。如此一来,两个关键元素就找到了,非常轻松加愉快。

使用key和sign解密luac文件

虽然造轮子趣味无穷,但我还是更喜欢大佬的现成代码。github地址如下:
https://github.com/cocos2d/cocos2d-x-3rd-party-libs-bin/tree/v3/xxtea
Tips: 把xxtea.cpp重命名成xxtea.c

下载两个文件之后,执行如下命令:

gcc main.c xxtea.c -o unluac

然后你就会收获一个unluac文件。找一个luac文件来,执行:

lua_decrypt main.luac main.lua kldk2019 klnn2019

然后你就会收获一个main.lua文件,打开一看,清晰明了的源码,完事儿!

附赠批量执行代码

import os


def batch_process(file_dir: str) -> None:
    for root, dirs, files in os.walk(file_dir):
        for f in files:
            if f.endswith("luac"):
                path_src = os.path.join(root, f)
                path_targ = path.replace("luac", "lua")
                os.system(f"lua_decrypt {path_src} {path_targ} kldk2019 klnn2019")

要在linux环境中执行哦,windows下破事儿一大堆。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值