码迷,mamicode.com
首页 > 其他好文 > 详细

20155301PC平台逆向破解

时间:2018-03-11 14:23:51      阅读:158      评论:0      收藏:0      [点我收藏+]

标签:short   一个   16进制   转移指令   test   div   inf   jmp   二进制文件   

20155301PC平台逆向破解

1.掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码

NOP:NOP指令即“空指令”。执行到NOP指令时,CPU什么也不做,仅仅当做一个指令执行过去并继续执行NOP后面的一条指令。(机器码:90)

JNE:条件转移指令,如果不相等则跳转。(机器码:75)

JE:条件转移指令,如果相等则跳转。(机器码:74)

JMP:无条件转移指令。段内直接短转Jmp

short(机器码:EB)段内直接近转移Jmp

near(机器码:E9)段内间接转移Jmp

word(机器码:FF)段间直接(远)转移Jmp

far(机器码:EA)

CMP:比较指令,功能相当于减法指令,只是对操作数之间运算比较,不保存结果。cmp指令执行后,将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果。

2.掌握objdump命令、vi基本命令、查看寄存器的命令

1.objdump -d test:反汇编test

2.info r:查看寄存器

3.:%!xxd:查看二进制文件

实验过程

1.利用

objdump -d + 文件名

将可执行程序进行反汇编,变成机器指令
技术分享图片

2.利用vi编辑器打开文件,并用:%!xxd将文件以16进制的形式打开
技术分享图片

技术分享图片

3.我们如果想要用到shell功能,就要使main函数不调用foo函数,而是调用getshell函数,这一点我们可以通过直接修改机器指令做到。

4.找到与调用foo函数有关的机器指令,由图可得,call 8048491是汇编指令,即,将调用位于地址8048491处的foo函数;对应机器指令为e8 d7ffffff,所以我们要将机器指令中foo函数的物理地址改为getshell函数的物理地址

5.由汇编指令及其对应的机器指令,我们可得:0xd7ffffff+0x80484ba = 0x8048491
即:call机器码 = 跳转地址 - call指令的下一个eip 所以可以算出调用getshell函数的机器码为e8 c3ffffff,所以我们只要将d7修改为c3即可

6.输入/e8 d7搜索所在位置,找到后按回车,按i进入编辑模式,将d7改为c3,按 esc退出编辑模式,输入:%!xxd -r退出16进制模式,保存退出。
技术分享图片
技术分享图片

7.运行程序
技术分享图片

20155301PC平台逆向破解

标签:short   一个   16进制   转移指令   test   div   inf   jmp   二进制文件   

原文地址:https://www.cnblogs.com/fengxingck/p/8543502.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!