设为首页收藏本站喵玉殿官方微博

 找回密码
 少女注册中
搜索
查看: 6388|回复: 5

[编程算法] 闲着无事写了个CEAA的脚本

[复制链接]
发表于 2011-10-16 16:41:24 | 显示全部楼层 |阅读模式
本帖最后由 十二 于 2011-10-22 11:39 编辑

好长时间没来了  
  1. //by:nt_12
  2. alloc(newmem,9966000)
  3. label(returnhere)
  4. label(SEH)
  5. label(originalcode)
  6. label(xxxx)//SEH链
  7. label(PEhandle)
  8. label(Addressloop)
  9. label(WIN7)
  10. label(WINXP)
  11. label(Addressloop1)
  12. label(TTT9)
  13. label(ASD)
  14. label(VBV)
  15. label(JJH)
  16. label(IIU)
  17. label(XCV)
  18. label(GGHG)
  19. label(WIN7Base)
  20. label(UUU9)
  21. label(BNCE)
  22. label(ZCV)
  23. label(MMN)
  24. label(KJH)
  25. label(YBN)
  26. label(KMNJ)
  27. label(LKJ)
  28. label(SDF)
  29. label(QWE)
  30. label(baseloop)
  31. define(base,"newmem"+800)//模块基址
  32. define(espsc,"newmem"+7FC)//原始ESP
  33. define(ver,"newmem"+7F8)//系统版本
  34. define(number,"newmem"+7F4)//函数序号
  35. define(ikns,"newmem"+7EC)//原始页面权限信息
  36. define(vp,"newmem"+7F0)//virtualprotect函数地址
  37. define(loader,"newmem"+100000)//备份后代码和数据的位置 //*根据自己的情况修改大小
  38. define(BCB,"newmem"+1000)//.text区段位置
  39. define(HYCC,"newmem"+1100)//还原代码
  40. define(DCD,"newmem"+1200)//.text区段大小
  41. define(dllenter,"newmem"+800)//程序载入模块基址列表 //*根据自己的情况修改大小
  42. define(APIAddress,"newmem"+10000)//模块函数地址列表 //*根据自己的情况修改大小
  43. define(FSTSWAX,"newmem"+80000)//FSTSW AX指令引用的所在位置 //*根据自己的情况修改大小
  44. //label(CMP2)
  45. //label(CMP1)
  46. //label(HYIM)
  47. newmem: //this is allocated memory, you have read,write,execute access
  48. //place your code here
  49. originalcode:

  50. MOV [espsc],ESP

  51. // 这里写入被注入地址的原代码

  52. //建立SEH链

  53. xxxx:
  54.          JMP LKJ
  55. KJH:
  56.          xor eax,eax
  57.          PUSH SEH
  58.          PUSH DWORD PTR FS:[0]
  59.          MOV DWORD PTR FS:[0],ESP
  60.                  //JMP loader //执行备份的代码并跳到SEH,需要注释掉Xor Eax,Eax,与 Div Eax
  61.          DIV EAX


  62. LKJ:

  63. //我能得到模块的基址

  64.         PUSHAD
  65.         MOV EBX,dllenter
  66.         MOV EAX,DWORD PTR FS:[30]
  67.         MOV ECX,EAX
  68.         ADD ECX,8
  69.         MOV ECX,[ECX]
  70.         MOV [EBX],ECX
  71.         ADD EBX,4
  72.         MOV EAX,DWORD PTR DS:[EAX+C]
  73.         MOV EAX,DWORD PTR DS:[EAX+1C]

  74. baseloop:

  75.         MOV EDI,EAX
  76.         MOV EAX,DWORD PTR DS:[EAX+8]
  77.         MOV DWORD PTR DS:[EBX],EAX
  78.         ADD EBX,4
  79.         CMP EAX,0
  80.         MOV EAX,EDI
  81.         MOV EAX,DWORD PTR DS:[EAX]
  82.         MOV EDI,EAX
  83.         JNZ baseloop
  84.         POPAD

  85. //我能获得模块导出函数
  86.     PUSHAD
  87.     MOV EAX,dllenter
  88.     MOV EDI,APIAddress //API位置存放的位置

  89. Addressloop1:

  90.     MOV EBX,[EAX]
  91.     PUSH EAX
  92.     MOV [newmem+2800],EBX
  93.     MOV ECX,DWORD PTR DS:[newmem+2800]//获取基址
  94.     MOV EAX,ECX

  95. PEhandle:

  96.     ADD EAX,4
  97.     MOV ECX,DWORD PTR DS:[EAX]
  98.     CMP ECX,4550
  99.     JNZ PEhandle
  100.     ADD EAX,78
  101.     MOV ECX,EAX
  102.     MOV ECX,[ECX]
  103.     MOV ESI,[newmem+2800]
  104.     ADD ESI,ECX
  105.     ADD ESI,1C
  106.     MOV EDX,[esi-8] // 函数的数量
  107.     ADD EBX,[ESI] //函数的地址
  108.     MOV EAX,[EBX]
  109.     ADD EAX,DWORD PTR DS:[newmem+2800]

  110. Addressloop:

  111.     MOV ECX,[EBX]
  112.     MOV EAX,[newmem+2800]
  113.     ADD EAX,ECX
  114.     ADD EBX,4
  115.     MOV [EDI],EAX
  116.     ADD EDI,4
  117.     DEC EDX
  118.     CMP EDX,-1
  119.     JNZ Addressloop
  120.     ADD EDI,4
  121.     POP EAX
  122.     PUSHFD
  123.     ADD EAX,4
  124.     POPFD
  125.     CMP [EAX],0
  126.     JNZ Addressloop1
  127.     POPAD

  128.     //我能遍历当前模块代码段中的的所有FSTSW AX代码(其实能遍历任意代码)

  129.     PUSHAD
  130.     MOV EAX,[base]
  131.     MOV EDI,[base]

  132. ASD:

  133.     ADD EAX,4
  134.     MOV ECX,DWORD PTR DS:[EAX]
  135.     CMP ECX,4550
  136.     JNZ ASD
  137.     MOV EDX,DWORD PTR DS:[EAX+100]
  138.     MOV EAX,DWORD PTR DS:[EAX+104]
  139.     ADD EAX,EDI //模块第一个区段的起始地址

  140. //↓我是备份代码-数据用的
  141. /*
  142.   PUSHAD
  143.         MOV [BCB],EAX //保存.text区段位置
  144.         MOV [DCD],EDX //保存.text区段大小
  145.         MOV EDI,loader

  146. CMP1:
  147.         MOV BL,[EAX] //备份.text区段
  148.         MOV [EDI],BL //开始备份
  149.         INC EAX //OEP+1
  150.         INC EDI
  151.         DEC EDX //大小-1
  152.         CMP EDX,0 //查看是否全部备份完
  153.         JNZ CMP1
  154.         POPAD
  155. */

  156. //----------------------------------------------------
  157. //↓我是还原代码-数据用的
  158. /*
  159.       MOV,[HYCC],1 //标志位
  160.       JMP GGHG
  161. HYIM:
  162.       PUSH ikns
  163.       PUSH 40
  164.       PUSH [DCD]
  165.       PUSH [BCB]
  166.       CALL [vp]
  167.       PUSHAD
  168.       MOV EDI,[BCB]
  169.       MOV EBX,[DCD] //还原的大小
  170.       MOV EDX,loader

  171. CMP2:

  172.         MOV BL,[EDX]
  173.         MOV [EDI],BL
  174.         INC EDI
  175.         INC EDX
  176.         DEC EBX
  177.         CMP EBX,0
  178.         JNZ CMP2
  179.         POPAD
  180.         JMP UUU9
  181. */
  182. GGHG:
  183.     MOV EBX,FSTSWAX
  184. QWE:

  185. CMP EDX,0
  186. PUSHFD
  187. DEC EDX
  188. POPFD
  189. JE XCV

  190. SDF:

  191.     ADD EAX,1
  192.     MOV CL,BYTE PTR DS:[EAX]
  193.     CMP CL,0DF //要遍历的指令HEX码
  194.     JNZ QWE
  195.     ADD EAX,1
  196.     MOV CL,BYTE PTR DS:[EAX]
  197.     CMP CL,0E0 //要遍历的指令HEX码
  198.     JNZ SDF
  199.     DEC EAX
  200.     MOV [EBX],EAX
  201.     ADD EBX,4
  202.     INC EAX
  203.     JMP SDF

  204. XCV:
  205.      MOV EAX,DWORD PTR FS:[30] // 获取PEB
  206.      MOV EAX,DWORD PTR DS:[EAX+A4] //获取系统版本
  207.      CMP EAX,5
  208.      MOV [ver],EAX
  209.      JNZ WIN7
  210. WINXP:
  211.      MOV EAX,[APIAddress+BC] //WINXP 硬编获取KiUserExceptionDispatcher异常处理函数
  212. WIN7:
  213.      MOV EAX,[APIAddress+1C4] //WIN7 硬编获取KiUserExceptionDispatcher异常处理函数
  214. VBV:
  215.      ADD EAX,1
  216.      CMP BYTE PTR [EAX],E8
  217.      JNZ VBV
  218.      MOV EDI,EAX
  219.      ADD EAX,1
  220.      MOV EBX,EAX
  221.      MOV EBX,[EBX]
  222.      ADD EDI,EBX
  223.      ADD EDI,5
  224.      MOV EAX,EDI
  225. ZCV:
  226.      ADD EAX,1
  227.      CMP BYTE PTR [EAX],FF
  228.      JNZ ZCV
  229.      ADD EAX,1
  230.      CMP BYTE PTR [EAX],73
  231.      JNZ ZCV
  232.      ADD EAX,1
  233.      CMP BYTE PTR [EAX],04
  234.      JNZ ZCV
  235.      ADD EAX,1
  236.      CMP BYTE PTR [EAX],8D
  237.      JNZ ZCV
  238.      ADD EAX,1
  239.      CMP BYTE PTR [EAX],45
  240.      JNZ ZCV
  241.      ADD EAX,1
  242.      CMP BYTE PTR [EAX],EC
  243.      JNZ ZCV
  244.      ADD EAX,1
  245.      CMP BYTE PTR [EAX],50
  246.      JNZ ZCV
  247.      ADD EAX,1
  248.      CMP BYTE PTR [EAX],FF
  249.      JNZ ZCV
  250.      ADD EAX,1
  251.      CMP BYTE PTR [EAX],75
  252.      JNZ ZCV
  253.      ADD EAX,1
  254.      CMP BYTE PTR [EAX],0C
  255.      JNZ ZCV
  256.      ADD EAX,1
  257.      CMP BYTE PTR [EAX],53
  258.      JNZ ZCV
  259.      ADD EAX,1
  260.      CMP BYTE PTR [EAX],56
  261.      JNZ ZCV
  262.      SUB EAX,11
  263.      MOV EBX,6
  264.      PUSH EAX
  265.      PUSH EBX
  266. IIU:
  267.      JMP KMNJ //处理VirtualProtect函数
  268. UUU9:
  269.      POP EBX
  270.      POP EAX
  271. TTT9:
  272.      MOV BYTE PTR [EAX],90
  273.      INC EAX
  274.      DEC EBX
  275.      CMP EBX,0
  276.      JNZ TTT9
  277.                   //KiRaiseUserExceptionDispatcher Patch Win7 SEH BUG
  278.      POPAD
  279.      JMP KJH
  280.      PUSHAD //去掉ntdll的区段保护
  281. KMNJ:
  282.      CMP [ver],5
  283.      JNZ WIN7Base
  284. //Xp下的Kernel32.dll基址
  285.      MOV EAX,APIAddress
  286.      MOV EBX,2 //XP取kernel32.dll的基址
  287.      MOV [number],DD4//硬编XP virtualprotect函数序号
  288.      JMP JJH
  289. WIN7Base:
  290.          MOV EAX,APIAddress
  291.          MOV [number],13BC//硬编WIN7 virtualprotect函数序号
  292.          MOV EBX,3 //WIN7取kernel32.dll的基址
  293. JJH:
  294.          ADD EAX,4
  295.          CMP DWORD PTR [EAX],0
  296.          JNZ JJH
  297.          DEC EBX
  298.          CMP EBX,0
  299.          JNZ JJH
  300.          ADD EAX,4
  301.          MOV ECX,[number]
  302.          MOV EAX,[EAX+ECX] //得到virtualprotect
  303.          MOV EBX,[dllenter+4]//ntdll基址送EBX
  304.          MOV EDX,[dllenter+4]//ntdll基址送EDX
  305. BNCE:
  306.          ADD EBX,4
  307.          MOV EDI,DWORD PTR DS:[EBX]
  308.          CMP EDI,7865742E
  309.          JNZ BNCE
  310.          ADD EBX,8
  311.          MOV ESI,[EBX]
  312.          ADD EBX,4
  313.          MOV EBX,[EBX]
  314.          ADD EBX,EDX
  315.          PUSH ikns
  316.          PUSH 40
  317.          PUSH ESI
  318.          PUSH EBX
  319.          MOV [vp],EAX
  320.          CALL EAX //调用virtualprotect
  321.          CMP [HYCC],0
  322.          JNZ HYIM
  323.          JMP UUU9

  324.     //读取FSTSW AX完毕,详见FSTSWAX,"newmem"+10000用SEH引发异常 JMP Loader 效果更佳

  325.     //得到函数地址后需要对照相应系统,系统模块导出表中的序列号进行对照然后调用
  326.     //到此这个CE脚本可以实现大部分API的调用和平时所需了

  327.     // 在此处码任意代码即可用导出的函数地址进行 PUSH  CALL 调用系统API

  328. //--------------------------------------------------------

  329. SEH:
  330. //这里写异常处理代码
  331.         MOV EAX,DWORD PTR SS:[ESP+C]
  332.         XOR ESI,ESI//---------寄存器清0
  333. //---------------------------------------------------------

  334.         MOV EDI,[base]
  335. YBN:
  336.         ADD EDI,4
  337.         MOV ECX,DWORD PTR DS:[EDI]
  338.         CMP ECX,4550
  339.         JNZ YBN
  340.         ADD EDI,28
  341.         MOV ECX,[base]
  342.         ADD ECX,[EDI]
  343.         ADD ECX,5 // OEP 指令偏移检测是否写入硬件断点
  344.         CMP ECX,returnhere
  345.         JNZ MMN
  346.         MOV EDI,[espsc]
  347.         SUB EDI,4
  348.         MOV DWORD PTR DS:[EAX+4],EDI//---------DR0写入ESP硬件断点
  349.         MOV DWORD PTR DS:[EAX+18],???//硬件断点属性
  350.         XOR EDI,EDI

  351. //---------------------------------------------------------

  352. MMN:
  353.         //MOV DWORD PTR DS:[EAX+4],ESI//---------调试寄存器iDR0寄存器清0
  354.         //MOV DWORD PTR DS:[EAX+8],ESI//---------调试寄存器iDR1寄存器清0
  355.         //MOV DWORD PTR DS:[EAX+C],ESI//---------调试寄存器iDR2寄存器清0
  356.         //MOV DWORD PTR DS:[EAX+10],ESI//---------调试寄存器iDR3寄存器清0
  357.         //MOV DWORD PTR DS:[EAX+14],ESI//---------调试寄存器iDR6寄存器清0
  358.         //MOV DWORD PTR DS:[EAX+18],ESI//---------调试寄存器iDR7寄存器清0
  359.         //MOV DWORD PTR DS:[EAX+8C],ESI//---------regGs段寄存器清0
  360.         //MOV DWORD PTR DS:[EAX+90],ESI//---------regFs段寄存器清0
  361.         //MOV DWORD PTR DS:[EAX+94],ESI//---------regEs段寄存器清0
  362.         //MOV DWORD PTR DS:[EAX+98],ESI//---------regDs段寄存器清0
  363.         //MOV DWORD PTR DS:[EAX+9C],ESI//---------regEdi寄存器清0
  364.         //MOV DWORD PTR DS:[EAX+A0],ESI//---------regEsi寄存器清0
  365.         //MOV DWORD PTR DS:[EAX+A4],ESI//---------regEbx寄存器清0
  366.         //MOV DWORD PTR DS:[EAX+A8],ESI//---------regEdx寄存器清0
  367.         //MOV DWORD PTR DS:[EAX+AC],ESI//---------regEcx寄存器清0
  368.         //MOV DWORD PTR DS:[EAX+B0],ESI//---------regEax寄存器清0
  369.         //MOV DWORD PTR DS:[EAX+B4],ESI//---------regEbp寄存器清0
  370.         //MOV DWORD PTR DS:[EAX+BC],ESI//---------regCs代码段寄存器清0
  371.         //MOV DWORD PTR DS:[EAX+C0],ESI//---------regFlag标志寄存器清0
  372.         //MOV DWORD PTR DS:[EAX+C4],ESI//---------regEsp寄存器清0
  373.         //MOV DWORD PTR DS:[EAX+C8],ESI//---------regSs段寄存器清0
  374.         MOV DWORD PTR DS:[EAX+B8],returnhere//---------这里是即将要跳到的位置
  375.         XOR EAX,EAX
  376.         RETN

  377.     "pe.exe"+1000:           //注入代码的位置

  378.   jmp newmem //返回地址 占用5字节对应OEP字节
  379.   returnhere:
