精易论坛

标题: c++求转易语言 [打印本页]

作者: 王俞的瑜    时间: 2025-4-17 19:14
标题: c++求转易语言
static inline std::string GetFname(int key)
{
    std::string Name;
    try {

        //if (FnameCache.find(key) != FnameCache.end()) {
        //    return FnameCache[key];
        //}

        typedef unsigned char   uint8;
        uint64_t GNames = dma.modbase + offset::GName;

        uint32_t Block = (uint32_t)((key >> 0x12));
        int NameOffset = key & 0x3FFFF;

        uint64_t NamePoolChunk = dma.RAM<uint64_t>(GNames + Block * 8 + 0x8) + (unsigned int)(NameOffset * 2);
        uint16_t nameEntry = dma.RAM<unsigned __int16>((void*)NamePoolChunk);
        unsigned int nameLength = nameEntry >> 6;
        if (nameLength > 100)
        {
            return "N\A";
        }
        __int64 v7; // rcx
        __int64 v8; // r8
        bool v9; // zf
        char v11[1024]; // [rsp+20h] [rbp-828h] BYREF
        if ((nameEntry & 1) != 0)
        {
            dma.ReadMemory((uint64_t)(NamePoolChunk + 2), v11, nameLength * 2);
            if (LOBYTE(v11[0]))
            {
                v7 = 0i64;
                do
                {
                    *((uint8*)v11 + v7) ^= GetXorKey(nameLength);//-0x6E;//0xE5u;
                    v7 = (unsigned int)(v7 + 2);

                } while ((unsigned int)v7 < nameLength);
            }
        }
        else
        {
            dma.ReadMemory((uint64_t)(NamePoolChunk + 2), v11, nameLength);

            if (LOBYTE(v11[0]))
            {
                v7 = 0i64;
                do
                {
                    *((uint8*)v11 + v7) ^= GetXorKey(nameLength);//-0x6E;//0xE5u;
                    v7 = (unsigned int)(v7 + 1);

                } while ((unsigned int)v7 < nameLength);
            }
        }
        v11[nameLength] = '\0';

        Name = v11;

        //FnameCache[key] = Name;

        return Name;
    }
    catch (const std::exception&)
    {
        return NULL;
    }
    return Name;
}

汇编部分实在不知道怎么搞


作者: 不如沉默。    时间: 2025-4-17 19:14
.版本 2

.支持库 eAPI
.支持库 eThread
.支持库 eWeb

.程序集 窗口程序集1

.子程序 GetFname, 字符串型
.参数 key, 整数型

.局部变量 Name, 字符串型
.局部变量 GNames, 整数型
.局部变量 Block, 整数型
.局部变量 NameOffset, 整数型
.局部变量 NamePoolChunk, 整数型
.局部变量 nameEntry, 整数型
.局部变量 nameLength, 整数型
.局部变量 v7, 整数型
.局部变量 v11, 字节集
.局部变量 i, 整数型

GNames = dma.模基 + 偏移. GName

Block = (key >> 0x12)
NameOffset = key & 0x3FFFF

NamePoolChunk = dma.读取内存 (GNames + Block * 8 + 0x8) + (NameOffset * 2)
nameEntry = dma.读取内存 (NamePoolChunk)
nameLength = nameEntry >> 6

.如果真 (nameLength > 100)
    .返回 (“N\A”)
.如果真结束

v11 = 创建字节集 (1024)

.如果真 (nameEntry & 1)
    dma.读取内存块 (NamePoolChunk + 2, v11, nameLength * 2)
    v7 = 0
    .循环首 (v7 < nameLength)
        v11[v7] = v11[v7] ^ GetXorKey (nameLength)
        v7 = v7 + 2
    .循环尾 ()
.否则
    dma.读取内存块 (NamePoolChunk + 2, v11, nameLength)
    v7 = 0
    .循环首 (v7 < nameLength)
        v11[v7] = v11[v7] ^ GetXorKey (nameLength)
        v7 = v7 + 1
    .循环尾 ()
.如果真结束

v11[nameLength] = 0
Name = 字节集到文本 (v11)

.返回 (Name)

.子程序 GetXorKey, 整数型
.参数 length, 整数型

.局部变量 key, 整数型

// 这里需要根据实际情况实现GetXorKey函数
key = length ^ 0x6E
.返回 (key)
作者: 同学麻烦让让    时间: 2025-4-17 20:27
看这变量名是IDA里抠出来的吧
作者: lanran5303    时间: 2025-4-18 01:53
游戏逆向建议去定制区 另外你这个结帖率堪忧
作者: 王俞的瑜    时间: 2025-4-18 03:22
lanran5303 发表于 2025-4-18 01:53
游戏逆向建议去定制区 另外你这个结帖率堪忧

结帖率你因该看看压根没人回答我问题 我怎么结帖




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4