首页
社区
课程
招聘
[旧帖] [求助]修改外挂问题 0.00雪花
发表于: 2007-11-12 06:42 7513

[旧帖] [求助]修改外挂问题 0.00雪花

2007-11-12 06:42
7513
最近拿到个外挂
可这外挂每次关闭时总会自动打开其主页
烦的很 想去掉这个
我是新手 觉得应该蛮简单的
可试了几天都没弄成
希望高手帮帮忙
最好写出分析也解决的相信方法
东西在这里 样本.rar
谢谢大家帮忙

[课程]FART 脱壳王!加量不加价!FART作者讲授!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 198
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
用UE即可解决办法.查找相关的关键字 这里用 "www" 搜索呗~把他用00填充就可以达.
2007-11-12 09:04
0
雪    币: 817
活跃值: (1927)
能力值: ( LV12,RANK:2670 )
在线值:
发帖
回帖
粉丝
3
游戏论坛的那位? 幸会~
2007-11-12 12:11
0
雪    币: 817
活跃值: (1927)
能力值: ( LV12,RANK:2670 )
在线值:
发帖
回帖
粉丝
4
[QUOTE=jianghw;380442]最近拿到个外挂
可这外挂每次关闭时总会自动打开其主页
烦的很 想去掉这个
我是新手 觉得应该蛮简单的
可试了几天都没弄成
希望高手帮帮忙
最好写出分析也解决的相信方法
东西在这里 样本.rar
谢谢大家帮忙[/QUOTE]

004857AD           68 E0584800        push 样本.004858E0               ; ASCII "://"  此处暴露!绝对的暴露~!

00485760           55                 push ebp                                      ; 改retn
2007-11-12 12:16
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
这类东东应该好搞定
2007-11-12 13:21
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
看雪的高手还真多呀 谢谢大家了
可能对大家觉得没什么 可我一个初学者要改一些东西真的很难
再次谢谢了 继续学习了
2007-11-13 00:17
0
雪    币: 230
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
菜菜我也来练练手
运行程序,然后直接点关闭,在我的MyIE 里开了个网站。
那这个程序应该是用  ShellExecute,而 ShellExecute equ <ShellExecuteA>
那好。用OD打开,运行,加过壳的,但不管它。
在Command: 里输入 bp ShellExecuteA然后直接点程序的关闭,出来个确认窗口,点确定.然后被OD断下来了。
正好断在了shell32 的 ShellExecuteA 入口处.
可以看到栈里的参数
0012FBC4   0048588D  /CALL 到 ShellExecuteA 来自 >
0012FBC8   00000000  |hWnd = NULL
0012FBCC   00000000  |Operation = NULL
0012FBD0   00EBDED8  |FileName = "http://www.B>
0012FBD4   00000000  |Parameters = NULL
0012FBD8   00000000  |DefDir = NULL
0012FBDC   00000000  \IsShown = 0

然后alt+F9 ,就是运行到用户代码。不过不知什么原因,没效果,我就用Ctrl+F9(运行到返回)
及 alt+F9  ,一路走,一直运行到 用户代码空间.返回到下面
0048585B    8D45 FC        lea eax,dword ptr ss:[ebp-4]
0048585E    BA 10594800    mov edx,样本.00485910
00485863    E8 F4F2F7FF    call 样本.00404B5C
00485868    8D45 FC        lea eax,dword ptr ss:[ebp-4]
0048586B    BA 34594800    mov edx,样本.00485934
00485870    E8 E7F2F7FF    call 样本.00404B5C
00485875    6A 00          push 0
00485877    6A 00          push 0
00485879    6A 00          push 0
0048587B    8B45 FC        mov eax,dword ptr ss:[ebp-4]
0048587E    E8 D1F4F7FF    call 样本.00404D54
00485883    50             push eax
00485884    6A 00          push 0
00485886    6A 00          push 0
00485888    E8 473BFAFF    call <jmp.&shell32.ShellExecuteA>
0048588D    33C0           xor eax,eax
0048588F    5A             pop edx

