有没有一种方法可以使用gdb运行/调试?这是一个挑战,所以我将需要运行程序集,对其进行调试或进行静态分析,以了解发生了什么!任何帮助将不胜感激。
反汇编的代码看起来像这样(不共享全部内容,仅前两行):
.data:00000000 77 90 ja 0xffffff92
.data:00000002 97 xchg edi,eax
#1 楼
编写一个程序,将二进制数据加载到内存中,并随着执行跳转到该区域。如果您假设一切正确,它将被执行(没有问题),并且您将能够进行调试。真的很天真的加载器可能看起来像这样(没有错误检查):
#include <stdio.h>
#include <sys/mman.h>
int main() {
FILE *fp = fopen("data", "rb");
fseek(fp, 0, SEEK_END);
int size = ftell(fp); //size of you data
rewind(fp);
void *data = mmap(NULL, size, PROT_EXEC | PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0);
fread((void*)data, 1, size, fp);
typedef void (*exec_func)(void);
((exec_func)data)();
fclose(fp);
return 0;
}
如果您的数据是
十六进制转储数据
0000000 9090 0090
0000003
它将执行3次
nop
并崩溃。评论
感谢您的指导,现在我将找出下一步。
– Gremlin0x00
18年2月16日在22:57
#2 楼
尝试使用radare2(radare.org)。它了解各种可以分解的可执行文件格式。可执行文件包含标头,用于控制操作系统将代码加载到内存中以及在何处开始执行。因此,从文件的第一个字节开始并不是程序本身。 Radee2加载可执行文件并解释标头并加载实际代码以将其反汇编。调试代码等...radare2 my_program.exe
评论
您能再分享几行吗?尽管前两个指令作为shellcode的开头并没有多大意义,但可以将77 90(十进制)转换为0x4d 0x5a(十六进制),这是PE文件的著名“ MZ”(ASCII)标头。 />