zoukankan      html  css  js  c++  java
  • 脱upx壳--初试--单步追踪

    这里的练习题目是reversing.krEasy Crack

    我自己用upx加壳工具给它加了个壳,由于原文件逻辑简单,所以用它来练练手

    之后用到的工具是IDA和Ollydbg


    0x00 在正式调试之前需要知道的一些操作

    1.单步追踪法向下调试一般用的是F8(单步步过)

    2.遇到红色的向上箭头说明运行到此处之后会向上跳转,对于单步跟踪法来说是不能让它发生的,所以点击下一行,F4运行到该处。

    1

    3.遇到灰色箭头:灰色说明它没有起作用,直接F8就行,并不会向上跳转

    2

    4.如果看到popad指令,说明在下面不远处会有一个大跳转(跳到另一个区段) ,即程序即将运行到OEP (真正的程序入口点)。

    5.在快到popad的时候可能程序会跑飞,如下图的第一个箭头所指

    0040BAC0    FF96 A8B00000   call dword ptr ds:[esi+0xB0A8] 
    

    那么我们可以直接F4到0x400AC63

    0x01 脱壳

    *有了上述的了解之后,经过耐心的调试,程序来到了OEP。

    4

    注意看,jump的目标地址0x401188, 而当前程序所处的地址是0x40BB03, 跨度如此之大,说明我们离成功不远。

    *F8单步运行,到了最后一步。

    6

    *在0x401188处右键 -> 用Ollydump脱壳调试进程,点脱壳。

    7

    小trick:alt+m可以看内存映像(memory map),如下图

    5

    可以看到0x401188 属于UPX0区段,而0x40BB03 属于UPX1,验证了上面的说法。


    0x02 验证

    用IDA32位打开。

    第一张是未脱壳的结果。

    9

    第二张是脱壳之后的结果。

    8

    可以看到脱壳之后flag很容易就可以看到是Ea5yR3versing, 但很迷的是用file命令或者是DIE工具扫出来还是有upx壳==


    作者: LB919

    出处:http://www.cnblogs.com/L1B0/

    如有转载,荣幸之至!请随手标明出处;

  • 相关阅读:
    web项目的集成测试:模拟点击
    ignite通过注解配置查询
    log4j打印出线程号和方法名
    函数
    C语言函数的概念
    C语言字符串的输入输出
    C语言字符串处理函数
    C语言字符数组和字符串
    说说M451例程之PWM的寄存器讲解
    如何给地址赋值?(转)
  • 原文地址:https://www.cnblogs.com/L1B0/p/8798711.html
Copyright © 2011-2022 走看看