Updates from 八月, 2016 Toggle Comment Threads | 键盘快捷键

  • jinzihao pm6:33 on 2016年8月29日 链接地址 | 回复
    Tags: ,   

    C语言判断奇偶性:i&1和i%2 

    三个月前的一篇文章中,曾经好奇为什么C语言中同样是判断整数奇偶性,在不开编译优化(gcc -O0)的情况下,

    (1) bool isOdd = i & 1;

    (2) bool isOdd = i % 2;

    略快(但并没有快很多)。

    看过反汇编得到的汇编代码,发现即便没有开编译优化选项,编译器对于(2)也没有使用除法指令idiv,从而避免了(2)比(1)慢得多的情况。编译器由(2)编译出的汇编代码的作用,是保存一个临时变量t,如果需要判断奇偶性的数i是正数,则t取0,否则t取1;“i是否为奇数”则可以表示为((i + t) & 1) – t,这样就会比i & 1稍慢(但不会慢很多)。

    实际上(1)对于i为负数的情况会得到错误的结果,因此(2)的一点点额外的时间开销是完全有必要的;如果将上一篇文章main函数里面的int全部改为unsigned int,即使在指定gcc -O0的情况下,编译器也会对(1)和(2)编译出完全相同的汇编代码,即(2)也会被优化为i & 1。

     

     
    • 陈文 下午3:25 on 2016年9月9日 链接地址 | 回复

      你的网站用teleport下载文件只有60k/s,很多文件下载半天也下载不下来

    • 陈文 下午3:26 on 2016年9月9日 链接地址 | 回复

      另外问一下,这个网页http://netmite.com/android/srv/2.0/getapk.php的小玩意怎么放在我的网站上运行

  • jinzihao pm2:28 on 2016年8月20日 链接地址 | 回复
    Tags:   

    缓冲区溢出漏洞的利用 

    注:这篇文章本来是一门课程的(大)作业,由于课程报告题目自选,本文其实就是对CTF中几个很基础的二进制的题写了比较详细的write-up,也算记录了一下自己从零基础开始学习的过程吧。

    0. 写在前面

    操作系统这门课程对系统如何管理内存做了详细的介绍,这是计算机安全的一个重要分支——内存安全的背景知识。我对计算机安全比较感兴趣,而内存安全也是其中绕不开的一个领域。在计算机安全中,内存安全相比起Web安全等领域门槛较高,需要站在操作系统的视角看内存,才能发现潜在的内存漏洞。这学期选了操作系统这门课,也希望能起到“扫盲”的作用,借此机会入门一下内存安全。这篇课程报告主要关注内存安全问题中最常规的缓冲区溢出漏洞,总结了缓冲区溢出漏洞的一些入门知识,也算是一个初学者的一点学习笔记。

    1. 什么是缓冲区溢出漏洞

    这是一个很难一言以蔽之的概念,维基百科的描述如下:

    缓冲区溢出(buffer overflow),是针对程序设计缺陷,向程序输入缓冲区写入使之溢出的内容(通常是超过缓冲区能保存的最大数据量的数据),从而破坏程序运行、并获取程序乃至系统的控制权。[1]

    而缓冲区溢出漏洞的利用,则是通过精心构造的输入数据,向内存的特定位置写入特定信息,进而使程序运行发生异常。注意,这里的异常是对于程序开发者而言的,对于攻击者而言则是预期结果。

    利用缓冲区溢出漏洞的一般流程如下:

    (1) 使用反编译工具(如IDA)对程序进行反编译

    (2) 分析反编译得到的C语言代码和汇编代码,设计攻击方法

    (3) 按照设计好的攻击方法设计输入数据

    (4) 把设计好的输入数据传入到程序中,获得系统权限

    下面结合几个实例,对缓冲区溢出漏洞做些简要介绍。

    2. 实例1——基本思路

    (本题出自Bluelotus-Exercise题集中的shellcode题目[2])

    使用IDA反编译得到:

    全局变量:

    main函数:

    这段程序的功能是,从stdin(控制台输入)读入1023个字节,存入shellcode变量,然后通过强制类型转换把shellcode变量作为一个无参数、返回int的函数,调用shellcode变量。由于程序指令本质上也是数据,因此只要将合适的数据写入到shellcode变量,便可以使这段程序执行这段数据对应的程序指令。

    shellcode本质上是一段机器码,直接编写难度很大。可以先按照需求编写C语言程序,然后编译,将编译得到的二进制文件用十六进制编辑器打开,便可以得到这段C语言程序对应的机器码。另外,网络上也有很多现成的shellcode,例如本题中可使用这样一段来自EggRun主页的shellcode [3]:

    6a 0b 58 99 52 68 6e 2f 73 68 68 2f 2f 62 69 89 e3 52 53 89 e1 cd 80

    这段用16进制数表示的机器码对应的C语言程序为execve(/bin/sh),在包括Linux在内的类Unix系统中可以启动一个shell,从而可以执行任意命令。

    另外,shell-storm也提供了大量shellcode,可以根据不同的运行环境和预期效果选择不同的shellcode。[4]

    (阅读全文 …)

     
    • 陈文 上午11:04 on 2016年8月21日 链接地址 | 回复

      网站挂了

      • jinzihao 下午5:59 on 2016年8月21日 链接地址 | 回复

        嗯,我也发现了,服务器现在没法访问,明天中午应该可以恢复~

        • 陈文 上午10:16 on 2016年8月23日 链接地址 | 回复

          额,貌似还没我的预览页靠谱(这还是免费服务器)http://mini536.3vkj.net/

        • 陈文 下午2:46 on 2016年8月23日 链接地址 | 回复

          你最近能不能把你的站点文件打包发到我邮箱里,我申请了个更大的空间(10G),带宽也大些,这是我临时做的主页,你可以体会到的https://mini536.lima-city.de/

          • jinzihao 下午11:39 on 2016年8月23日 链接地址 | 回复

            文件过大,没法发邮件,请提高一下你的镜像工具的最大下载文件大小,直接用镜像工具下载更方便一些

            • 陈文 下午10:23 on 2016年9月1日 链接地址

              你的网站用teleport下载文件只有60k/s,很多文件下载半天也下载不下来

          • jinzihao 下午11:54 on 2016年8月23日 链接地址 | 回复

            另外也得说一句,当初刚开始建这个站的时候也是辗转于各种免费空间,但很遗憾没有一个靠得住的。因为这种站特别消耗带宽,也很占硬盘空间,对于主机商绝对是赔本生意,每次过不了多久主机商就会找点麻烦。

    • 陈文 下午3:24 on 2016年9月9日 链接地址 | 回复

      你的网站用teleport下载文件只有60k/s,很多文件下载半天也下载不下来

  • jinzihao pm10:34 on 2016年8月15日 链接地址 | 回复
    Tags:   

    Ubuntu on Windows (Bash on Windows) 初体验 

    如何安装?

    1. 在开始菜单搜索“针对开发人员”:
    bash6

    (阅读全文 …)

     
c
写新的
j
下一篇文章/下一个回复
k
前一篇文章/以前的回复
r
回复
e
编辑
o
显示/隐藏 回复
t
回到顶部
l
go to login
h
show/hide help
shift + esc
取消