oin

writeup


2022-11-17

[TOC]

🌓今天喝茶,明天上班

🌙分析

主要逻辑很简单,byte_40a01c是密文,通过IDAPython进行提取

start = 0x40A01C
end = 0x40A048
li = []
for i in range(end-start):
    li.append(get_wide_byte(start+i))
print(li)

大概逻辑都在加密处理里面

根据加密特征发现是一个XXTEA加密,直接对照网上写出XXTEA解密函数,但是发现解密出来的数据是乱码,说明有问题,x32dbg调试看看加密过程有什么问题,一开始没有用sharpOD,然后发现并没有什么变化

但是程序里有这条语句,应该加了反调试,所以用上sharpOD,发现第三个参数被改变了

它在没有检测到调试的时候先执行如下函数

然后再调用该函数即完成了数据的替换

将脚本内部的第三个参数修改为该 0x74746561 即可

🌙Exploit

#include<stdio.h>
#include<stdint.h>

void decrypt(uint32_t *v, int n, int key) {
    uint32_t y, z, sum;
    unsigned p, rounds, e;
    rounds = 6 + 52/n;
    sum = rounds*key;
    y = v[0];
    do {
        e = (sum >> 2) & 3;
        for (p = n-1; p > 0; p--) {
            z = v[p-1];
            y = v[p] -= ((z >> 6 ^ y*4) + (y >> 3 ^ z*16)) ^ ((sum ^ y) + (*((char *)&key + (e ^ p & 3)) ^ z));
        }
        z = v[n-1];
        y = v[0] -= ((z >> 6 ^ y*4) + (y >> 3 ^ z*16)) ^ ((sum ^ y) + (*((char *)&key + (e ^ p & 3)) ^ z));
        sum -= 0x74746561;
    } while (--rounds);
}

int main() {
    char en[] = {3, 35, 34, 47, 54, 136, 253, 67, 33, 232, 91, 101, 49, 30, 59, 166, 75, 184, 220, 136, 128, 25, 132, 111, 151, 114, 33, 38, 173, 100, 238, 187, 136, 4, 77, 6, 47, 38, 229, 107, 129, 75, 245, 115};
    decrypt((int *)en, 44 >> 2, 0x74746561);
    for(int i = 0; i < 44; i++) {
        printf("%c", en[i]);
    }
    return 0;
}

🌙参考文章

https://www.showdoc.com.cn/zepor/9572993373408272

🌙附件

附件: https://cowtransfer.com/s/e43e6eb08c224d exp: https://cowtransfer.com/s/d47f602534f94a

页面列表

ITEM_HTML