查一下Win32 SDK ,ShellExecuteA 要传入6个参数.
其中第3个是要执行的命令行。在上面的
0048587B    8B45 FC        mov eax,dword ptr ss:[ebp-4]
0048587E    E8 D1F4F7FF    call 样本.00404D54
00485883    50             push eax
可以看到 eax 是取得 [ebp-4] 的值,这里放的就是指向那个网站字串的指针.
那我们只要把这个eax 的值改为0就行了,就是 xor eax,eaz
它的 16进制就是 33c0 ,上面就可以看到这个 ,占两个字节,
0048587B    8B45 FC        mov eax,dword ptr ss:[ebp-4]
原来的 mov eax,...  16进制是 8B45FC ,3个字节,只要多就不怕,
我们双击 0048587B    8B45 FC        mov eax,dword ptr ss:[ebp-4] 这行,
或者 右键,点 "汇编",然后输入 xor eax,eax ,并把 "用 nop 填充 "选项选上。
再看下代码成了下面这样。
0048586B    BA 34594800    mov edx,样本.00485934
00485870    E8 E7F2F7FF    call 样本.00404B5C
00485875    6A 00          push 0
00485877    6A 00          push 0
00485879    6A 00          push 0
0048587B    33C0           xor eax,eax
0048587D    90             nop

0048587E    E8 D1F4F7FF    call 样本.00404D54
00485883    50             push eax
00485884    6A 00          push 0
00485886    6A 00          push 0
00485888    E8 473BFAFF    call <jmp.&shell32.ShellExecuteA>
0048588D    33C0           xor eax,eax
现在eax的值就成了 0了,就是一空指针,那ShellExecuteA 执行后就没效果了。
OK,我们要把原程序的代码改了.
我是用 UltraEdit 打开,查找下面的16进制串。
8B 45 FC E8 D1 F4 F7 FF 50 6A 00 6A 00 E8 47 3B FA FF
呵呵,居然可以找到,还好。把 8B 45 FC 改成 33 C0 90 ,然后保存.
再运行,再点关闭,已经不会出那个网站了。

到这就可以结束了。如果想把那个确认窗口也改掉。
可以继续下面,按Ctrl+F9
00485888    E8 473BFAFF    call <jmp.&shell32.ShellExecuteA>
0048588D    33C0           xor eax,eax   ;
0048588F    5A             pop edx
00485890    59             pop ecx
00485891    59             pop ecx
00485892    64:8910        mov dword ptr fs:[eax],edx
00485895    68 AF584800    push 样本.004858AF
0048589A    8D45 F8        lea eax,dword ptr ss:[ebp-8]
0048589D    BA 02000000    mov edx,2
004858A2    E8 0DF0F7FF    call 样本.004048B4
004858A7    C3             retn  ;第1次 Ctrl+F9
004858A8  ^ E9 4BE9F7FF    jmp 样本.004041F8
004858AD  ^ EB EB          jmp short 样本.0048589A
004858AF    59             pop ecx
004858B0    59             pop ecx
004858B1    5D             pop ebp
004858B2    C3             retn       ;第2次Ctrl+F9

在004858B2 这个位置,按F8 ,来到下面这里
004855C7    6A 21          push 21
004855C9    68 0C564800    push 样本.0048560C
004855CE    68 1C564800    push 样本.0048561C
004855D3    8BC3           mov eax,ebx
004855D5    E8 5A54FCFF    call 样本.0044AA34
004855DA    50             push eax
004855DB    E8 D41AF8FF    call <jmp.&user32.MessageBoxA>
004855E0    83F8 02        cmp eax,2
004855E3    75 05          jnz short 样本.004855EA
004855E5    C606 00        mov byte ptr ds:[esi],0
004855E8    EB 1C          jmp short 样本.00485606
004855EA    8BC3           mov eax,ebx
004855EC    E8 6F010000    call 样本.00485760
004855F1    33D2           xor edx,edx
004855F3    8BC3           mov eax,ebx
004855F5    E8 622AFDFF    call 样本.0045805C
004855FA    A1 88B64800    mov eax,dword ptr ds:[48B688]
004855FF    8B00           mov eax,dword ptr ds:[eax]
00485601    E8 8EA6FDFF    call 样本.0045FC94
00485606    5E             pop esi
00485607    5B             pop ebx
00485608    C3             retn

