崇拜,是距離理解最远的感情。

-蓝染

《程序员的自我修养》 ELF可以生成一种特殊的代码——与位置无关的代码(position-independent code,PIC)。用户对gcc使用-fPIC指示GNU编译系统生成PIC代码。它是实现共享库或共享可执行代码的基础.这种代码的特殊性在于它可以加载到内存地址空间的任何地址执行.这也是加载器可以很方便的在进程中动态链接共享库。 PIC的实现运用了一个事实,就是代码段中任何指令和数据段中的任何变量之间的距离都是一个与代码

Read More...


明天就要出实习了。嗯,加油~ 虽然不知道自己去做啥,到底会不会。但我会加油的 fighting

Read More...


cctfpwn3-2016

2016CCTFpwn332位程序。开启nx保护。首先程序需要我们输入用户名~ 上 ida 找找~有2个比较关键的函数。跟进去分析 ask_username ()输入在 src 中,只能接收40个字节。 for ( i = 0; i <= 39 && src[i]; ++i ) ++src[i];for 循环,当 src 不为空的时候,把 src 内容自增 1最后复制到 dest 中 ask_passwor

Read More...


1、CANARY : 栈保护 ,当启用栈保护后,函数开始执行的时候会先往栈里插入cookie信息,当函数真正返回的时候会验证cookie信息是否合法,如果不合法就停止程序运行。攻击者在覆盖返回地址的时候往往也会将cookie信息给覆盖掉,导致栈保护检查失败而阻止shellcode的执行。在Linux中我们将cookie信息称为canary。 2、FORTIFY : gcc的新的为了增强保护的一种机制,防止缓冲区溢出攻击。(程

Read More...


ssctf250-2

ssctf-2017 . mprotectint mprotect(const void *start, size_t len, int prot);mprotect()函数把自start开始的、长度为len的内存区的保护属性修改为prot指定的值。思路: 将shellcode写进一段具有可写权限的段里,然后用mprotect将对应的段修改为可执行,再跳到布置好的shellcode里。 先给 mprotect 找一段可写的内存位置~~~

Read More...


2017ssctf-250

2017-pwn25032位,静态链接的文件 . mmapvoid mmap(void start,size_t length,int prot,int flags,int fd,off_t offset);mmap()函数把指定或随机分配的地址内存,以prot权限映射到自start开始的,长度为length,而且为PAGE_SIZE单位的地址。http://www.cnblogs.com/huxiao-tee/p/4660352.ht

Read More...


动态调试

要安装插件ideasmali,还要在Manifest 中把 android:debuggable=”true” 这里要是true首先,用android killer 反编译下这个Apk.开启bluestacks运行Cmd ,查看有没有识别到bluestacks输入 : adb devices 然后打开android studio,导入android killer刚刚反编译出的代码。 选中所在目录 点OK,后面的保持默认选项,直接

Read More...


破解练手用的,发出来和大家分享一下自己的心路历程。 我这个版本是3.3.0.3的(比较旧的版本)。首先,这个版本的有签名验证。怎么发现的,就是直接 IDE改之理 反编译,然后什么都不改,生成APK,安装游戏,打开游戏后,游戏闪退。至于为什么是本地验证,断网,打开这个游戏,依然闪退,猜测是本地验证。下面开始找验证的地方。由于游戏进入的一瞬间就闪退了,那么从入口位置开始找。在 AndroidManifest.xml文件中,找到下面这个 :c

Read More...


level2

level2一个32位elf ,开启了nx 。 程序行为与前面的几个题一样。上 ida 看·~~ 依然是在 main 函数中调用了一个 vulnerable_function 函数。 溢出点依然是 read 函数。同样,可以控制返回地址,payload 如下, BBBB 是用来覆盖 ebp ,32位中4字节一个地址payload = “A”*0x88 + “BBBB” + p32( return_addr ) 字符串中有 /bin/s

Read More...


level2-x64

level2_x6464位文件,开启了 nx 保护。 进ida 看 这个程序实际上就是 level2 的64位版 所以呢,溢出点都是一样的。read 函数,可控的返回地址。 binsh_addr = 0x0000000000600A90 system_addr = 0x00000000004004C0 那么,咱们的Payload 是否可以像 level2 32位那样构造呢?( 64位的地址是8个字节,覆盖rbp用8个B 即可)32位:p

Read More...


听断弦,断那三千痴缠。坠花湮,湮没一朝风涟。花若怜,落在谁的指尖?