木马,其实不能算,只是验证一些想法和进行学习。">
黑客风云——风云网络
设为首页 加入收藏 我要投稿 网站地图

您现在的位置: 黑客风云 >> 黑客文章 >> 黑客进阶 >> 黑客编程 >> 正文
·完美空间提供500M免费AS04-10·企业安全之YY内网准入以04-09
·企业安全之意识与策略04-09·剑走偏锋:IIS漏洞利用04-09
·我来免费网提供100M免费04-09·1122mb.com提供20G超大免04-08
·映像劫持与反劫持技术04-07·让所有"暴力删除工具"无04-07
·入侵88red系统的详细过程04-07·Sql Injection脚本注入终04-07
·vbs+delphi 反弹后门生成04-07·飞讯网提供100MB免费PHP04-07
·突破SQL注入攻击时输入框04-04·结合内核和病毒技术的最04-04
·Real Player rmoc3260.d04-04·亿万网络今月最后为您提04-04
·php+mysql 5 sql inject04-03·Real Player rmoc3260.d04-03
·oblog文件下载漏洞04-03·免费啦提供1G-2G免费全能04-03
·完全解析网页后门和挂马04-02·一句话开3389(只测试过04-02
·萧萧免费空间网提供100M04-02·谷道免费空间网提供1G免04-01
·从本地入手解决双线路由03-31·sablog 1.6 多个跨站漏洞03-31
·富文本编辑器的跨站脚本03-31·Cookie注入是怎样产生的03-31
[推荐]网游盗号木马实现手记
        ★★★★★

网游盗号木马实现手记

文章整理发布:黑客风云 文章来源:www.05112.com 更新时间:2008-1-9 13:07:36

注:只是学习,没有任何恶意。下面的分析打了码,而且不完整

上次的文字,抱歉有几点错误。shellexecutehook 并不能实现注入到全局进程。现在木马还是使用消息钩子和远程线程比较多。-_# 今天遂亲自写了个动手写了个简单盗号木马,其实不能算,只是验证一些想法和进行学习。

准备工具:
lordpe
od
syser debugger

这个游戏外边加了 tmd, 但不影响我们的分析。运行游戏,使用 lordpe 校正imagesize,然后dump 进程一份,修改入口点 0x1000, 然后 kill 掉输入表,使用 od 打开进行静态分析(个人习惯,呵呵)。

我们的目标获取用户名和密码,首先的任务要找到游戏登录验证地方,回忆一下怎么做动态注册机和游戏作弊程序,“搜索输入数据,定位输入数据处理代码”。

打开运行 syser, 然后进入游戏登录窗口, 在用户名中输入 dummys,ctrl+f12 调出syser调试窗口。我们要找到 dummys 这个输入在控制台下输入

>addr game // 切换到游戏的进程空间
>s 0 80000000 "dummys" // 限定地址其实可以更少一点,我习惯这样了,呵呵。

等待几秒钟后,如果输入正确,就可以在数据窗口可以看到这个串了。一般会有多个相同的串出现,你可以输入
>s

搜索下一个出现的 dummys来寻找是谁问这个串的,在控制台下输入

>bpm xxxxxxxx // xxxxxxxx 即是 dummys 地址

ctrl+12 切出 syser, 紧跟着 syser 退出后再次弹出。
哈哈,已经断了下了,注意看看访问是不是游戏代码访问的。

我这边调试时断在 00479E78, 你的断下地址可能不同,其实这里不用管他具体。只要确认这段代码的参数或上下文经常和我们要的数据发生关系即可。

00479E75 . 52 push edx
00479E76 . 51 push ecx
00479E77 . 50 push eax
00479E78 . 8906 mov dword ptr [esi], eax // eax --> Name
00479E7A . 90 nop
00479E7B E8 90078A77 call 77D1A610 // wsprintfA
00479E80 ? 8B0E mov ecx, dword ptr [esi]
00479E82 . 8A11 mov dl, byte ptr [ecx]
00479E84 . 33C0 xor eax, eax
00479E86 . 84D2 test dl, dl
00479E88 . 74 0F je short 00479E99
00479E8A . 8BD1 mov edx, ecx

好,在控制台下输入

>bd * // 禁用以前的断点
>bp 00479E7B x // 下硬件执行断点

然后 ctrl + f12 来回切换观察,这个函数的参数是不是自己输入的 dummys,经过几次后,可以确认这段代码的利用价值还可以。(其实这段代码是公用函数,第一次写完程序 debugout 第一个参数时,输出很多垃圾,但是仔细观察一下,当dummys 出现时第二个参数是 %s, 并且第一个参数即用户名只能是英文, 最后的可以成功过滤出用户名,其实 patch 这处代码还有一个好处就是没有自校验,呵呵)

接着我们想想该获取处理密码的地方了,通过上面的学习你是不是想直接搜索密码,类似

>s 0 80000000 "mypass"
>...

呵呵,最终你将得到的是 "Couldn't foundin range!"。注意一下你就发现你输入的密码都被转化为 *** 显示在屏幕上,oh yeah, 我们就搜索 ***,在控制台下输入

>s 0 80000000 "******" // 多输入长度的密码,匹配准确一点

等待一会,你将在数据发现 ****** 已经待在那里了。紧接着的操作和用户名的处理一下,设置一个硬件断点

>bpm yyyyyyyy // 输入星星的地址加上长度,新的星星将存放在那里

ctrl+f12 运行,马上又断下来。
我这里断在了

0047898D |. 8BF2 mov esi, edx // src 星星长度
0047898F |. 8D0C28 lea ecx, dword ptr [eax+ebp]
00478992 |. 2BFD sub edi, ebp
00478994 |. 03C6 add eax, esi
00478996 |> 8A140F /mov dl, byte ptr [edi+ecx] // src 星星
00478999 |. 8811 |mov byte ptr [ecx], dl // dst 星星
0047899B |. 41 |inc ecx
0047899C |. 4E |dec esi
0047899D |.^ 75 F7 \jnz short 00478996

在这里你并没有看到明文,但是发现了什么有用的信息了吗。那就是星星的长度。接着就是寻找 src 星星长度是哪里来的,一个接一个硬件断点。你将发现一个刚刚输入的密码字符。我这里是

004261B5 |. /7E 20 jle short 004261D7
004261B7 |. |8B8B D0100000 mov ecx, dword ptr [ebx+10D0]
004261BD |. |8D49 00 lea ecx, dword ptr [ecx]
004261C0 |> |80BC04 900000>/cmp byte ptr [esp+eax+90], 20 // src -->
password char
004261C8 |. |7D 01 |jge short 004261CB
004261CA |. |40 |inc eax
004261CB |> |41 |inc ecx
004261CC |. |40 |inc eax
004261CD |. |3BC6 |cmp eax, esi // esi --> password length
004261CF |.^|7C EF \jl short 004261C0
004261D1 |. |898B D0100000 mov dword ptr [ebx+10D0], ecx
004261D7 |> \8BBB F0110000 mov edi, dword ptr [ebx+11F0]

所有的分析都结束了,该怎么利用这些东西。用户名的处理部分,直接 patch 掉那段代码即可,但是密码处理,在调试时发现会有自校验, 如果 patch 肯定会被发现的。是 xx 自校验还是另寻方法,
>bpm 004261B5 // 设置一个硬件断点, 寻找自校验代码处理地址

运行,马上断下来。你将看到一个小循环,正在校验这段代码,我第一此选择 xx 这个自校验,但是没过多久你就会发现还有一层自校验在校验这段代码,靠! 算了。不知道何时是个头
该怎么办?

[1] [2] 下一页

文章录入:cainiaowang    责任编辑:cainiaowang 
【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
VIP 专 区
Copyright @2006 黑客风云 ●业务联系:QQ 联系怪人 联系奇人 Email:给怪人发邮件 给奇人发邮件
ICP备案:冀06009886