selph
selph
发布于 2024-05-19 / 292 阅读
0
1

[HTB] gamepwn - CubeMadness1~2

CubeMadness1:直接修改内存

imagedw

目标是获取20个cubes,但是场地总共就6个,所以就是CE改数值即可

image

搜到三个值,直接改成20,出现flag:

image

HTB{CU83_M4DN355_UNM4DD3N3D}

CubeMadness2:修改加密内存

目标应该和1是一样的:

image

接下来用一样的办法尝试:

image

可以搜到地址,但是修改完之后数值没有变化

查看“是谁修改了这个值”,找到一个地址,附近的指令如下:

image

这里的断点会不断的触发,比较rbx+24和edx是否相同,不相同就修改,为edx的值

这里的rbx+24应该是收集到的cube的值

edx的值从加密的内存里取出来然后解密得到

由于这个循环是不断进行的,所以只有修改了加密了的内存的值,才能真正修改到cubes的值

解密流程就这么长点,直接C语言还原即可:

#include <cstdint>
#include <intrin.h>
#include <stdio.h>

int decode(int val)
{
    uint64_t tmp = _shlx_u32(val, 9);
    int key = 0x6208cecb;
    tmp = tmp << 32;
    tmp /= key;
    return tmp;
  
}

int main() {
    int val = 0x248f;
    int key = 0x6208cecb;
    int result_hi;
    int result_lo;
    _mul_full_overflow_i32(val, key, &result_lo, &result_hi);
    printf("%x %x\n", result_hi, result_lo);
    int res = _sarx_i32(result_hi, 9);
    printf("%x\n", res);
    int inp = decode(19);
    printf("inp: %x", inp);
    return 0;
}

运行得到:

e00 f65
7
inp: 633a

接下来手动修改加密的内存的值为0x633a,即可:

image


评论