re學習筆記(33)HGAME2020-re-Level-Week2- unpack

HGAME2020-re-Level-Week2- unpack
新手一枚,如有錯誤(不足)請指正,謝謝!!

個人博客:點擊進入
參考資料:從正在運行的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}

發佈了50 篇原創文章 · 獲贊 7 · 訪問量 3531
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章