First, I am sorry to say that many of my friends did not reply to me, and I haven't been on csdn for a long time. So I am sorry to everyone ......
Again, many of my friends used the delayed T-man tool I wrote and encountered many bugs. I can only say sorry for this, because the tool was written a long time ago, at that time, it was very difficult to deal with the problem, and it was inevitable that the bug existed. Because the time was mainly focused on graduation design, so there is no way to improve it (I remember I deleted the article on the third day after the release). I will try again when I have time to complete it...
---------------------------------------------------------------- I am a split line --------------------------------------------------------
Let me first explain why I suddenly showed up without bubbling. During this time, I was a little upset about reading a book and wanted to play two Warcraft games, the excuse for myself is to relax (in fact, it is easy to go to the swimming pool to see beautiful women). to relax, you must have no technical skills, there are just a few really three sapphire pieces (don't despise me, I just want to relax ...), in the third frame, the host made a "-Mh", and then everyone saw that I opened the figure, I just lost a few words to explain it when I was thrown out of the game by the host T, so I felt uncomfortable, so I wanted to write a small program to break down "-Mh, refer to an article previously written by Lynn.
How to bypass some map-mh
Http://www.pleee.com/archives/221.html
The principle of Lynn is almost the same. Next I will briefly describe it...
To know how to use the "-Mh" command, you must first know what the "-Mh" of the map has done and extract the war3map from the map. j file, search for the keyword "Possible cheating" to detect the MH trigger
Function trig_eagelamh_actions takes nothing returns nothing <br/> call disabletrigger (gettriggeringtrigger () <br/> call polledwait (2.00) <br/> call enabletrigger (callback) <br/> call enabletrigger (events) <br/> call setusercontrolforceoff (events) <br/> call createnunitsatloc (1, 'hfoo', player (15), udg_eagelamhp, bj_unit_facing) <br/> set udg_eagelamhu = bj_lastcreatedunit <br/> set bj_forloopaindex = 1 <br/> set limit = 12 <br/> loop <br/> exitwhen bj_forloopaindex> limit <br/> If (trig_eagelamh_func007func001c ()) then <br/> call createfogmodifierradiuslocbj (true, player (-1 + (bj_forloopaindex), fog_of_war_visible, udg_eagelamhp, 512) <br/> set udg_eagelamhfog [bj_forloopaindex] = callback <br/> call selectunitforplayersingle (udg_eagelamhu, player (-1 + (bj_forloopaindex ))) <br/> call destroyfogmodifier (udg_eagelamhfog [bj_forloopaindex]) <br/> endif <br/> set bj_forloopaindex = bj_forloopaindex + 1 <br/> endloop <br/> call polledwait (1 .) <br/> call removeunit (udg_eagelamhu) <br/> call triggerexecute (gg_trg_eagelprint) <br/> call setusercontrolforceon (callback) <br/> call disabletrigger (callback) <br/> call disabletrigger (gg_trg_eagelseekb) <br/> call enabletrigger (gettriggeringtrigger () <br/> endfunction
Create a unit, and then select the unit as the general map anti-Mh practice. This is also the case in the Lynn article, and the new zhensan sapphire uses this method to detect MH, call createfogmodifierradiuslocbj to create a fog, and then create a unit (like an individual infantry) in the coordinates, and then let the players select the unit. Our goal is to destroy the function of this Code, the most direct thing is to let him not do things, directly retn (as if there is no technical content, It's all said by Lynn ...)...
The key C ++ code is given below
Void cbypassdlg: onbnclickedpatch () <br/>{< br/> // todo: add the control notification handler code here <br/> dword pid; <br/> hwnd hwar3 =: findwindow (L "Warcraft III", l "Warcraft III"); <br/> If (! Hwar3) <br/>{< br/> MessageBox (L "can't find Warcraft III! "); <Br/> return; <br/>}< br/> getwindowthreadprocessid (hwar3, & pid); <br/> handle hopen = OpenProcess (process_all_access, false, PID); <br/> // byte _ data1 [] = {0x33, 0xc0, 0xe9, 0 x, 0 x, 0 x, 0x90, 0x90, 0x90, 0x90, 0x90, 0x90 }; // rewrite the code at the entrance of the createfogmodifierradiusloc function <br/> byte _ data2 [] = {0x33, 0xc0, 0xe9, 0xfc, 0 x, 0 x, 0 x, 0x90, 0x90, 0x90, 0x90, 0x90}; // rewrite the code at the entrance of the selectunit function <br/> // createfogmodifierradiusloc Function Address: 0x6f2b3170 <br/> // address of the selectunit function entry is 0x6f2c59a0 <br/> // If (! Writeprocessmemory (hopen, (lpvoid) (0x6f2b3170), & _ data1, 12, null) |! Writeprocessmemory (hopen, (lpvoid) (0x6f2c59a0), & _ data2, 12, null) <br/> If (! Writeprocessmemory (hopen, (lpvoid) (0x6f2c59a0), & _ data2, 12, null) <br/>{< br/> MessageBox (L "patch error! "); <Br/> return; <br/>}< br/> else <br/> MessageBox (L" success! "); <Br/>}
In the code above, we can see that I commented out the part at the entrance of the createfogmodifierradiusloc function, because this is not acceptable, that is, any function that creates a unit, creates an item, and so on. If retn is removed, warcraft will have a data synchronization error and will be disconnected, so you can only modify the operation function, rather than modifying the function that affects Warcraft data (errors have been made here == !)...
Void cbypassdlg: onbnclickedrecovery () <br/>{< br/> // restoration function <br/> dword pid; <br/> hwnd hwar3 = :: findwindow (L "Warcraft III", l "Warcraft III"); <br/> If (! Hwar3) <br/>{< br/> MessageBox (L "can't find Warcraft III! "); <Br/> return; <br/>}< br/> getwindowthreadprocessid (hwar3, & pid); <br/> handle hopen = OpenProcess (process_all_access, false, PID); <br/> // byte _ data1 [] = {0x55, 0x8b, 0xec, 0x83, 0xec, 0x3c, 0x8b, 0x0d, 0xbc, 0x22,0x87, 0x6f}; <br/> byte _ data2 [] = {0x55, 0x8b, 0xec, 0x83, 0xec, 0x08, 0x8b, 0x0d, 0xbc, 0x22,0x87, 0x6f }; <br/> // If (! Writeprocessmemory (hopen, (lpvoid) (0x6f2b3170), & _ data1, 12, null) |! Writeprocessmemory (hopen, (lpvoid) (0x6f2c59a0), & _ data2, 12, null) <br/> If (! Writeprocessmemory (hopen, (lpvoid) (0x6f2c59a0), & _ data2, 12, null) <br/>{< br/> MessageBox (L "recovery error! "); <Br/> return; <br/>}< br/> else <br/> MessageBox (L" success! "); <Br/>}< br/>
========================================================== =============================================
I believe it is clear enough that the source code of the program does not need to be provided. It is sufficient to have the above two key codes.
Download link:
Breeze.rar
Http://www.brsbox.com/filebox/down/fc/b61f68663fe638fae831e5336b247baa
========================================================== ========================================================
It may take some time for csdn to upload attachments for review... please wait...
Note:
This program is only for Warcraft 1.20e and only for the new really three sapphire map-Mh command...
The method has been provided. If you want to use other maps, you only need to draw images based on the gourd...
I don't know what programmers are doing on the VSCC platform. I tried it with the official version of vs3.0. This tool can run normally... I really don't know where their anti-plug-ins are ??!!