• 吾爱破解 培训第八、九课:短兵相接深入浅出探讨脱壳细节 笔记


    吾爱破解 培训第八、九课:短兵相接--深入浅出探讨脱壳细节 笔记

    《吾爱破解培训第八课:短兵相接--深入浅出探讨脱壳细节(上)》 讲师:L4Nce

    《吾爱破解培训第九课:短兵相接--深入浅出探讨脱壳细节(下)》 讲师:L4Nce

    课件内容

    1. PE文件结构

    2. 汇编指令

    3. OD脚本编写

    4. 基本脱壳步骤

      调试器(反调试)
      被脱壳的文件
      OEP(偷OEP,藏OEP)
      dump(.bss)
      修复iat()

    5. 脱壳,一套原因就行了

      找真实的地址、真的找不到了,回归基础

    6. iat识别不了

      修复这种壳,我们人工的把真实代码找出来,搬移到本身的位置《=vm,乱序,花指令啊。

    7. 一个程序加载
      |
      内存里
      |
      程序的导入表--》告诉系统我需要这些函数
      |(申请内存,读取文件,对话框)
      函数的地址,填充到程序的内存里(iat)导入地址表


    8. 程序的导入表,是静态可见的,包含了导入的dll名字,和他的导入函数

      壳会在加壳的时候,把导入表这个结构给拿出来
      然后自己加密,或者改变结构

      壳改了以后,系统就找不到导入表了,也就无法给我们的程序填充所需要的函数地址。

      加过壳的程序一定可以运行的。

      所以很明,这个填充过程被取代了,这个过程被在壳段完成。

      脱壳的时候直接dump,软件导入表是不在的,iat所填充的函数地址是当前系统的地址,所以这个程序可能只能在脱壳的机器运行,换台机器就失败了。

      解决这个问题,导入表,
      IMREC
      IAT的地址值=》生成一份导入表,然后让程序使用新的导入表,那么程序就可以跨系统,在各个机器上用。

    IAT若被加密壳切割,会造成导入表无法修复。

    本来函数调用是这样的 call api
    一些强壳会把这个代码改成 call packspace
    packspace:
    junkcode
    一些无效操作
    vm
    jmp api
    导致工具无法修复导入表。

    
    9. OD脚本的编写
    
    OD脚本是基于汇编语言的
    
    tab: 在脚本窗口中进行单步
    
    空格:脚本窗口按空格,相当于直接运行脚本
    
    脚本的指令
    
    

    sti ->f7
    sto ->f8
    bp ->f2 下断点 一个参数就是地址
    bp 00401000 ->00401000下断点相当于我们的f2
    run ->f9 把程序跑起来

    Demo
    bp 00457765
    run ;相当于OD里按F9
    sti ;这个就到OEP了
    MSG "OEP到了" ; 这个输出一个对话框
    ret

    
    
    
    10. 一个运用栈平衡找oep的手段
    
     首先要执行一条压栈指令,来改变栈,然后等以后再次读入这个栈内容的时候,就说明有栈平衡的迹象,那么就很有可能是一个栈恢复。
     一般来说压缩壳只有有一次恢复,然后就到oep了,所以利用这个特性我们来找oep。
    
    11. 到oep了就要开始修复iat
    
     找iat方法:(除了一些特别变态的加密壳什么TMD,SE,VMP这种)
    
     ​	     ZP,TEP
    
     ​		call [dword]
     ​		jmp [dword]
    
     ​		ff15
     ​		ff25
    
     EP结构熟悉的,
    
     ​	00432000  00960306 这个是iat的起始
    
     ​	00432550  009604AA 这个是iat的截至
    
     
    
     009606D8    68 5ACAD277     push user32.PostQuitMessage
     009606DD    C3              retn
    
     push user32.PostQuitMessage
     retn
     ||
     jmp PostQuitMessage
    
     **很明显**:把原来调用改成自己的地址,然后在自己的代码里,跳到真实api地址
    
    
     在指令二进制,直接带有地址push
    
     还有是更具当前的eip然后加上指令中的偏移,算出来地址 jmp
    
    12. esp定律.txt  -->> upx的大表哥
    
     ```
     mov iat_b,00432000
     mov iat_e,00432554  
     ;iat_b=00432000
     
     sti	;pushad
     bphws esp,"r" ;hr esp
     run
     sti
     sti
     sti	;到了jnz
     bp eip	;为了解决这个循环,做了一个循环判断,在这个跳转指令处下一个断点也就指脚本中的bp eip,然后每次断下后,判断循环条件是不是成立;如果成立,说明循环已经结束了,可以进行单步到oep了
     @LOOP:
     run
     cmp esp,eax
     jnz @LOOP
     sti
     sti
     sti
     
     MSG "到OEP了"
     
     @IAT_LOOP:
     mov iat,[iat_b]
     cmp iat,0
     je  @NEXT_LOOP
     
     mov api,[iat+1]
     mov [iat_b],api	;重建iat
     
     @NEXT_LOOP:
     add iat_b,4
     cmp iat_b,iat_e
     jne @IAT_LOOP
     
     
     MSG "OK IAT 修复已经完成 fuck kido"
     ret
     
     
     
     ;mov iat,[iat_b]	;意思呢就是把00432000内存里面值拿出来,而不是拿出来00432000
     ;mov iat,iat_b  ;iat_b = 00432000
     ;iat = 00432000
     ;mov iat,[iat_b] ;iat = 00960306
     
     ;0045775E    39C4            cmp esp,eax
     ;00457760  ^ 75 FA           jnz short upx的大?0045775C
     
     ;UPX的壳段代码是差不多的,那么这个脚本就可以用来找这个upx版本所有加壳程序的OEP,而且不用管ASLR的问题
     
     ;00432554  00000000
     
     
     ```
    
     脚本详见第九课视频。
    
    
    
    
    
    
    ## 课后问题总结答疑
    
    
    
    
    ## 课件工具
    
    吾爱破解专用版Ollydbg:http://www.52pojie.cn/thread-350397-1-1.html
    论坛专用破解虚拟机:http://www.52pojie.cn/thread-341238-1-1.html
    其他工具见爱盘:http://down.52pojie.cn/Tools/
    
    ## 课件资源
    
    > **360云盘下载:**
    > https://yunpan.360.cn/surl_y3GCKpiI2fX 提取码:7693
    > **百度网盘下载:**
    > 链接: https://pan.baidu.com/s/1z9WQeYgUGxcurVD2lKfNeg提取码: e2su
    
    > **爱盘下载:**
    > http://down.52pojie.cn/吾爱破解视频教程/吾爱破解论坛官方入门教学培训第一期/
    
    > **解压密码:**
    > [www.52pojie.cn](http://www.52pojie.cn/www.52pojie.cn)

    本文来自博客园,作者:Theseus‘Ship,转载请注明原文链接:https://www.cnblogs.com/yongchao/p/15754858.html

  • 相关阅读:
    python中list常用的方法
    python登陆代码简单逻辑
    学习Python前言
    Python远程连接Redis
    virtualbox虚拟机之连接本地主机同时可以连接外部网络
    Redis统计访问量方法
    Linux:less and Aix:more
    python之class Meta用法
    pycharm之ctrl+鼠标滚轮调整字体大小
    python之cookie与session
  • 原文地址:https://www.cnblogs.com/yongchao/p/15754858.html
Copyright © 2020-2023  润新知