HGAME2020-re-Level-Week2- unpack
新手一枚,如有错误(不足)请指正,谢谢!!
<mark>个人博客:点击进入</mark>
参考资料:从正在运行的Linux进程中dump出内存内容
题目描述
描述
看起来是upx呢,但是怎么办呢?题目地址 http://q4f83ppqy.bkt.clouddn.com/unpack_00b2bb661b
• 完成人数 : 41
• 分数: 150
分析题目
elf文件,用IDA手动脱壳未成功,使用gdb来dump文件的内存
先运行程序
再打开另一个终端,先查看进程的PID
命令:ps -elf | grep unpack
然后cat一下它的内存段
命令:cat /proc/PID/maps
之后用gdb载入进程(使用管理员权限)
命令:gdb attach PID
再用gdb将程序内存dump出来
命令:dump memory /路径/文件名.dump 0x内存地址始 0x内存地址终
然后拖到IDA进行分析
发现只进行了个字符串比较,双击进去查看内存存放数据,发现全为0,没有被dump出来
所以我们用gdb查看一下这个内存地址存放的东西
格式: x /nfu
说明
x 是 examine 的缩写
n表示要显示的内存单元的个数
——
f表示显示方式, 可取如下值
x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a 按十六进制格式显示变量。
i 指令地址格式
c 按字符格式显示变量。
f 按浮点数格式显示变量。
——
u表示一个地址单元的长度
b表示单字节,
h表示双字节,
w表示四字节,
g表示八字节
写出脚本,计算出flag
#include <stdio.h>
#include <string.h>
int main()
{
char flag[] = { 0x68,0x68,0x63,0x70,0x69,0x80,0x5b,0x75,0x78,0x49,0x6d,0x76,0x75,0x7b,0x75,0x6e,0x41,0x84,0x71,0x65,0x44,0x82,0x4a,0x85,0x8c,0x82,0x7d,0x7a,0x82,0x4d,0x90,0x7e,0x92,0x54,0x98,0x88,0x96,0x98,0x57,0x95,0x8f,0xa6,0x00,0x00,0x00,0x00,0x00,0x00
};
for (int i = 0; i < 42; i++)
printf("%c", flag[i]-i);
}
flag为hgame{Unp@cking_1s_R0m4ntic_f0r_r3vers1ng}