醉生梦死. 发表于 2016-8-23 11:30

【实战】利用bp ShellExecuteA去软件弹窗。

本帖最后由 醉生梦死. 于 2016-8-23 11:49 编辑

最近在研究一个叫宝宝取名的软件。发现每次关闭的时候,都会打开作者的网页。很讨厌!
相信各位在破解软件的时候,也会遇到这样的情况!
今天我们就利用bp ShellExecuteA去软件弹窗!
新手,欢迎各位批评指正帖中的不足、错误之处!
1.查壳(无壳,VC++6.0编写,其实是易语言)

2.载入OD,输入“bp ShellExecuteA”,回车。
按“F9”运行程序。然后再关闭程序。(因为程序是在退出的时候,才弹出IE的。)

3.如下图。作者网址出现了。
按“alt+F9” 执行到用户。

4.这段就是讨厌的弹窗代码了。右键,二进制,用NOP填充。





00555AD0/$6A FF         push -0x1
00555AD2|.68 AB936200   push 宝宝取名.006293AB                     ;SE 处理程序安装
00555AD7|.64:A1 0000000>mov eax,dword ptr fs:
00555ADD|.50            push eax
00555ADE|.64:8925 00000>mov dword ptr fs:,esp
00555AE5|.81EC 0C020000 sub esp,0x20C
00555AEB|.A1 94C9FA00   mov eax,dword ptr ds:
00555AF0|.56            push esi
00555AF1|.57            push edi
00555AF2|.8BF9          mov edi,ecx
00555AF4|.894424 08   mov dword ptr ss:,eax
00555AF8|.8B47 44       mov eax,dword ptr ds:
00555AFB|.C78424 1C0200>mov dword ptr ss:,0x0
00555B06|.85C0          test eax,eax
00555B08|.0F85 FA000000 jnz 宝宝取名.00555C08
00555B0E|.8B4F 48       mov ecx,dword ptr ds:          ;宝宝取名.00FAC9A8
00555B11|.8D77 48       lea esi,dword ptr ds:
00555B14|.8B41 F8       mov eax,dword ptr ds:
00555B17|.85C0          test eax,eax
00555B19|.75 1B         jnz short 宝宝取名.00555B36
00555B1B|.8D4C24 08   lea ecx,dword ptr ss:
00555B1F|.C78424 1C0200>mov dword ptr ss:,-0x1
00555B2A|.E8 AA4B0C00   call 宝宝取名.0061A6D9
00555B2F|.33C0          xor eax,eax
00555B31|.E9 49010000   jmp 宝宝取名.00555C7F
00555B36|>68 E07EF900   push 宝宝取名.00F97EE0                     ;ASCII "mailto:"
00555B3B|.8D4C24 0C   lea ecx,dword ptr ss:
00555B3F|.E8 1E4D0C00   call 宝宝取名.0061A862
00555B44|.56            push esi
00555B45|.8D4C24 0C   lea ecx,dword ptr ss:
00555B49|.E8 A34F0C00   call 宝宝取名.0061AAF1
00555B4E|>8B4C24 08   mov ecx,dword ptr ss:
00555B52|.53            push ebx                                 ;宝宝取名.00544A50
00555B53|.55            push ebp
00555B54|.8BAC24 2C0200>mov ebp,dword ptr ss:
00555B5B|.55            push ebp                                 ; /IsShown = 0x5
00555B5C|.6A 00         push 0x0                                 ; |DefDir = NULL
00555B5E|.6A 00         push 0x0                                 ; |Parameters = NULL
00555B60|.51            push ecx                                 ; |FileName = 0000376E ???
00555B61|.68 D87EF900   push 宝宝取名.00F97ED8                     ; |Operation = "open"
00555B66|.6A 00         push 0x0                                 ; |hWnd = NULL
00555B68|.FF15 9C346300 call dword ptr ds:[<&SHELL32.ShellExecut>; \ShellExecuteA
00555B6E|.8BF0          mov esi,eax
00555B70|.83FE 20       cmp esi,0x20
00555B73|.0F87 E4000000 ja 宝宝取名.00555C5D
00555B79|.8D5424 14   lea edx,dword ptr ss:
00555B7D|.8BCF          mov ecx,edi
00555B7F|.52            push edx                                 ;宝宝取名.004A0003
00555B80|.68 D07EF900   push 宝宝取名.00F97ED0                     ;ASCII ".htm"
00555B85|.68 00000080   push 0x80000000
00555B8A|.E8 D1FEFFFF   call 宝宝取名.00555A60
00555B8F|.85C0          test eax,eax
00555B91|.0F85 C6000000 jnz 宝宝取名.00555C5D
00555B97|.8B1D 68336300 mov ebx,dword ptr ds:[<&KERNEL32.lstrcat>;kernel32.lstrcatA
00555B9D|.8D4424 14   lea eax,dword ptr ss:
00555BA1|.68 BC7EF900   push 宝宝取名.00F97EBC                     ; /StringToAdd = "\shell\open\command"
00555BA6|.50            push eax                                 ; |ConcatString = 0000002A ???
00555BA7|.FFD3          call ebx                                 ; \lstrcatA
00555BA9|.8D4C24 14   lea ecx,dword ptr ss:
00555BAD|.8D5424 14   lea edx,dword ptr ss:
00555BB1|.51            push ecx
00555BB2|.52            push edx                                 ;宝宝取名.004A0003
00555BB3|.68 00000080   push 0x80000000
00555BB8|.8BCF          mov ecx,edi
00555BBA|.E8 A1FEFFFF   call 宝宝取名.00555A60
00555BBF|.85C0          test eax,eax
00555BC1|.0F85 96000000 jnz 宝宝取名.00555C5D
00555BC7|.8D4424 14   lea eax,dword ptr ss:
00555BCB|.68 B47EF900   push 宝宝取名.00F97EB4                     ;ASCII ""%1""
00555BD0|.50            push eax
00555BD1|.E8 5A1C0A00   call 宝宝取名.005F7830
00555BD6|.8BF0          mov esi,eax
00555BD8|.83C4 08       add esp,0x8
00555BDB|.85F6          test esi,esi
00555BDD|.75 5D         jnz short 宝宝取名.00555C3C
00555BDF|.8D4C24 14   lea ecx,dword ptr ss:
00555BE3|.68 B07EF900   push 宝宝取名.00F97EB0                     ;ASCII "%1"
00555BE8|.51            push ecx
00555BE9|.E8 C21B0A00   call 宝宝取名.005F77B0
00555BEE|.8BF0          mov esi,eax
00555BF0|.83C4 08       add esp,0x8
00555BF3|.85F6          test esi,esi
00555BF5|.75 45         jnz short 宝宝取名.00555C3C
00555BF7|.8D5424 14   lea edx,dword ptr ss:
00555BFB|.52            push edx                                 ; /String = "Ph"
00555BFC|.FF15 9C336300 call dword ptr ds:[<&KERNEL32.lstrlenA>] ; \lstrlenA
00555C02|.8D7404 13   lea esi,dword ptr ss:
00555C06|.EB 37         jmp short 宝宝取名.00555C3F
00555C08|>8D57 4C       lea edx,dword ptr ds:
00555C0B|.8D4C24 08   lea ecx,dword ptr ss:
00555C0F|.52            push edx                                 ;宝宝取名.004A0003
00555C10|.E8 FD4B0C00   call 宝宝取名.0061A812
00555C15|.8B4424 08   mov eax,dword ptr ss:
00555C19|.8B48 F8       mov ecx,dword ptr ds:
00555C1C|.85C9          test ecx,ecx
00555C1E|.^ 0F85 2AFFFFFF jnz 宝宝取名.00555B4E
00555C24|.8D4C24 08   lea ecx,dword ptr ss:
00555C28|.C78424 1C0200>mov dword ptr ss:,-0x1
00555C33|.E8 A14A0C00   call 宝宝取名.0061A6D9
00555C38|.33C0          xor eax,eax
00555C3A|.EB 43         jmp short 宝宝取名.00555C7F
00555C3C|>C606 00       mov byte ptr ds:,0x0
00555C3F|>68 AC7EF900   push 宝宝取名.00F97EAC                     ;UNICODE " "
00555C44|.56            push esi
00555C45|.FFD3          call ebx                                 ;宝宝取名.00544A50
00555C47|.8B4424 10   mov eax,dword ptr ss:
00555C4B|.50            push eax
00555C4C|.56            push esi
00555C4D|.FFD3          call ebx                                 ;宝宝取名.00544A50
00555C4F|.8D4C24 14   lea ecx,dword ptr ss:
00555C53|.55            push ebp                                 ; /ShowState = SW_SHOW
00555C54|.51            push ecx                                 ; |CmdLine = 0000376E ???
00555C55|.FF15 6C336300 call dword ptr ds:[<&KERNEL32.WinExec>]; \WinExec
00555C5B|.8BF0          mov esi,eax
00555C5D|>33D2          xor edx,edx                              ;宝宝取名.004A0003
00555C5F|.83FE 20       cmp esi,0x20
00555C62|.0F9FC2      setg dl
00555C65|.8D4C24 10   lea ecx,dword ptr ss:
00555C69|.8BF2          mov esi,edx                              ;宝宝取名.004A0003
00555C6B|.C78424 240200>mov dword ptr ss:,-0x1
00555C76|.E8 5E4A0C00   call 宝宝取名.0061A6D9
00555C7B|.5D            pop ebp                                  ;0012E9E0
00555C7C|.8BC6          mov eax,esi
00555C7E|.5B            pop ebx                                  ;0012E9E0
00555C7F|>8B8C24 140200>mov ecx,dword ptr ss:         ;宝宝取名.00549A05
00555C86|.5F            pop edi                                  ;0012E9E0
00555C87|.5E            pop esi                                  ;0012E9E0
00555C88|.64:890D 00000>mov dword ptr fs:,ecx
00555C8F|.81C4 18020000 add esp,0x218
5.右键“复制到可执行文件”,然后保存。

6.重新打开保存后的程序再关闭,弹窗消失了!
上面NOP那个属于笨方法,其实我也只知道NOP,才疏学浅呀。幸得Hmily大神指点,又学到了新的知识!

大家碰到这样代码比较多的情况,可以试试Hmily大神提供的方法: 在入口00555AD0那修改成retn简单一些。


感谢Hmily大神!

Hmily 发表于 2016-8-23 11:36

赶紧换换你那山寨改版权版的peid了,要么用原版,要么用exeinfope好了。


nop那么多有点累,可以直接在入口00555AD0那修改成retn简单一些。

KaQqi 发表于 2016-8-23 11:49

你可以直接在段首retn。这样比较方便。。
你可以在数据窗口把网址改成吾爱破解论坛,这样不就更好了吗

醉生梦死. 发表于 2016-8-23 11:42

Hmily 发表于 2016-8-23 11:36
赶紧换换你那山寨改版权版的peid了,要么用原版,要么用exeinfope好了。




一针见血呀!谢谢指点!

LeiSir 发表于 2016-8-23 11:48

离大神这么近,顶一下

醉生梦死. 发表于 2016-8-23 11:51

cqr2287 发表于 2016-8-23 11:49
你可以直接在段首retn。这样比较方便。。
你可以在数据窗口把网址改成吾爱破解论坛,这样不就更好了吗

言之有理。

1888888 发表于 2016-8-23 12:17

非常有用感谢

dk123456518 发表于 2016-8-23 13:02


非常有用..感谢..

jw8013 发表于 2016-8-23 13:23

学习了的说!

redapple2015 发表于 2016-8-23 13:37

楼主能不能给个软件下载地址?百度一下,不知道下载哪一个?
页: [1] 2
查看完整版本: 【实战】利用bp ShellExecuteA去软件弹窗。