停在了 004855F1    33D2           xor edx,edx
看到上面有MessageBoxA,这个就是那个确认窗口了。
大家想想怎么改。
2007-11-13 12:42
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
楼上的处理方法叫  什么什么的脚那么长 是怎么说的....忘记了

你把Call MessageBoxA 换成 Call ExitProcess 一下就解决了 干嘛那么麻烦呢?
上传的附件:
2007-11-13 16:45
0
雪    币: 230
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
不好意思 ,因为我太菜了。
我不赞成 把 MessageBoxA 直接改成 ExitProcess ,
因为在结束部份往往要做一些 内存释放,关闭句柄,保存操作结果==的操作。
应该把影响减到最小,其它的原来程序要怎么做还去怎么做。
2007-11-13 18:07
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
哦,这个论坛也讨论挂么????
2007-11-14 11:02
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
呵呵,首先声明一下我也是菜鸟,这是我的第一帖,幼稚之处,敬请包涵指教。
    上面有大侠提出了直接修改网页网址,用00进行填充,回去试了一下,感觉是可行的。后来我又想了想,与其通过修改ShellExecute参数为空方式令其无法执行,不如彻底一点,干脆把这个函数删掉,然后用NOP进行填充,当然,一定要注意平衡堆栈,因为这是个API函数,默认使用的是__stdcall调用方式,也就意味着ShellExecute在执行完毕返回时使用的是RET 18h指令(它有6个参数),那么,我们把它删掉了,出栈操作就要由我们来加上去了,这个简单,加上6个POP就可以了。反汇编代码中,call ShellExecute占用5个字节,把它全部变成POP EAX,还差1个字节,看下面,紧接着是一条XOR EAX,EAX,两个字节的指令,ok,这条无非是把EAX清零以备后面使用,而6次出栈操作中,最后弹出的一个参数恰好也是0,so,把它改成POP EAX+NOP刚好一举两得,初始化EAX的同时也完成了堆栈平衡。
    修改然后保存,运行后达到预期效果,弹出网页没有了,程序无异常状况,应该算基本成功吧。
2007-11-15 08:48
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
修改后的局部代码如下:
00485875  |.  6A 00         PUSH 0
00485877  |.  6A 00         PUSH 0
00485879  |.  6A 00         PUSH 0
0048587B  |.  8B45 FC       MOV EAX,DWORD PTR SS:[EBP-4]
0048587E  |.  E8 D1F4F7FF   CALL 样本1.00404D54
00485883  |.  50            PUSH EAX
00485884  |.  6A 00         PUSH 0
00485886  |.  6A 00         PUSH 0
00485888  |.  58            POP EAX
00485889  |.  58            POP EAX
0048588A  |.  58            POP EAX
0048588B  |.  58            POP EAX
0048588C  |.  58            POP EAX
0048588D  |.  58            POP EAX
0048588E  |.  90            NOP
0048588F  |.  5A            POP EDX
00485890  |.  59            POP ECX
00485891  |.  59            POP ECX
00485892  |.  64:8910       MOV DWORD PTR FS:[EAX],EDX
00485895  |.  68 AF584800   PUSH 样本1.004858AF
0048589A  |>  8D45 F8       LEA EAX,DWORD PTR SS:[EBP-8]
0048589D  |.  BA 02000000   MOV EDX,2

晕 突然发现好像不能上传附件,没办法了  看修改吧
2007-11-15 08:58
0
游客
登录 | 注册 方可回帖
返回
//