吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 28623|回复: 35
收起左侧

[原创] 某游戏罗技鼠标宏逆向分析

[复制链接]
XueSec0re 发表于 2018-10-6 16:01
1.从朋友哪收到的文件,分析了一波。
1.png

是罗技鼠标宏的xml文件,可以通过软件导入。

2.内容被加密混淆了

观察后发现,它是通过 loadstring(a) -> a 是一个函数用来解密字符串

百度查到的信息

[Lua] 纯文本查看 复制代码
LUA loadstring

类似加载,从给定的字符串得到块。
要加载和运行一个给定的字符串

 

一般如下用法:

assert(loadstring(script))()


3.这类做法在做CTF的时候都做烂了,有个非常简单的思路,首先loadstring 的参数一定是具体代码的字符串,所以只要直接打印出其参数内容即可。

首先简单的格式化下代码

[Lua] 纯文本查看 复制代码
local code = (function()local __d = xxxxxxx 省略一万个字符串 )()
loadstring()()


4.尝试对code直接进行打印

使用罗技自带的脚本测试工具,进行调试

2.png

查看API文档,发现其有2个函数用来打印字符串。

3.png

另外一个函数基本一致,不过是用dbgview来接受。

5. 尝试打印

4.png

喜闻乐见的报了错,猜测是因为字符串里包含转义字符串导致的

就比如 %d 但是参数不带 整数于是就出错了。

多次调试添加各种参数还是出错,感觉有点麻烦,于是尝试替换字符串。

6.替换字符串
函数原型 string.gsub(s, pat, repl [, n])
就是 global 全局替换子字符串的意思
s: 源字符串
pat: 即 pattern, 匹配模式
repl: replacement, 将 pat 匹配到的字串替换为 repl
[, n]: 可选, 表示只看源字符串的前 n 个字符
5.png

喜闻乐见的又出错了,因为对于lua还是不太熟悉,如果有知道原因的可以说一下。

不想多纠缠于是决定直接把内容进行base64 再打印 (base64 是通过用所有可视字符为所有字符编码,理论上会多4/3字节,具体原理可以自己百度)

7.网上抄来的函数

[Lua] 纯文本查看 复制代码
local function encodeBase64(source_str)
    local b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
    local s64 = ''
    local str = source_str
 
    while #str > 0 do
        local bytes_num = 0
        local buf = 0
 
        for byte_cnt=1,3 do
            buf = (buf * 256)
            if #str > 0 then
                buf = buf + string.byte(str, 1, 1)
                str = string.sub(str, 2)
                bytes_num = bytes_num + 1
            end
        end
 
        for group_cnt=1,(bytes_num+1) do
            local b64char = math.fmod(math.floor(buf/262144), 64) + 1
            s64 = s64 .. string.sub(b64chars, b64char, b64char)
            buf = buf * 64
        end
 
        for fill_cnt=1,(3-bytes_num) do
            s64 = s64 .. '='
        end
    end
 
    return s64
end
 
local function decodeBase64(str64)
    local b64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
    local temp={}
    for i=1,64 do
        temp[string.sub(b64chars,i,i)] = i
    end
    temp['=']=0
    local str=""
    for i=1,#str64,4 do
        if i>#str64 then
            break
        end
        local data = 0
        local str_count=0
        for j=0,3 do
            local str1=string.sub(str64,i+j,i+j)
            if not temp[str1] then
                return
            end
            if temp[str1] < 1 then
                data = data * 64
            else
                data = data * 64 + temp[str1]-1
                str_count = str_count + 1
            end
        end
        for j=16,0,-8 do
            if str_count > 0 then
                str=str..string.char(math.floor(data/math.pow(2,j)))
                data=math.mod(data,math.pow(2,j))
                str_count = str_count - 1
            end
        end
    end
 
    local last = tonumber(string.byte(str, string.len(str), string.len(str)))
    if last == 0 then
        str = string.sub(str, 1, string.len(str) - 1)
    end
    return str
end


8.终于成功打印了内容

6.png

试图去复制内容的时候,又碰到了一个非常傻的情况,一旦我点击右键,它会尝试去调用null的值,选中的内容又没了,没办法复制。

这里我想到了几个办法去解决

1.使用前面提到的dbgview来接受,但是它直接卡死了。。。。。。。。。。。可能是太长了

2.直接像窗口投递消息复制内容,发现这货是不是win32的窗口,而是画出来的界面,失败

9.尝试解决这个错误。

再次查看api文档

7.png

有个回调函数的设置,猜测就是它直接用它覆盖前面解密函数里的回调函数(我猜是在那里)

[Lua] 纯文本查看 复制代码
function OnEvent(event, arg)

end


成功获取到内容,进行base64decode

8.png

内容完成,如果你好奇怎么装回去,你就把修改好的内容base64encode 直接 给之前的变量 code,再拿去loadstring就好了。

免费评分

参与人数 7威望 +2 吾爱币 +17 热心值 +4 收起 理由
good-idea + 1 再拿去loadstring是怎么个操作法?说得很高级的样子
电科信息士 + 1 用心讨论,共获提升!
hnm372 + 1 + 1 热心回复!
Hmily + 2 + 10 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
smile1110 + 2 + 1 我很赞同!
Max.tAop + 1 用心讨论,共获提升!
风吹屁股凉 + 1 + 1 用心讨论,共获提升!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

电科信息士 发表于 2018-11-25 21:01
楼主,您能受累推荐几个讲鼠标等外设的帖子或者相应的开发网址吗?您上述的东西我不是特别懂,但是我感觉通过无线抓包以及相应的解析罗技的包。第三者是可以解析罗技使用者的一举一动的。
 楼主| XueSec0re 发表于 2018-10-6 17:51
天川天音 发表于 2018-10-6 17:01
楼主可以发一下lua的API文档给参考一下吗?

我看的是罗技的api文档,自带的软件里有

免费评分

参与人数 1吾爱币 +1 收起 理由
天川天音 + 1 谢谢@Thanks!

查看全部评分

周二两 发表于 2018-10-6 16:45
zxy453326 发表于 2018-10-6 16:48
学习一下 反正也看不懂
qeh8902 发表于 2018-10-6 16:52
谢谢楼主,值得学习
头像被屏蔽
sstm 发表于 2018-10-6 16:58
提示: 作者被禁止或删除 内容自动屏蔽
天川天音 发表于 2018-10-6 17:01
楼主可以发一下lua的API文档给参考一下吗?
w1223 发表于 2018-10-6 17:12
这么会分析的吗?大佬加油
xiaosuobjsd 发表于 2018-10-6 17:15
看不懂,只能给大佬加油了
caidem 发表于 2018-10-6 17:49
完全听不懂
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-27 05:26

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表