第一次正确逆向

小记一下第一次成功的逆向,eshard培训作业ARE-4中获取key程序的序列号。

练习目标是通过使用panda-re工具(QEMU的套件),通过查找QEMU中寄存器状态,获得输入字符匹配时,PC指针的值,顺着找到代码中的程序行,接着找到程序验证序列号的代码,逆向后破解。

具体过程:

0x00 下载编译panda-re

根据官方repo可以在Ubuntu 16.04上轻松的编译成功。不......

linker的奥秘

逆向做linker的注入,非常有意思。

linker是在程序运行的时候,在OS层面上链接程序所需动态库的程序,C程序通常由GLIBC在/usr/lib或/lib下的ld.so担当。一个通常的,基于Linux x64架构的程序,file abc的信息会是

abc: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamica......

printf打印格式的谜题

在做逆向作业的时候遇到一个问题:把从内存读回的数据用

char a[1000]

LOOP

printf("%x",a);

的方式输出到屏幕,再转储成二进制的话,总会出现数据丢失的情况。由于输出文件是一个MP3文件,一旦有数据丢失就意味着文件结构破坏,无法解析。

后来发现使用

LOOP

printf("%c",a);

的方式打印,直接......

缓冲区溢出笔记(二)

尝试复现Bypassing ASLR – Part I中的实验,在Kali x64和Ubuntu 16.04.2 x64上均失败,在nebula live CD(Ubuntu 11.10 x86)上完全成功(连偏移地址都完全一致,代码直接复制使用)。作者使用的是Ubuntu 12.04 x86环境,因此符合预期。

脆弱代码:

#include <stdio.h>

#includ......

跨网段的谜题

路由上俩虚拟网段:

192.168.3.0/24,网关192.168.3.1

192.168.10.0/24,网关192.168.10.1

两个网段互通,因此机器之间可以相互ping通。

然而在192.168.3.76的机器上以桥接方式假设的虚拟机(192.168.3.57),却无法被192.168.10.11的机器ping通。反之,192.168.3.57也无法ping通任何在192.1......

缓冲区溢出笔记(一)

缓冲区溢出的基础前提,在于可以通过控制strcpy()或strcat()甚至printf(),来覆盖堆栈里的返回地址。之前的实验里,其实只实现了最简单的溢出方式,即跳转的地址在当前程序栈(text segment)内,也就是只能执行程序内存在的功能,攻击的效果有限。更普遍的堆栈溢出攻击,应该是能够任意代码执行,也就意味着能够调用自定的攻击函数。

严格说来,溢出跳转应包含几个层次:

跳转目标......

一个控件导致VS工程无法运行的笔记

昨天遇到了奇怪问题: 在Win 7 + VS 2015下编译通过,并且debug和release均可独立运行的工程,在Win 10甚至其他的Win 7上却不停的闪退,连最初的启动画面都看不到。如果使用VS的工程文件进行源码调试,编译正常通过,但在绘制第一个启动画面的时候程序就崩溃,报错:

Debug Assertion Failed!

Program: C:\Windows\system32......

堆栈溢出初体验

环境配置

Kali Linux 4.8.0 (基于Debian 4.8.5),64位

GCC 6.3.0 20170425

GDB 7.11.1

GDBGUI 网页前端 用于逃离gdb可怕的键盘操作

准备工作

源码

#include <stdio.h>

#include <string.h>

int hijack() //待注入的函数

{

print......

'