复制代码


大部分功能都注释了 就不贴脚本功能了   另:WIN7真蛋疼 - =
发表于 2011-10-17 12:21:06 | 显示全部楼层
我看都没人敢回十二神触的帖子了
回复

使用道具 举报

 楼主| 发表于 2011-10-17 16:04:54 | 显示全部楼层
。。。。。。。。。。。。修正了几个BUG,跑了趟网吧取了XP的virtualprotect序号 - =

#2L
      估计是太渣了没人看
回复

使用道具 举报

发表于 2011-10-17 17:13:21 | 显示全部楼层
回复 十二 的帖子

是太触了看不懂
回复

使用道具 举报

 楼主| 发表于 2011-10-17 17:19:21 | 显示全部楼层
回复 漆黑之翼 的帖子

真心渣,用VC估计几十行就完事了,汇编是蠢B的语言。

然后借地问一下 Settransform 设置完变换矩阵的时候 顶点信息在哪里?如果这时候要取变换完得顶点数据应该怎么做?
回复

使用道具 举报

 楼主| 发表于 2011-10-22 11:40:31 | 显示全部楼层
继续更新改变了一下备份策略,囧又挖了一大坑
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 少女注册中

本版积分规则

合作与事务联系|无图版|手机版|小黑屋|喵玉殿

GMT+8, 2025-10-31 10:42

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表