• 标 题:winamp看过来http://www.onlinedown.net/eovideo.htm 帮你搞定了 (4千字)
  • 作 者:pll621
  • 时 间:2002-8-26 12:24:58
  • 链 接:http://bbs.pediy.com

原有信息:
序 号:235933
标 题:pll621超人,你的pe很利害!你可否试一下把一个单线程的软件,修改成多线程? (151字)
发信人:winamp
时 间:2002-8-26 0:23:11
阅读次数:8
详细信息:

http://www.onlinedown.net/eovideo.htm
就像word一样,同时可以打开多个软件界面!
这样转换就方便与快多了!
这样才是很利害的pe diy实例!
请超人试一下!

更改方法和原理:
关于怎么打开多个程序:
昨天晚上winapm问了我这个问题,今天抽十分钟空看了一下,具体实施的方法
这个程序是判断一个标志位来达到检测自己是否已经运行了,而不是用findwindow等方法
* Possible Reference to Dialog: DialogID_01EE, CONTROL_ID:00FF, ""
                                  |
:00438665 6AFF                    push FFFFFFFF
:00438667 6821C34D00              push 004DC321
:0043866C 64A100000000            mov eax, dword ptr fs:[00000000]
:00438672 50                      push eax
:00438673 64892500000000          mov dword ptr fs:[00000000], esp
:0043867A 81EC68010000            sub esp, 00000168
:00438680 898DACFEFFFF            mov dword ptr [ebp+FFFFFEAC], ecx       
:00038680    898D ACFEFFFF              MOV [DWORD SS:EBP-154],ECX
:00438686 833D0040520000          cmp dword ptr [00524000], 00000000改成00038686      C605 00405200 00          MOV [BYTE DS:524000],0   

这个就是程序的判断标志位的地方,如果为零就证明没有运行,为1就已经运行,他然后就会GetDesktopWindow 把自己的窗口弹出

:0043868D 0F8EF2000000            jle 00438785                      改成0003868D      E9 F3000000                JMP 00038785             
:00438693 8D8D10FFFFFF            lea ecx, dword ptr [ebp+FFFFFF10]    00038692      90                        NOP                     
                                                                     
* Reference To: MFC42.Ordinal:021C, Ord:021Ch
                                  |
:00438699 E846D80900              Call 004D5EE4
:0043869E C745FC00000000          mov [ebp-04], 00000000

* Reference To: USER32.GetDesktopWindow, Ord:00FFh===》这个断点很有用,因为如果程序要把自己弹出自己窗口就需要这个GetDesktopWindow 的api,下这个断点很容易知道程序为什么不能让自己多次运行



* Reference To: MFC42.Ordinal:0320, Ord:0320h
                                  |
:00438780 E859D70900              Call 004D5EDE

* Referenced by a (U)nconditional or (C)onditional Jump at Address:                                       
|:0043868D(C)                                                                                                 
|                                                                          00038780  E8 59D70900                CALL 000D5EDE                                     
:00438785 C7050040520001000000  mov dword ptr [00524000], 00000001 ====>改成00038785  C705 00405200 00000000  MOV [DWORD DS:524000],0                  
:0043878F C7851CFFFFFF94000000  mov dword ptr [ebp+FFFFFF1C], 00000094      0003878F  C785 1CFFFFFF 94000000    MOV [DWORD SS:EBP-E4],94 ,0                     
:00438799 8D8D1CFFFFFF          lea ecx, dword ptr [ebp+FFFFFF1C]          00038799  8D8D 1CFFFFFF              LEA ECX,[DWORD SS:EBP-E4]                         
:0043879F 51                    push ecx                                    0003879F  51                        PUSH ECX                                         
                                                                                                                                                       
* Reference To: KERNEL32.GetVersionExA, Ord:0175h                                 
                                  |
:004387A0 FF15EC414E00            Call dword ptr [004E41EC]
:004387A6 E8D0460100              call 0044CE7B


关于注册:判断在下面
:00420E5D 8D4DF0                  lea ecx, dword ptr [ebp-10]
:00420E60 51                      push ecx
:00420E61 E852AC0200              call 0044BAB8
:00420E66 85C0                    test eax, eax
:00420E68 7426                    je 00420E90===>跳就完蛋

call 0044BAB8到这里:
:0044BADD E834A50800              Call 004D6016
:0044BAE2 8945A4                  mov dword ptr [ebp-5C], eax

* Possible StringData Ref from Data Obj ->"X5ME"==》这个就是注册码,本来就没有什么注册码的计算,把X5ME填入前面四个,后边几个随便你添
                                  |
:0044BAE5 68A8D35000              push 0050D3A8
:0044BAEA 8B4DA4                  mov ecx, dword ptr [ebp-5C]
:0044BAED 8B11                    mov edx, dword ptr [ecx]
:0044BAEF 52                      push edx

* Reference To: MSVCRT.strcmp, Ord:02B8h===》我就是下断点strcmp找到的,本来mfc42的机理和vb差不多,字符串比较也就这么几个函数,假如让我写的话我肯定自己写比较函数,而不会用公用的,太不安全了
                                  |
:0044BAF0 E8ABB60800              Call 004D71A0
:0044BAF5 83C408                  add esp, 00000008
:0044BAF8 F7D8                    neg eax


                                              pll621
<