能力值:
( LV2,RANK:10 )
|
-
-
2 楼
用UE即可解决办法.查找相关的关键字 这里用 "www" 搜索呗~把他用00填充就可以达.
|
能力值:
( LV12,RANK:2670 )
|
-
-
3 楼
游戏论坛的那位? 幸会~
|
能力值:
( LV12,RANK:2670 )
|
-
-
4 楼
[QUOTE=jianghw;380442]最近拿到个外挂
可这外挂每次关闭时总会自动打开其主页
烦的很 想去掉这个
我是新手 觉得应该蛮简单的
可试了几天都没弄成
希望高手帮帮忙
最好写出分析也解决的相信方法
东西在这里 样本.rar
谢谢大家帮忙[/QUOTE]
004857AD 68 E0584800 push 样本.004858E0 ; ASCII "://" 此处暴露!绝对的暴露~!
00485760 55 push ebp ; 改retn
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
这类东东应该好搞定
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
看雪的高手还真多呀 谢谢大家了
可能对大家觉得没什么 可我一个初学者要改一些东西真的很难
再次谢谢了 继续学习了
|
能力值:
( 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,这个就是那个确认窗口了。
大家想想怎么改。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
楼上的处理方法叫 什么什么的脚那么长 是怎么说的....忘记了 你把Call MessageBoxA 换成 Call ExitProcess 一下就解决了 干嘛那么麻烦呢?
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
不好意思 ,因为我太菜了。
我不赞成 把 MessageBoxA 直接改成 ExitProcess ,
因为在结束部份往往要做一些 内存释放,关闭句柄,保存操作结果==的操作。
应该把影响减到最小,其它的原来程序要怎么做还去怎么做。
|
能力值:
( LV2,RANK:10 )
|
-
-
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的同时也完成了堆栈平衡。
修改然后保存,运行后达到预期效果,弹出网页没有了,程序无异常状况,应该算基本成功吧。
|
能力值:
( 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
晕 突然发现好像不能上传附件,没办法了 看修改吧
|