1. http://bbs.pediy.com/showthread.php?p=1424746
    http://www.ibm.com/developerworks/cn/linux/l-qemu/
  2.  
  3.  
  4. 线总结下搜集来的资料吧:
  5. http://www.xfocus.net/articles/200406/711.html 文章很老,但是依旧价值不菲!感谢前辈留下如此NB的文章。
  6. 指令集部分百度就可以了!
  7. powerpc的东西很难找到相对应的环境,如果想做只能通过qemu 的方式安装debian
  8. 当然也有分享好的img
  9. https://people.debian.org/~aurel32/qemu/powerpc/
  10. 上面可以下载已经安装好的虚拟机 可以通过qemu直接执行
  11. 只是里面工具不全需要下载相应的应用
  12. apt-get install vim
  13. apt-get install gcc
  14. atp-get install gdb
  15. ...
  16. 当然包括其他你想要的的工具
  17. 这里提供个小的框架
  18. char shellcode[] = {}
  19.  
  20. int main(int argc, char **argv)
  21.  
  22. {
  23.  
  24. int (*f)();
  25.  
  26. f = (int (*)())&shellcode;
  27.  
  28. (int)(*f)();
  29.  
  30. }
  31. 想要分析的shellcode 当做字符串放在 shellcode数组里。
  32.  
  33. 如果只是静态分析 gcc不用加其他参数 如果是动态调试 就需要在编译的时候加上gcc -g -fno-stack-protector 参数来去除栈保护。
  34.  
  35. 然后基于ida 导入 跳入shellcode IDA c 强制转换成指令代码,如果准备工作没问题而且你导入的的确是shellcode,那么东西就出来了。
  36.  
  37. ------------------------------------------以上是准备工作--------------------------------------------------------
  38. 首先我们来熟悉powerpc的指令集:
  39. PowerPC体系结构是RISC(精简指令集计算),定义了 多条指令。PowerPC 之所以是 RISC,原因在于大部分指令在一个单一的周期内执行,而且是定长的32位指令,通常只执行一个单一的操作(比如将内存加载到寄存器,或者将寄存器数据存储到内存)。差不多有12种指令格式,表现为5类主要的指令:
  40.  
  41. 、分支(branch)指令
  42. 、定点(fixed-point)指令
  43. 、浮点(floating-point)指令
  44. 、装载和存储指令
  45. 、处理器控制指令
  46.  
  47. PowerPC的应用级寄存器分为三类:通用寄存器(general-purpose registerGPR)、浮点寄存器(floating-point register [FPR] 和浮点状态与控制寄存器 [Floating-Point Status and Control RegisterFPSCR])和专用寄存器(special-purpose registerSPR)。gdb里的info registers能看到38个寄存器,下面主要介绍这几个常用的寄存器:
  48.  
  49. 通用寄存器的用途:
  50.  
  51. r0 在函数开始(function prologs)时使用。
  52. r1 堆栈指针,相当于ia32架构中的esp寄存器,idapro把这个寄存器反汇编标识为sp
  53. r2 内容表(toc)指针,idapro把这个寄存器反汇编标识为rtoc。系统调用时,它包含系统调用号。
  54. r3 作为第一个参数和返回值。
  55. r4-r10 函数或系统调用开始的参数。
  56. r11 用在指针的调用和当作一些语言的环境指针。
  57. r12 它用在异常处理和glink(动态连接器)代码。
  58. r13 保留作为系统线程ID
  59. r14-r31 作为本地变量,非易失性。
  60.  
  61. 专用寄存器的用途:
  62.  
  63. lr 链接寄存器,它用来存放函数调用结束处的返回地址。
  64. ctr 计数寄存器,它用来当作循环计数器,会随特定转移操作而递减。
  65. xer 定点异常寄存器,存放整数运算操作的进位以及溢出信息。
  66. msr 机器状态寄存器,用来配置微处理器的设定。
  67. cr 条件寄存器,它分成84位字段,cr0-cr7,它反映了某个算法操作的结果并且提供条件分支的机制。
  68. (来自san
  69. AIX PowerPC体系结构及其溢出技术学习笔记

  70. powerpc的指令是四字节一组代表一条功能指令
  71. 忘记提醒一点 导入IDA的时候 指令集一定选择powerpc
  72. 这里面有几个重点的指令
  73. mf*r mt*r
  74. 这两个是分别是将lr(其他的基础期ctr等)保存到相应的基础 ,而且这里我有个技巧来分辨 就是已lr位对象 f代表from t 代表to
  75. mflr r0 就可以理解为 from lr to r0
  76. mtlr r0可以理解为 to lr from r0
  77. 可能选择这东西技巧避免混淆,开始时候确实容易出问题
  78.  
  79. lis %r4, # 0x1DC0
  80. addi %r4, %r4, 0x1DC0 # 0x1DC0
  81. 以上两条指令是对一个基础器高地位分别赋值 这点IDA还不错 可以直接在第二条指令的基础上标出该寄存器当前的值,所以不需要特别的记忆。
  82. 另外两条常用指令是
  83. stwlwz
  84. 比如 stw %r5, 0x20(%sp)
  85. 是将r5 存入sp+0x20所指向的地址。
  86. lwzstw相对应lwz %r5, 0x20(%sp) 是将sp+0x20指向的地址 存入r5.
  87. bl是跳转指令
  88. 这里面shellcode 为了寻找当前的地址会有个巧妙的方法
  89. bl shellcode_start
  90. shellcode_start:
  91. mflr %r3
  92. 这里当bl shellcode_start时候会将下一条地址赋给lr
  93. 也就是说这时候lr指向的mflr %r3这条指令的地址
  94. 通过执行mflr %r3以后相当于r3指向了当前的栈或者堆地址,我们也就精确的找到了shellcode的位置。
  95. 很奇妙的想法。

qemu 的方式安装debian 模拟powerpc的更多相关文章

  1. VMware Player安装Debian系统

    尝试用虚拟机来安装Debian系统,感觉这样一来安装与卸载方便,二来也可以在Linux系统安装出现问题的情况下方便在host主机上查找解决方法,同时也避免了要重新设置分区来安装Linux系统(双系统的 ...

  2. 安装Debian 7.8 过程,以及该系统的配置过程

    最近,我给自己的电脑安装了Debian操作系统,版本7.8 stable.Debian我相信大家都能了解,它是Ubuntu的基础,Ubuntu是基于Debian的unstable开发的.我安装这个系统 ...

  3. 图解安装Debian 9.5全过程

    本文将为你带来安装Debian 9.5 GNU/Linux的教程,安装全过程图文并茂讲解.安装Debian 9.5可以把ISO文件下载下来刻录成DVD安装或者采用虚拟机安装等等方法. 一.下载Debi ...

  4. [转]在ubuntu linux下以编译方式安装LAMP(apache mysql php)环境

    FROM : http://www.cnblogs.com/eleganthqy/archive/2010/02/28/1675217.html 最近转向到了使用ubuntu做桌面,安装好系统以来一直 ...

  5. ubuntu 18.04 通过联网方式安装wine

    ubuntu 18.04 通过联网方式安装wine 1.如果是64位机器,先开启允许32位架构程序运行 sudo dpkg --add-architecture i386 2.添加元wine源码安装仓 ...

  6. 网络启动并安装Debian

    网络启动(PXEBoot)并安装Debian的官方文档在这里,不过官方文档有点冗长,我这里假设已经有一台安装好Debian,需要网络安装另一台(这台可以是虚拟机,通过ISO文件等等方式安装的).PXE ...

  7. VBox虚拟机安装debian

    决定在win7上装一个Linux虚拟机用作Linux开发学习,虽然win7下已经有了Cygwin,还是想在一个比较完整的环境下.前面装过Ubuntu发现界面太笨重了,考虑重新换一个,同时比较喜欢apt ...

  8. 树莓派学习笔记—— 源码方式安装opencv

    0.前言     本文介绍怎样在树莓派中通过编译源码的方式安装opencv,并通过一个简单的样例说明怎样使用opencv.     很多其它内容请參考--[树莓派学习笔记--索引博文] 1.下载若干依 ...

  9. Win7上从硬盘安装Debian

    近期一直想将笔记本搞成Win7+Debian双系统.由于无论怎样优化,2G内存的Win7笔记本上开个Linux虚拟机都实在吃力. 经过一段时间的资料搜索.并阅读Debian官方的安装文档,今天最终实现 ...

随机推荐

  1. HTML5之本地文件系统API - File System API

    HTML5之本地文件系统API - File System API 新的HTML5标准给我们带来了大量的新特性和惊喜,例如,画图的画布Canvas,多媒体的audio和video等等.除了上面我们提到 ...

  2. 一个奇怪的编码 big5-hkscs

    # --*-- coding:utf-8 --*-- import urllib2 import urllib postDict = { 'IsExist_Slt_Part_Id': 'False', ...

  3. 50个实用的jQuery代码段让你成为更好的Web前端工程师

    本文会给你们展示50个jquery代码片段,这些代码能够给你的javascript项目提供帮助.其中的一些代码段是从jQuery1.4.2才开始支持的做法,另一些则是真正有用的函数或方法,他们能够帮助 ...

  4. ECMall关于数据查询缓存的问题

    刚接触Ecmall的二次开发不久,接到一个任务.很常见的任务,主要是对数据库进行一些操作,其中查询的方法我写成这样: 01 function get_order_data($goods_id) 02 ...

  5. [ecmall]Ecmall 后台添加模板编辑区

    例如,想把品牌/index.php?app=brand页面做成可编辑的. 首先,找到后台admin\includes\menu.inc.php第61行 'template' => array( ...

  6. nginx日志配置

    nginx日志配置 http://www.ttlsa.com/linux/the-nginx-log-configuration/ 日志对于统计排错来说非常有利的.本文总结了nginx日志相关的配置如 ...

  7. JS 日期操作类

    /* 日期对象格式化为指定日期格式 */Date.prototype.format = function (format) { var o = { "M+": this.getMo ...

  8. 比较详细的利用虚拟机对SD卡FAT32+EXT4+Ext4分区图解教程

    如果大家嫌虚拟机复杂,我这里提供一个我没用虚拟机之前的分区方法:这个方法实际是可行的 我在没有用虚拟机之前,我是这样操作的1.首先在分区软件分好fat32+ext2+ext22.然后用recovery ...

  9. (转载)php获取form表单中name相同的表单项

    (转载)http://hi.baidu.com/ruhyxowwzhbqszq/item/5fd9c8b9b594db47ba0e12a9 比如下面的表单: /*form.php*/ <form ...

  10. 搜索(DLX重复覆盖模板):HDU 2295 Radar

    Radar Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...