MasterGH Опубликовано 28 мая, 2015 Поделиться Опубликовано 28 мая, 2015 Данный скрипт позволит вести счет вызовов call на выделенном участке памяти. В отличии от Ultimap этот способ не должен видимо тормозить игру. Но есть и ограничение Call-ы размером не меньше пяти байт. А большие регионы памяти и большое количество call-ов возможно придется долго ждать. Подробнее посмотрим идею на скришотах. На скриншоте ниже показан результат после выполнения команды Скрытый текст Скрытый текст allocMememoryCount = 0 sizeInstructions = 0 -- Устанавливает регион сканирования в главную форму CE function SetMemoryScanOptions(startAddress, endAddress) local mainFrm = getMainForm() mainFrm.FromAddress.Text = string.format('%X', startAddress) mainFrm.ToAddress.Text = string.format('%X', endAddress) end function AllocMemory(maxCalls) allocMememoryCount = allocMememoryCount + 1 strNameCode = 'MemoCallCount'..allocMememoryCount strNameData = 'MemoDataCount'..allocMememoryCount autoAssemble(string.format([[ alloc(%s,%s) registersymbol(%s) ]],strNameCode,maxCalls * 200,strNameCode)) autoAssemble(string.format([[ alloc(%s,%s) registersymbol(%s)]],strNameData,maxCalls * 4,strNameData)) adressCodeMem = getAddress(strNameCode) addressDataMem = getAddress(strNameData) return adressCodeMem, addressDataMem end function LogCalls(startAddress, endAddress, maxCalls) pause() lastClock = os.clock() currentAddress = startAddress disassembler = getDefaultDisassembler() adressCodeMem, addressDataMem = AllocMemory(maxCalls) countCall = 0 while currentAddress < endAddress and countCall < maxCalls do line = disassembler.disassemble(currentAddress) local data = disassembler.getLastDisassembleData() sizeCurrentInstruction = getInstructionSize(currentAddress) if(data["isCall"]) then if(sizeCurrentInstruction < 5) then --print(string.format('Пропущенна инструкция %s',line)) else adressCodeCount = adressCodeMem + sizeInstructions adressDataCount = countCall*4 + addressDataMem if(sizeCurrentInstruction > 5) then --print(line) aaCode = string.format([[%x:inc[%x] jmp %s %x: call %x db%s]], adressCodeCount, adressDataCount, data["parameters"], currentAddress, adressCodeCount, string.rep(' 90', sizeCurrentInstruction - 5)) else aaCode = string.format([[%x:inc [%x] jmp %s %x: call %x]], adressCodeCount, adressDataCount, data["parameters"], currentAddress, adressCodeCount) end autoAssemble(aaCode) sizeJmp = getInstructionSize(adressCodeCount + 6) -- PushF=2, Inc=6, Popf = 2 sizeInstructions = sizeInstructions + 6 + sizeJmp countCall = countCall + 1 --print(string.format('Инъекция %s',line)) end end currentAddress = currentAddress + sizeCurrentInstruction end print('Last log call at '..line) --print(string.format('Last address code from region 0x%08X',currentAddress)) print(string.format("Start region : 0x%08X, End region : 0x%08X", startAddress,endAddress)) print(string.format("Call injections : %s", countCall)) print(string.format("End address from region: 0x%08X", currentAddress)) print(string.format("Scan addresses %s", endAddress - startAddress)) print(string.format("Finish time %.2f sec", os.clock() - lastClock)) print(string.format("Mem count region : 0x%08X, End region : 0x%08X", addressDataMem, addressDataMem + maxCalls * 4)) print("Injections complete!!") SetMemoryScanOptions(addressDataMem, addressDataMem + maxCalls * 4) unpause() end function LogCallsWithIgnoreCalls(startAddress, endAddress, maxCalls, maxIgnoreCalls) pause() lastClock = os.clock() currentAddress = startAddress disassembler = getDefaultDisassembler() adressCodeMem, addressDataMem = AllocMemory(maxCalls) countCall = 0 maxCallsWithIgnored = maxCalls + maxIgnoreCalls while currentAddress < endAddress and countCall < maxCallsWithIgnored do line = disassembler.disassemble(currentAddress) local data = disassembler.getLastDisassembleData() sizeCurrentInstruction = getInstructionSize(currentAddress) if(data["isCall"]) then countCall = countCall + 1 if(countCall > maxIgnoreCalls) then if(sizeCurrentInstruction < 5) then --print(string.format('Пропущенна инструкция %s',line)) else adressCodeCount = adressCodeMem + sizeInstructions adressDataCount = (countCall-1)*4 + addressDataMem if(sizeCurrentInstruction > 5) then aaCode = string.format([[%x:inc [%x] jmp %s %x: call %x db%s]], adressCodeCount, adressDataCount, data["parameters"], currentAddress, adressCodeCount, string.rep(' 90', sizeCurrentInstruction - 5)) else aaCode = string.format([[%x:inc [%x] jmp %s %x: call %x]], adressCodeCount, adressDataCount, data["parameters"], currentAddress, adressCodeCount) end autoAssemble(aaCode) sizeJmp = getInstructionSize(adressCodeCount + 6) -- PushF=2, Inc=6, Popf = 2 sizeInstructions = sizeInstructions + 6 + sizeJmp --print(string.format('Инъекция %s',line)) end end end currentAddress = currentAddress + sizeCurrentInstruction end print('Last log call at '..line) --print(string.format('Last address code from region 0x%08X',currentAddress)) print(string.format("Start region : 0x%08X, End region : 0x%08X", startAddress,endAddress)) print(string.format("Call injections : %s", countCall - maxIgnoreCalls)) print(string.format("End address from region: 0x%08X", currentAddress)) print(string.format("Scan addresses %s", endAddress - startAddress)) print(string.format("Finish time %.2f sec", os.clock() - lastClock)) print(string.format("Mem count region : 0x%08X, End region : 0x%08X", addressDataMem, addressDataMem + maxCalls * 4)) print("Injections complete!!") SetMemoryScanOptions(addressDataMem, addressDataMem + maxCalls * 4) unpause() end --LogCalls(0x00401000, 0x00645714, 400000) 3 Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 28 мая, 2015 Автор Поделиться Опубликовано 28 мая, 2015 Скрипт я изменил. Вот результаты, просто фантастика. Вот эта штука в игрушке хот маямиLogCalls(0x008CFA64, 0x00401000+0x646000, 400000)Выполнилась за 17 секунд. А это 1537436 адресов было продизассемблированно. В итоге я сейчас наблюдаю огромный кусок памяти с счетчиками функций. Ставлю игру на паузу ищу неизвестное. Отпускаю. Ищу изменилось. И вижу адреса и вижу красные бегающие цифры. Здорово )И самое классное игра нифига не тормозит, как с этим ультимапом + сканирую по правилам обычного сканера. Вообще суперВот еще логиLast log call at 00A46FFE - 00 00 - add [eax],al Start region : 0x00401000, End region : 0x00A46FFF Call injections : 270435 End address from region: 0x00A47000 Scan addresses 6578175 Finish time 107.68 sec Mem count region : 0x09560000, End region : 0x096E6A00 Injections complete!! Продизассемблировано 6578175 инструкций, сделано инъекций в call-ы 270435 начиная с адреса 0x00401000 до адреса 0x00A46FFF за 107.68 секунд. Счетчики расположились в памяти от адреса 0x09560000 до 0x096E6A00. Только вот во время сканирования CE подвисает. Надо бы придумать отдельным потоком с графической полосой... 2 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 28 мая, 2015 Поделиться Опубликовано 28 мая, 2015 (изменено) Счетчики расположились в памяти от адреса 0x09560000 до 0x096E6A00.MasterGH, у меня вопрос ты сканировал Callы по выстрелу или как-то иначе?Просто я вручную проверяю Callы. В игре похожих на нужные нам функции убийства ГГ от милишной и огневой атаки 3025 штук.Я сейчас проверяю пока только милишную атаку и на этом участке памяти 0x09560000 до 0x096E6A00 нужной функции не оказалось.Я начал проверку с адреса 0098E770 и поднимаюсь вверх. Но может дело в том, что я отключаю саму функцию и нахожусь в ней, а не по адресу вызова Calla.Все функции начинаются сpush ebp т.е. db 55. Я просто меняю на db c3:ret тем самым отключая работу кода функции.Собственно вот мой файл из блокнота, где адреса начала самих функций (нашёл их с помощью сканера сигнатур:3082 -4 - 53= 3025 - всего функций, которые нужно проверить, далее адреса начала функций (нужно для проверки push ebp (db 55) заменить retn (db c3)004011A0 -00402230 -004022F0 -004033A0 -00403460 -00403AD0 -00403DF0 -00403F40 -00403FD0 -00404170 10 -00404640 -00404820 -004049B0 -00404AE0 -00404CB0 -004056E0 -00405930 -00406020 -004065A0 -00406760 20 -004078A0 вылет00407990 -004080C0 вылет00408130 вылет004081A0 вылет00408280 вылет00408360 вылет00408450 вылет00408550 -00408790 30 -00408840 -00408A10 -004091A0 вылет004092A0 вылет 100409370 -00409530 -00409600 -00409EA0 -0040A290 -0040AA60 40 вылет 10040B5D00040BB600040C0C00040C2700040C5600040C6700040C8300040C9900040CA700040CC20 500040D3800040D5D00040DA900040DB900040DC900040E1E00040E2C00040E3200040E5C00040E710 600040EA900040EDC00040F130004106F0004107500041094000410AB0004117E00041198000411A10 7000411B900041435000414410004146100041566000415D00004164B0004165E00041677000416860 80004169F000416A7000416CD000416D7000416F60004170B0004172600041763000417F1000418010 90004189F0004191500041944000419600004196F0004198F00041995000419B0000419EC000419F50 1000041A0A00041A1700041A2900041A5D00041A7000041A8900041AB500041BAA00041BBE00041BE00 1100041C4D00041D0300041D0E00041DA200041DC30 -0041E0D00041E1600041E3900041E9300041EC60 1200041F2500041F5500041F9200041FAB00041FB700042048000420E4000421020004210D00042152000421B4000422220004222E000422480004228100042294000422AB000422CC000422D5000422F30004232E000423B5000423D5000423DF000423F70004246B0004249C00042550000425D8000425FA00042628000426470004267500042694000426D0000426FC00042722000427440004277B000427C8000427D2000427E3000427FC00042816000428290004285D000429C900042A1A00042A7000042AC600042ADD00042AEB00042B1C00042B5000042BE500042C2100042C5400042C7300042CB700042D1900042D3600042E4800042E5B00042E7100042E7D00042EB000042EC10004336D000433D6000433ED0 -004462E0004465C000446650004466E000446770004468000044689000446920004469B000446A4000446AD000446B6000446BF000446D0000446DA0004491600044933000449F800044B4D00044B6100044BA200044C9F00045107000454FD00045578000455F40004566F000456F50004572E000458070004581C000458710004588F0 -004653900046631000466FF000467BF0004690F00046920000469290004695C0 -00471CA00047418000474E600047567000475A3000476260004765A0004791400047B5000047BB900047C8700047D0D00047D550 -0049FCA00049FD300049FDC0004A1E60004A2560004A2C90004A3390004A3A90004A48E0004A4C20004A6700004A6840004A6D00004A6F10004AB0B0004AB7B0004ABEE0004AC5E0004ACCE0004ACD70004AD610004AD8E0004AE730 -004B6920004B8A30004B8BF0004BA090004BA1D0004BA2D0004BA410004BA590004BBBD0004BE100004BEF80004BF340004C1010004C1400004C2DA0004C4EE0004C52D0004C72B0004C75C0004C8320004C8FA0004CA0F0004CA450004CA5C0004CBC00004CE1F0004CE9A0004CEB40004D01E0004D10B0004D1650004D1BB0004D3520004D3AC0004D4020004D5040004D5170004D53A0004D54E0004D5E80004D5F70004D8FC0004D9390004D9740004D9990004DBD40004DBF90004DC1E0004DE620004DE9E0004DEC30004E0670004E1050004E1590004E17F0004E1BE0004E1E60004E20E0004E44B0004E4730004E49B0004E6D90004E7150004E73B0004E78F0004E7B70004E7C00004E7DB0004E8630004E88B0004E8A80004E8FA0004E91D0004E97E0004E9AD0004EA450004EA910004EAC00004EB050004EB220004EBCB0004EC000004EC520004EC9C0004ECF50004ED220004EDE10004EE1C0004EE630004EE950004EEE80004EF0C0004EF6A0004EF920004EFC90004F0150004F02C0004F3BA0004F3E70004F6930004F72F0004F89A0004F8C60004F8D50004F8EF0004F9C10004F9FE0004FAEE0004FB130004FB200004FB330004FB3C0004FB640004FB740004FC210004FC4A0004FC840004FCBE0004FCEB0004FD100004FE2800050182000501CA000502220005024A000502630005039C000503BD00050556000505790005078B000507AF0005097C000509D2000509F600050BE900050E3B00050E6D00050E8F0005100C0005102C0005105900051080000510B000051124000515B2000516000005167500051738000517BC000517CD0005180F000518B7000518DB000519B8000519D7000519FA00051A7500051A9400051AF400051B1E00051DB200051FA100051FE90005205C000520DF00052250000522A6000522FC000523FB0005243E0005246E000524F60 -0052B1E00052B6300052C0F00052C3200052CA700052D6C00052DF000052EB200052EE400052F0A00052FE80005300D00053089000530B60005312A00053445000534C90005360E0005362200053C1300053C9D00053CC500053E900005408A000540DA0005415B000541F100054490000544C3000545190005458C00054949000549EF00054A5800054AAF00054AB900054ACA00054B6100054B9D00054D2C00054D5F00054DC400054DEC00054E1F00054E4000054E66000551970005520200055214000552730005535C0005539C000553D7000556C1000557190005573A0005575500055AC300055B1B00055B3B00055EEF00055F4C000561DF00056234000562610005627600056430000564E500056577000565A3000569AC000569C800056A4500056A7800056BA400056BED00056C3800056CA100056CE800056DE80005706A00057094000570B6000570C8000570E800057126000571440005728D000572DC0005770400057712000577E2000577EB000577FE00057899000578E90005794A0005797E00057996000579A200057A3200057A5F00057A7200057B2C00057BB100057BF100057C3000057CBB00057CCC00057D0C00057D5900057DA200057DFB00057E7700057E8E00057EC600057EDB00057EF000057F1200057F2500057F4700057F840005804E0005806800058086000580EA0005812E00058137000581A4000581B9000581D9000581F50005821B0005822B00058241000583B8000583D000058430000585FB0005870F0005871C00058754000589F500058AB100058ACE00058AF400058B3F00058D1C00058D2900058DD900058DE600058DF800058E5800058E9800058EE300058F1E00058F6900058F8200058FE50005905800059071000590C70005915E0005917E000591FA000592250005925D000592D9000592F20005931D00059326000593A7000594190005948B000594A4000594C800059551000595CE0005964900059658000596E6000597AB000597B8000597C8000598560005993400059998000599BD00059A2000059A4D00059AB000059B1A00059B4800059BA700059BCC00059C3B00059C6F00059CA000059CC600059D2500059D4900059DB000059E1900059E3900059ECF00059F0C00059F5F00059FE30005A0330005A09A0005A11E0005A1300005A1990005A1C00005A1CD0005A1F40005A2380005A39F0005A3AC0005A6910005A69F0005A6AD0005A6B60005A6CE0005A9520005A9600005A9720005A9C80005ACF40005AD060005ADFA0005AEEF0005B1430005B2180005B30D0005B55F0005B6270005B70C0005B96F0005B97D0005B9DF0005BA050005BA270005BA5A0005BA880005BA9F0005BAC50005BC7C0005BE860005C0FF0005C3CB0005C4090005C64A0005C6990005C9060005C9450005C9BD0005C9F40005CED40005CFD90005D1700005D32F0005D6D70005D6FE0005D7B10005D85A0 -005E0540005E0790005E0D20005E1150005E5AE0005E5D20005E6200005E63A0005E7BF0005E8C50005E9290005EBF30005EC0E0005ECA90005ECCB0005ECF10005EE690005EF3D0005EF5D0005F27C0005F2CB0005F5800005F7E50005F7F30005F80A0005FABE0005FE4C000602F6000605BE000605D6000605EE000605FC0006060A000606180006062C00060688000607B800060A8D00060AB000060F0E00060FAF000610500006105E0006107A000610CD0006110F00061141000611830006132A00061376000613C70006142D000615E0000615FA0006161A000616300006164600061699000617CA000617D5000618BF000618F0000619D200061AB400061AE100061AF700061C0A00061CD200061DD600061E8B00061ED600061EEC00061FCE00062080000620C7000620DC000621BD0006222C00062275000623EE0006243E000625B1000625EF00062768000627A8000627BE0006288F000629470006298E00062AC800062AF100062C3400062DC100062E0800062F53000630CE0006311D000633B30006352C00063677000636C4000638790006389E00063ACA00063D1400063F5D000642810006429E000642EF00064311000643300006438B000643F7000645CF00064680000646A9000647C7000648030006483700064852000649910006499C00064DA700064E1000064EE400064EEE0006502400065053000650FC0006514B0006518F000651A6000651C4000651F50006522F0006539F000653AF000653E8000654030006568B0006583300065886000658CF00065BB700065D7400065D9F00065DCE00065F4400065F9300065F9E00065FA900065FB400065FBF00065FCA00065FD500065FE000066004000660510006608F0006609A000660A5000660D3000660DE0006610D00066118000661210006612C0006613700066145000662510006626200066270000662EE000662FC0006637A000663880006641E00066503000665660006659E000665C80006666700066681000666CC000666F100066718000667280006674D0006676400066773000667A4000667B3000667DA000667EA000668B2000669CB00066A1500066CE100066D0B00066DAD00066DBD00066FD5000670BD000670DB00067160000671D7000672510006728C000672C0000672E60006752A0006765400067888000678AE00067AF900067B4500067B9000067CDF00067F7500067F8300067FCF00068110000683A6000683E9000683F60006842B0006844800068474000684EC00068833000688660006890700068A2A00068AB800068BAD00068BE000068C6000068C7100068CD500068D0000068D1500068D6D00068DAB00068DB600068DC600068E0900068E1D00068E4700068E5400068F3100068F3D00068FCF00068FF100069085000690A2000690B6000690C7000691F800069217000692390006926800069287000692A300069381000693BE000693D50006944000069449000694580006946700069ABC00069C1000069C2400069C4F00069CC100069E5D0006A1610006A1750006A5B70006A9330006AC430006AC540006AC620006AE5E0006AED30006AF020006AF1B0006AF260006B3910006B3C40006B64F0006B6D10006B6DD0006B6F80006B7270006B7420006B9670006B9860006BB3E0006BD040006BD250006BD4C0006BD5C0006BD690006C0BF0006C1680006C2380006C2480006C2940006C38A0006C3FC0006C4CB0006C5140006C55D0006C5B70006C5C90006C5EB0006C6350006C85C0006C8F90006CA800006CB4F0006CB5B0006CB9D0006CC1A0006CC2A0006CCB10006CCE30006CDC90006CE500006CE670006CFA10006CFC20006D0430006D0E60006D12A0006D4A90006D88B0006D8E50006D90F0006DBAB0006DBD40006DC010006DC290006DC3A0006DC500006DC7C0006DCAD0006DCDA0006DD160006DEE30006DFB70006E11E0006E1400006E14C0006E1940006E19F0006E1B30006E2020006E2C10006E3DF0006E4DA0006E5040006E7550006E79E0006E7EF0006E8450006E8C90006E8EE0006E9470006E9EB0006EBA80006EBC10006EBE80006EC590006EC9A0006ECE70006ECF20006ED130006ED590006ED6D0006EDD70006EDE70006EE240006EE960006EEB10006EFE80006F01D0006F2410006F2540006F2A60006F2D20006F2FB0006F3250006F4A30006F4AC0006F4BD0006F4DE0006F60B0006F74E0006F7570006F97C0006F9890006F9960006F9A30006F9B00006F9BE0006F9CC0006F9DA0006F9E80006F9F50006FA090006FA140006FA200006FA750006FB200006FB300007004A00070059000700850007008E00070097000700A0000700A9000700B2000700BC000700C6000700E10007010E0007012A00070133000702BE000702E1000702FA000703110007032A000703430007035C000703750007038E000703A7000703C0000703D9000703F20007040B000704240007043D000704560007047400070498000704B5000705320007054C00070568000705880007059F000705B6000706030007062C00070666000706B9000706F900070711000707170007076A00070791000707A7000707C3000707E9000708140007082A000708480007085E000708DF000708EA000709090007092D00070947000709630007098F000709A5000709C9000709DF000709FB00070A1200070A2900070A4000070A5900070A7900070A9100070A9800070ABE00070AE100070B1900070B3100070B4900070B6300070B6A00070B9500070BBE00070BDD00070BE900070C0500070C1F00070C3900070C5B00070C7900070C7B0007198400071A5D00071DFF00071E9400071FE800072071000722680007232D0007235A0 - ГГ не стреляет007331E0007375E0007385E00073B8400073D7C000741C5000743EB000745F200074823000748350 -00759220007599800075A0900075BD500075E3E00075E9400075EC0000760B80007620900076519000767FB00076AA400076B2900076BCE00076BF700076C6400076D3200076DB100076DDB00076E7E00076EA9000770510007707B0007716E0007723900077310000773390007741D000775030007752F000775E60007761A000776B90007772C000777B1000777DB000778CC000778F5000779D700077A2100077A6600077AAB00077AFB00077B4C00077B7400077C1300077CCB00077D0000077D2200077D8300077DD900077E2F00077E6600077EB900077F0C00077F4200077FF2000780E60007835700078557000786700007871E00078A0D00078A4700078A7800078A9300078B9C00078C1800078C4200078F720 -007CB840 -007F8540007F95E0007F9910007F9EE0007FA1E0007FA8B0007FAE90007FB6A0007FB830007FB9B0007FC350007FC6B0007FD200007FD410007FD5E0007FDA00007FDE50007FE2A0007FE780007FF2C0007FFBC0007FFEE000800250008018D000801DD000802E3000805D70008061C0008063D0008067D000806BF00080702000807340008077B000807C8000807E80008080F00080AF600080B7900080BBB00080C1200080C5C00080CDF00080E470008101A00081080000810B5000810DF0008111900081248000812C7000812DC000812F90008130E00081323000813380008134D000813620008137F00081394000815BD000816B700081A3800081D34000822B40008252E000826020008272F00082747000827550008276E000828490008286E00082893000828CC0008291B0008293C00082962000829FD00082A9800082AED00082B2700082BAA00082BBE00082C1B00082CE000082DC800082E8900082F0100082FF2000830AD0008313100083149000831BB000831C9000831DD000831FC000832A5000833920008341700083700000839AB00083B7F00083BDD00083BF700083C1200083C5400083C8B00083CB300083D0500083D7E00083DB500083DE600083E2500083E8600083ED800083F2600083F5000083F8300083FB700083FE10008400B000840340008405F0008408D000840BB00084106000841B200084280000842DF0008433300084366000843FA000844D6000844FA0008451E0008452E00084663000846810008469F000846E1000846F30008470B0008471E000847790008482D00084838000848420008484C00084856000848600008486A0008487400084881000848B1000848D8000848EB0008494400084955000849C9000849FE00084A4300084A7800084A8900084AA400084AC800084B9C00084BCC00084D1600084E5300084F46000850C2000850DA0008541E0008543000085448000854520008545C0008552A000855EE0008561A0008566600085674000856A0000856C100085708000857470008578100085797000857AD000857D5000857ED000858060008581F0008583A00085855000858D200085990000859E700085A640 -008A1730008A1820008A4440008A4750008A5660008A5700008A57F0008A7860008B0240008B0310008B0700008B0EE0008B0FE0008B10E0008B1400008B1550008B1810008B1D50008B1ED0008B2210008B45E0008B46C0008B47D0008B48E0008B4A60008B4C10008B4CF0008B4E80008B5220008B5310008B5400008B54F0008B55E0008B56D0008B57C0008B59B0008B5D60008B6160008B6410008B6820008B6A50008B6C80008B7200008B7670008B7CE0008B7FF0008B8060008B8260008B84A0008B8530008B8F30008B93D0008B95C0008B97F0008B9960008B9A80008B9C10008B9E30008BA720008BB620008BBF60008BC270008BC360008BD4E0008BD6E0008BDB90008BDCF0008BDE70008BE680008BE830008BE970008BEAE0008BED10008BEDE0008BF0A0008BF150008BF240008BF390008BF8A0008BF9F0008BFBD0008BFD60008BFDF0008C01F0008C02D0008C0340008C0610008C0860008C0AE0008C0C20008C0F50008C1040008C12A0008C14E0008C1650008C1740008C1880008C1960008C2A70008C2FF0008C32D0008C33C0008C34B0008C35A0008C3690008C3780008C3870008C3960008C3A50008C3B50008C3C40008C3D30008C3E20008C3F10008C4000008C40F0008C41E0008C42D0008C43C0008C44B0008C45A0008C46A0008C47A0008C48A0008C4A00008C4B60008C4C20008C4D50008C4E80008C4FB0008C50E0008C5210008C5340008C5470008C55A0008C56D0008C5800008C5930008C5A60008C5B90008C5CC0008C5DF0008C5F20008C6050008C6180008C6210008C64C0008C7350008C7A60008C7F60008C8030008C8100008C81D0008C82A0008C8380008C8460008C8540008C8690008C8770008C8850008C89A0008C8AF0008C8BD0008C8D20008C8E00008C8EE0008C9060008CA2C0008CABB0008CACC0008CB030008CB2D0008CB440008CBC70008CBD50008CBE70008CBFD0008CC120008CC200008CC490008CC600008CCB40008CCCB0008CCD80008CCE20008CCF70008CD030008CD120008CD5E0008CD920008CDB20008CE430008CE490008CF120008CF2D0008CF480008CF9C0008CFA80008CFD10008D0120008D0200008D04B0008D0510008D0630008D0740008D0DF0008D1000008D17D0008D1900008D20F0008D2650008D2890008D2AA0008D2C70008D2EE0008D3040008D3150008D31B0008D35B0008D36F0008D37F0008D4670008D46E0008D4960008D4A70008D5120008D5370008D7130008D7190008D94B0008D9A00008D9EA0008D9FC0008DA6D0008DA840008DA9A0008DAB00008DB7D0008DB910008DBA10008DBB10008DBBE0008DBCB0008DC7B0008DC8F0008DCC90008DD780008DDD40008DE490008DE990008DECE0008DED40008DEDA0008DEE00008DF1E0008DF2E0008DF4E0008DF740008DF9A0008DFBF0008DFCC0008DFDA0008DFEA0008E0030008E01F0008E0440008E0AE0008E0C10008E0D40008E0E70008E0FA0008E11B0008E1310008E13D0008E1540008E1780008E1950008E1B20008E1BF0008E1F90008E25E0008E26D0008E27B0008E2870008E2960008E2A40008E2B00008E2BF0008E2CD0008E2D90008E2E80008E2F60008E3020008E30B0008E3140008E31D0008E3330008E33C0008E3450008E34E0008E3570008E3600008E3690008E3720008E37B0008E3A80008E3B60008E3C40008E3D20008E3E80008E4030008E4130008E4230008E4330008E45E0008E50C0008E5150008E51D0008E55E0008E56E0008E57B0008E58A0008E5990008E5E50008E5EF0008E5FD0008E63E0008E6460008E65F0008E6EC0008E6F40008E7150008E7380008E7410008E74A0008E75D0008E7690008E7750008E7820008E7950008E7A10008E7AD0008E7BA0008E7CF0008E7D40008E7F20008E8010008E80F0008E81B0008E82A0008E8380008E8440008E84D0008E8580008E8780008E8810008E88A0008E8930008E8BC0008E8CA0008E8DC0008E8EB0008E8F90008E9050008E9140008E92E0008E9480008E9510008E9650008E9750008E98C0008EB240008EB2D0008EB870008EDE70008EDF40008EE000008EE180008EE7D0 вылет008EEBF0008EEE40008EF1B0008EFAD0008EFB40008EFF20008F02D0008F0370008F0410008F0800008F08F0008F09E0008F1280008F1330008F13E0008F1690008F1A70008F1B00008F1E00008F1EB0008F1FA0008F2080008F2140008F2210008F2340008F23D0008F2460008F2550008F2630008F26F0008F2780008F2A10008F2AF0008F2B80008F2C30008F2E60008F2FF0008F30E0008F31C0008F3280008F33C0008F3450008F3570008F36D0008F3D50008F4160008F4250008F4830008F48D0008F4970008F5050008F5430008F54D0008F58F0008F5D90008F5F50008F5FF0008F6230008F6300008F63F0008F64D0008F6590008F6650008F66E0008F6770008F6860008F6940008F6A00008F6B20008F6C00008F6C90008F6D20008F6E10008F6EF0008F6FB0008F70F0008F71D0008F7260008F73A0008F7480008F7B00008F85E0008F8D90008F8E30008F8ED0008F8FA0008F9260008F9580008F9BD0008F9FF0008FA040008FA240008FA860008FAA60008FAAF0008FAB70008FAC30008FAD10008FAD90008FAE40008FAF30008FB010008FB0D0008FB1C0008FB2A0008FB360008FB3F0008FB4B0008FB530008FB5C0008FB650008FB6E0008FB890008FB970008FBC20008FC980008FCAD0008FCFD0008FD330008FD5E0008FD6D0008FD7B0008FD870008FD900008FD990008FDAB0008FDBB0008FDE80008FE1A0008FE210008FE300008FE500008FE5A0008FE640008FE770008FE810008FE9E0008FEBE0008FEFF0008FF1F0008FF530008FF670008FF760008FF840008FF900008FF990008FFA20008FFAB0008FFBA0008FFC80008FFD40008FFE30008FFF10008FFFD000900060009001C0009002A00090033000900420009004B0009006F0009007D00090091000900AD000900CF000900ED000900FC0009010A0009011600090130000901390009014E0009015E00090202000902080009021000090216000902CC000902FF0009032500090360000903D9000904290009049B000904F50009052B0 -00905B5000905C20009064B00090752000907A9000907FA0009082800090836000908400009085E000908BB000908F1000909700009097800090AAD00090AD100090ADD00090AF500090BAE00090BFA00090C2100090C3000090C3F00090CB600090CE200090D0E00090D4400090E3700090E3E00090E4500090E4C00090E9B00090ED300090EDB00090EF000090F1100090F2400090F5F00090F6A00090F7900090F8700090F9300090FA000090FA900090FBB00090FCF0009100C0009102C000910440009108A000910B0000910BF000910CD000910D9000910E2000910EB000910FD0009110D0009112E0009113D0009118A000911AD000911E8000911F00009121100091220000912680009128F0009132D0009133D00091385000913BA0009142C000914B3000914BD000914CE000914E00009154C00091555000915630009158300091592000915A0000915AC000915B5000915BE000915D0000915E00009163400091651000916590009167A0009173B0009176D0009177B0009178F000918240009186800091870000918780009188000091B7100091B9200091B9900091BA000091BB300091BBD00091BC700091BD100091BDB00091BE500091BF600091C6300091C7200091C8500091C9400091C9E00091CA800091D2D00091D8600091DA600091DC600091E0200091E1100091E1F00091E2B00091E3A00091E4800091E5400091E6300091E7100091E7D00091E8600091E8F00091E9800091EA100091EAA00091EB300091EBC00091EC500091EE900091EF700091F0500091F1900091F2900091F3900091F7100091F7800091FA400091FB100091FEF00091FF60009201D0009202A000920650009206C000920A1000920CE000921210009215B00092175000921B2000921DC000921EC0009220C0009221B00092229000922350009223E00092247000922590009226F000922E00009236F000923870009246300092493000924B8000924BF0 вылет0092552000925B7000925C0000925C8000925D0000925D8000926A4000926B8000926D7000926E1000926EC000926F600092700000927450009276500092785000927A5000927C5000927F8000928070009281500092821000928300009283E0009284A00092859000928670009287300092882000928900009289C000928AB000928B9000928C5000928CE000928D7000928E0000928E9000928F2000928FB000929040009290D000929160009291F00092928000929310009293A00092943000929790009298700092995000929A3000929B1000929C900092A3100092A4700092A6E00092A8E00092AC700092AE700092AF600092B0400092B1000092B1900092B2200092B3400092B4400092B8F00092BCE00092BD800092C1D00092C3400092C5400092C7400092C8300092C9100092C9D00092CAC00092CBA00092CC600092CCF00092CD800092CE100092CEA00092CF300092D0E00092D1C00092D2E00092D8400092DAA00092DB400092E0800092E4600092E6600092E7500092E8300092E8F00092E9800092EA100092EB300092EC100092ED000092EDE00092EEA00092EF500092EFE00092F0700092F2C00092F4B0009303B0009304300093055000930EE00093154000931CE000931FA0009321C0009354A00093556000935D9000935E6000935F3000936000009360D0009361A0009362700093634000936410009364E0009365B0009366800093675000936820009368F0009369C000936A9000936B6000936C3000936D0000936DD000936EA000936F700093704000937110009371E0009372B0009373800093745000937520009375F0009376C000937790009378600093793000937A0000937AD000937BA000937C7000937D4000937E1000937EE000937FB0009380800093815000938220009382F0009383C000938490009385600093863000938700009387D0009388A00093897000938A4000938B1000938BE000938CB000938D8000938E5000938F2000938FF0009390C000939190009392600093933000939400009394D0009395A0009396700093974000939810009398E0009399B000939A8000939B5000939C2000939CF000939DC000939E9000939F600093A0300093A1000093A1D00093A2A00093A3700093A4400093A5100093A5E00093A6B00093A7800093A8500093A9200093A9F00093AAC00093AB900093AC600093AD300093AE000093AED00093AFA00093B0700093B1400093B2100093B2E00093B3B00093B4800093B5500093B6200093B6F00093B7C00093B8900093B9600093BA300093BB000093BBD00093BCA00093BD700093BE400093BF100093BFE00093C0B00093C1800093C2500093C3200093C3F00093C4C00093C5900093C6600093C7300093C8000093C8D00093C9A00093CA700093CB400093CC100093CCE00093CDB00093CE800093CF500093D0200093D0F00093D1C00093DAF00093DC00 -0093E2C00093E5500093E5F00093E9500093EB500093EC400093ED200093EDE00093EE700093EF000093F0200093F1200093F4D00093F8200093FA300093FB200093FC000093FCC00093FD500093FDE00093FF0000940030009401B00094047000941960 -00941E2000942630009432C000943390009434F000943630009436D0009438C000943D3000943E30009440300094412000944200009442C000944350009443E0009445000094460000944A7000944DB000944F600094508000945250009454600094555000945630009456F000945780009458100094593000945A3000945DA000946110009461B00094689000946C9000946D3000946E60009471000094729000947330009476900094795000947BA000947C9000947D7000947E3000947F6000947FF000948080009481700094825000948310009484E0009485C00094865000948790009488E000948DF000949240009494F000949700009497F0009498D00094999000949A2000949AB000949BD000949D0000949F500094A7D00094A8700094A9400094B9400094B9F00094BC100094BCE00094BF800094C0E00094C3E00094C4E00094C6100094C720 500094C9E00094CAB00094CE500094CF400094D0200094D0E00094D1900094D2200094D2B00094D3A0 400094D4800094D5400094D6600094D7400094D7D00094D9100094D9F00094DDA00094E3A00094FCA0 300094FE500094FF000095008000950630009507D0009508A000950AB0009510B0009512B0009514B0 20009515A00095169000951770009518300095192000951A0000951AC000951B5000951BE000951C70 1000951D0000951D9000951F400095202000952140009527F0009528C00095299000952A3000952CE0 50 -00952E50 -00953100 -00953300 -00953500 -00953700 -009537F0 -009538D0 -00953990 -00953A80 -00953B60 40 -00953C20 -00953D10 -00953DF0 -00953EB0 -00953F40 -00953FD0 -009540D0 -00954240 -009542D0 -00954360 30 -009543F0 -00954480 -00954510 -00954760 -00954840 -00954920 -00954A60 -00954EC0 -00955120 -009566D0 20 -00956760 -00957E80 -00958150 -00958350 -00958440 -00958520 -009585E0 -00958670 -00958700 -00958820 10 -00958920 -009592F0 -009593E0 -00959550 -009595F0 -00959970 -00959E80 -00959F20 -00959FF0 -0095A6F0 50 -0095B510 -0095B600 -0095B830 -0095BD10 -0095BEC0 -0095BFF0 -0095C1F0 -0095C2E0 -0095C3C0 -0095C480 40 -0095C570 -0095C650 -0095C710 -0095C7A0 -0095C870 -0095C900 -0095C990 -0095CA20 -0095CBD0 -0095CCB0 30 -0095CD90 -0095CE80 -0095CF60 -0095D020 -0095D0B0 -0095D1D0 -0095D260 -0095D300 -0095D560 -0095D670 20 -0095E290 -0095E470 -0095E680 -0095E700 -0095E7F0 -0095E8D0 -0095E990 -0095EA20 -0095EAB0 -0095EBD0 10 -0095ED00 -0095F120 -0095F330 -0095F650 -0095F8D0 -0095FAB0 -0095FEB0 -009602A0 -009607A0 -00960840 80 -00960B70 -00960D90 -00960F50 -00961200 -009614C0 -00961560 -00961840 -00961AB0 -009620C0 -00962570 70 -00962780 -00962E90 -00963480 -009643E0 -00965150 -009655F0 -00965C10 -00966980 -00966A40 -00966B60 60 -00966FD0 -00967160 -009672E0 -00967850 -009678F0 -009685D0 -00968A90 -00969120 -00969530 -00969680 50 -00969750 -0096AC30 -0096ACC0 -0096AE50 -0096D6B0 -0096D820 -0096D900 -0096D9E0 -0096DA80 -0096DB20 40 -0096DC00 -0096E070 -0096E280 -0096E550 -0096E7C0 -0096ECE0 -0096ED60 -0096EDE0 -0096F4C0 -0096F540 30 -0096F630 -0096F710 -0096F7D0 -0096F8C0 -0096F9A0 -0096FA60 -0096FAF0 -0096FBB0 -0096FED0 -0096FF60 20 -0096FFF0 -00970080 -00970120 -00970260 -009706D0 -009707B0 -00970D50 -00971030 -009712D0 -00971530 10 -00971790 -00971A20 -00971C80 -0098DFF0 -0098E060 -0098E0C0 -0098E480 -0098E700 -0098E770 -00A1D4C000A27F1000A27FC000A2808000A2814000A281F000A282E000A283A000A2849000A2855000A2861000A286D000A2879000A2885000A2891000A289D000A28A9000A28B5000A28C1000A28CD000A28D9000A28E4000A28F0000A2963000A296F000A297B000A2987000A2993000A29CB000A29D7000A29E3000A2A0B000A2A17000A2A23000A2A2F000A2A3B000A2A47000A2A56000A2A62000A2A6E000A2A7A000A2AE9000A2B0B000A2B17000A2B23000A2B31000A2B3E000A2B4A000A2B56000A2B62000A2B6E000A2B83000A2B8F000A2B9B000A2BAA000A2BB6000A2BC2000A2BCE000A2BDD000A2BE9000A2BF5000A2C01000A2C0D000A2C19000A2C25000A2C31000A2C3D000A2C49000A2C55000A2C61000A2C6D000A2C79000A2C85000A2C91000A2C9D000A2CA9000A2CB5000A2CC4000A2CD0000A2CDC000A2CE8000A2CF4000A2D00000A2D0C000A2D18000A2D24000A2D30000A2D3C000A2D48000A2D57000A2D75000A2D81000A2D8D000A2D99000A2DA4000A2DB0000A2DBC000A2DC8000A2DD4000A2DE0000A2DEC000A2DF8000A2E04000A2E11000A2E1D000A2E29000A2E35000A2E47000A2E88000A2E94000A2EA0000A2EAC000A2EB8000A2EC4000A2ED0000A2EDC000A2EE8000A2EF4000A2F00000A2F0C000A2F18000A2F23000A2F3A000A2F46000A2F52000A2F5E000A2F6A000A2F76000A2F82000A2FA7000A3009000A3015000A3021000A302D000A3039000A3045000A3051000A305D000A306A000A3076000A3082000A308E000A309A000A30BD000A30C9000A30DB000A30E9000A30F5000A3100000A310C000A3118000A3124000A3130000A313C000A3148000A3154000A31600 20 -00A316C0 -00A31780 -00A31840 -00A31900 -00A319C0 -00A31A80 -00A31B40 -00A31C00 -00A31CC0 -00A31D80 10 -00A31E40 -00A31F00 -00A31FC0 -00A32080 -00A34DB0 -00A34E90 -00A3A180 -00A3A230 -00A408E0 - - это проверенная функция по милишной атаке, ну вылет - это вылет из игры. ЗЫ: вручную конечно долго и нудно (но другого варианта не придумал ), так что проверяю в день адресов по 100. Изменено 28 мая, 2015 пользователем Garik66 Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 28 мая, 2015 Автор Поделиться Опубликовано 28 мая, 2015 >> у меня вопрос ты сканировал Callы по выстрелу или как-то иначе? Ищу call-ы от милишной атаки. В данный момент ничего не ломаю и занимаюсь багами и вылетами. Я законтролил одну инструкцию при крахе игры через Олли, там сразуcall адрес2cmp .... // тут сразу сравнение, а флаг-то из-за inc[...] меняетсяjge ... // тут прыг Похоже надо делать pushfinc [адрес1]popfjmp адрес2 Флаги надо будет попробовать сохранить и восстановить после inc. Но меня так в сон клонит, что сегодня ничего делать не буду. Сейчас отключусь и спать. Я некоторые call-ы находил интересные, но это все не то. Если у меня будут результаты по Майями, то я отпишусь. Пока результатов нет. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 28 мая, 2015 Поделиться Опубликовано 28 мая, 2015 У меня тоже пару интересных функций находилось, но тоже не то.Мой способ (правда его даже способом назвать нельзя) перебора, можно было автоматизировать частично, если бы знал LUA, но к сожалению не знаю. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 29 мая, 2015 Автор Поделиться Опубликовано 29 мая, 2015 1. Исправлен скрипт, чуть-чуть быстрее 2. В скрипте добавлена новая функция LogCallsWithIgnoreCalls(startAddress, endAddress, maxCalls, maxIgnoreCalls) startAddress - начало поиска call-овendAddress - конец поискаmaxCalls - масимальное количество call-овmaxIgnoreCalls - пропуск кол-ва первых call-ов 2. Ошибок не будет, если указывать регион кода до секции .text LogCalls(0x00401000, 0x00645714, 400000) Я когда не знал, то переправил какие-то таблицы указателей на функций и естественно игра вылетала. Раньше я писал по размеру регионаLogCalls(0x00401000, 0x00401000 + 0x00646000, 400000)Так как ассемблировались таблицы указателей и прочие данные, а не код, то игра маями вылетала. А сейчас все в шоколаде. ------------Еще некоторые ограничения на работу со скриптом 1. Функции, которые меняют call-ы разовые на один промежуток памяти. Т.е. на один запуск игры и на один запуск CE. Если что-то пошло не так, то придется перезапустить игру и CE 2. Неудобно брать отдельные промежутки памяти для *.exe и *.dll, т.е. не удобно использовать LogCalls с разными промежутками, т.к. придется сканировать промежутки отдельно через сканер памяти, а это точно фигня. Поэтому надо бы подумать над универсальным способом, через одну кнопку. Собрать скопом все промежутки кода в таблицу и отправить в функцию на подмену call-ов c логированием их счетчика. 3. CE как я уже писал немного подвисает, надо бы придумать статус-окно с визуализацией. Такие дела...можно было автоматизировать частичноТвой способ автоматизировать сложно, т.к. игра вылетает, когда функция не выполняется. Надо юзать обработку исключения через Lua скрипты, чтобы игра не вылетала и восстанавливать код, который привел к вылету. Я пока не умею делать инъекции кода с обработкой исключительных ситуаций. Далее, твои функции явно не все, а только некоторые. Так что не факт, что ты найдешь. Еще один момент, call-ы даже если все переправишь и перепроверишь, то можешь не добиться никакого результата. Дело в том, что call может просчитывать внутри условия нанесения урона главному герою. Если этот call не выполнять, то например будет вылет из игры. Т.е. ты не можешь его не выполнять и просто его пропускать. Его возможно потребуется исследовать.Как выходить на оригинальные инструкции, когда нашли подходящий счетчик call в сканере памяти?Нам надо в первую очередь значительно уменьшить кол-во call-ов, которые срабатывают когда здоровье героя закончилось. Это можно сделать логирую счетчики call-ов, использовать сканер памяти. Затем ставим брейкпоинт на адрес счетчика и выходим на инструкцию, которая записала счетчик. Сморим стек по ESP там адрес call, с которого прыгнули. Если на него перейти, то выйдем на инструкцию, которая прыгала на запись счетчика call. Таким образом выходим на оригинальный call. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 6 июня, 2015 Автор Поделиться Опубликовано 6 июня, 2015 Считаем call-ы из файла построенного IDA 1. Ищем в сети IDA и смотрим, что это такое 2. Кидаем файл игры на IDA 3. После завершения дизассемблирования ищем все call-ы через главное меню 4. После завершения поиска call-ов в окне результатов через контекстное меню копируем результаты в буфер обмена. Надо подождать завершения, т.к. это может быть долгим процессом (на секунд 10) 5. Открываем стандартный блокнотик и вставлем текст и тоже ждем 6. В списке адреса должны быть из секции ".text", а внизу обычно другие секции. Их удаляем. 7. Ощищаем ".text" через поиск замена, чтобы новая строка начиналась с адреса вызова call и получаем список типа этого Скрытый текст Полная версия ХотМаями.rar 8. Запускаем процесс игры 9. Аттачим CE 10. Выполняем скрипт и функцию в моем случае это Скрытый текст 11. Ждем выполнения скрипта, у меня заняло 61 секунду. Никаких вылетов быть не должно, но кто знает. Если они есть, то убирите экспериментально call-ы из файла. Итак мы дождались, игра началась, а в CE в главном окне появился новый промежуток сканирования адресов. 12. Делаем любые действия в игре и ищем счетчики call-ов. Если call выполнился, то счетчик увеличился в пределах 4 байт. Если ищем одно действие, то выбираем "правило увеличилось на" и значение "на 1". Так получаем список call-ов. 13. Добавляем адреса счетчиков в главную таблицу и берем любой. Ставим брейкпоинт на запись. 14. Делаем действие в игре. Смотрим инструкцию. 15. На инструкции двойной клик. Смотрим диалог инструкции и регистров 16. Нажимаем кнопку S и смотрим диалог стека. По верхнему адресу двойной клик и переходим на call, который прыгнет на увеличение счетчика. Таким образом нашли call, который увеличивался столько раз сколько мы делали действий в игре или наблюдали. Теперь мы сравниваем структуры стеков. 17. В окне стека вызваем контестное меню и пункт расструктуризации. Делаем расструктуризацию. 18. Делаем несколько раз с разными действиями в игре с пункта 12-17 и сравниваем структуры стека. Ищем различия или одинаковые данные по группам. Ищем данные или ищием адреса на код хранящиеся в стеке. Они могут менять EIP/RIP по ret одинаково или не одинаково, когда действия в игре отличались. Т.е. так мы можем определить на каком участке ветви кода заострить внимание. Если все сложно и месево данных, то идем на пункт 19. 19. Ставим трейс лог с выходом по вверх (по ретам) примерно на 10 тыс инструкций. Сворачиваем главное окно CE (именно сворачиваем окно), чтобы трейс быстро прошел. Получаем иерархию ветки кода из глубины вверх. 20. Ставим сверху в глубь на каждом call-е бряк "на выполнение кода" до тех пор пока игра перестанет прерываться, когда мы в ней ничего не делаем. 21. Итак остался бряк, когда мы что-то делаем в игре. Снимаем его, не отпуская при этом игру. Делаем трейс лог теперь уже вглубь со снятием стека и сравнением по EIP или RIP до адреса, который увеличивал счетчик. Например EIP==0x00410000. Мы сняли стек для одного действия. 22. Делаем еще раз пункт 21, но уже с другим действием. Итак мы теперь имеем два трейслога со стеком вглубь. Теперь исследуем два трейслога поднимаясь по нему по логированным инструкциям в окне трейслога и смотрим из этого же лога как менялся стек и смотрим на сравнения стеков наших структур от начала путешествия из глубины вверх. В частности за ebp(rbp) и esp(rsp). Теперь на руках имеем очень много данных, которые могут помочь понять почему ветка кода выполнялась по разному и как она связана со стеком и действиями в игре. К сожалению, на практике нечего показать, пам ковыряюсь. Пока на этом все. 004010A3 call ??3@YAXPAX@Z ; operator delete(void *) 0040127B call sub_973781 004012E3 call sub_403730 00401333 call sub_403730 00401383 call sub_403730 004013E0 call sub_973781 00401558 call edi ; sscanf 004015C8 call edi ; sscanf 00401618 call sub_403730 00401620 call sub_403710 004017B7 call sub_403730 004017E0 call sub_973781.... Скрытый текст allocMememoryCount = 0 sizeInstructions = 0-- Устанавливает регион сканирования в главную форму CE function SetMemoryScanOptions(startAddress, endAddress) local mainFrm = getMainForm() mainFrm.FromAddress.Lines.Text = string.format('%X', startAddress) mainFrm.ToAddress.Lines.Text = string.format('%X', endAddress)endfunction AllocMemory(maxCalls) allocMememoryCount = allocMememoryCount + 1 strNameCode = 'MemoCallCount'..allocMememoryCount strNameData = 'MemoDataCount'..allocMememoryCount autoAssemble(string.format([[alloc(%s,%s)registersymbol(%s)]],strNameCode,maxCalls * 200,strNameCode)) autoAssemble(string.format([[alloc(%s,%s)registersymbol(%s)]],strNameData,maxCalls * 4,strNameData)) adressCodeMem = getAddress(strNameCode) addressDataMem = getAddress(strNameData) return adressCodeMem, addressDataMem end function LogCallsFromFile(strFullPathToCallList) pause() lastClock = os.clock() sl = createStringlist() sl.loadFromFile(strFullPathToCallList) maxCalls = sl.Count countCall = maxCalls - 1 disassembler = getDefaultDisassembler() adressCodeMem, addressDataMem = AllocMemory(maxCalls) for i=0,countCall do currentAddress = getAddress(string.sub(sl,1,8)) line = disassembler.disassemble(currentAddress) local data = disassembler.getLastDisassembleData() sizeCurrentInstruction = getInstructionSize(currentAddress) if(data["isCall"]) then if(sizeCurrentInstruction < 5) then --print(string.format('Пропущенна инструкция %s',line)) else adressCodeCount = adressCodeMem + sizeInstructions adressDataCount = i*4 + addressDataMem if(sizeCurrentInstruction > 5) then --print(line) aaCode = string.format([[%x:inc [%x]jmp %s%x:call %xdb%s]], adressCodeCount, adressDataCount, data["parameters"], currentAddress, adressCodeCount, string.rep(' 90', sizeCurrentInstruction - 5)) else aaCode = string.format([[%x:inc [%x]jmp %s%x:call %x]], adressCodeCount, adressDataCount, data["parameters"], currentAddress, adressCodeCount) end autoAssemble(aaCode) sizeJmp = getInstructionSize(adressCodeCount + 6) -- PushF=2, Inc=6, Popf = 2 sizeInstructions = sizeInstructions + 6 + sizeJmp --countCall = countCall + 1 --print(string.format('Инъекция %s',line)) end end end print('Last log call at '..line) --print(string.format('Last address code from region 0x%08X',currentAddress)) --print(string.format("Start region : 0x%08X, End region : 0x%08X", startAddress,endAddress)) print(string.format("Call injections : %s", maxCalls)) print(string.format("End address from region: 0x%08X", currentAddress)) --print(string.format("Scan addresses %s", endAddress - startAddress)) print(string.format("Finish time %.2f sec", os.clock() - lastClock)) print(string.format("Mem count region : 0x%08X, End region : 0x%08X", addressDataMem, addressDataMem + maxCalls * 4)) print("Injections complete!!") SetMemoryScanOptions(addressDataMem, addressDataMem + maxCalls * 4) sl.destroy() unpause() end function LogCalls(startAddress, endAddress, maxCalls) pause() lastClock = os.clock() currentAddress = startAddress disassembler = getDefaultDisassembler() adressCodeMem, addressDataMem = AllocMemory(maxCalls) countCall = 0 while currentAddress < endAddress and countCall < maxCalls do line = disassembler.disassemble(currentAddress) local data = disassembler.getLastDisassembleData() sizeCurrentInstruction = getInstructionSize(currentAddress) if(data["isCall"]) then if(sizeCurrentInstruction < 5) then --print(string.format('Пропущенна инструкция %s',line)) else adressCodeCount = adressCodeMem + sizeInstructions adressDataCount = countCall*4 + addressDataMem if(sizeCurrentInstruction > 5) then --print(line) aaCode = string.format([[%x:inc [%x]jmp %s%x:call %xdb%s]], adressCodeCount, adressDataCount, data["parameters"], currentAddress, adressCodeCount, string.rep(' 90', sizeCurrentInstruction - 5)) else aaCode = string.format([[%x:inc [%x]jmp %s%x:call %x]], adressCodeCount, adressDataCount, data["parameters"], currentAddress, adressCodeCount) end autoAssemble(aaCode) sizeJmp = getInstructionSize(adressCodeCount + 6) -- PushF=2, Inc=6, Popf = 2 sizeInstructions = sizeInstructions + 6 + sizeJmp countCall = countCall + 1 --print(string.format('Инъекция %s',line)) end end currentAddress = currentAddress + sizeCurrentInstruction end print('Last log call at '..line) --print(string.format('Last address code from region 0x%08X',currentAddress)) print(string.format("Start region : 0x%08X, End region : 0x%08X", startAddress,endAddress)) print(string.format("Call injections : %s", countCall)) print(string.format("End address from region: 0x%08X", currentAddress)) print(string.format("Scan addresses %s", endAddress - startAddress)) print(string.format("Finish time %.2f sec", os.clock() - lastClock)) print(string.format("Mem count region : 0x%08X, End region : 0x%08X", addressDataMem, addressDataMem + maxCalls * 4)) print("Injections complete!!") SetMemoryScanOptions(addressDataMem, addressDataMem + maxCalls * 4) unpause() end function LogCallsWithIgnoreCalls(startAddress, endAddress, maxCalls, maxIgnoreCalls) pause() lastClock = os.clock() currentAddress = startAddress disassembler = getDefaultDisassembler() adressCodeMem, addressDataMem = AllocMemory(maxCalls) countCall = 0 maxCallsWithIgnored = maxCalls + maxIgnoreCalls while currentAddress < endAddress and countCall < maxCallsWithIgnored do line = disassembler.disassemble(currentAddress) local data = disassembler.getLastDisassembleData() sizeCurrentInstruction = getInstructionSize(currentAddress) if(data["isCall"]) then countCall = countCall + 1 if(countCall > maxIgnoreCalls) then if(sizeCurrentInstruction < 5) then print(string.format('Пропущенна инструкция %s',line)) else adressCodeCount = adressCodeMem + sizeInstructions adressDataCount = (countCall-1)*4 + addressDataMem if(sizeCurrentInstruction > 5) then aaCode = string.format([[%x:inc [%x]jmp %s%x:call %xdb%s]], adressCodeCount, adressDataCount, data["parameters"], currentAddress, adressCodeCount, string.rep(' 90', sizeCurrentInstruction - 5)) else aaCode = string.format([[%x:inc [%x]jmp %s%x:call %x]], adressCodeCount, adressDataCount, data["parameters"], currentAddress, adressCodeCount) end autoAssemble(aaCode) sizeJmp = getInstructionSize(adressCodeCount + 6) -- PushF=2, Inc=6, Popf = 2 sizeInstructions = sizeInstructions + 6 + sizeJmp --print(string.format('Инъекция %s',line)) end end end currentAddress = currentAddress + sizeCurrentInstruction end print('Last log call at '..line) --print(string.format('Last address code from region 0x%08X',currentAddress)) print(string.format("Start region : 0x%08X, End region : 0x%08X", startAddress,endAddress)) print(string.format("Call injections : %s", countCall - maxIgnoreCalls)) print(string.format("End address from region: 0x%08X", currentAddress)) print(string.format("Scan addresses %s", endAddress - startAddress)) print(string.format("Finish time %.2f sec", os.clock() - lastClock)) print(string.format("Mem count region : 0x%08X, End region : 0x%08X", addressDataMem, addressDataMem + maxCalls * 4)) print("Injections complete!!") SetMemoryScanOptions(addressDataMem, addressDataMem + maxCalls * 4) unpause() end --LogCalls(0x00401000, 0x00645714, 800000)--LogCallsWithIgnoreCalls(0x00401000, 0x00645714, 800000,10000) --LogCallsFromFile('D:\\callList5.txt') 3 Ссылка на комментарий Поделиться на другие сайты Поделиться
aliast Опубликовано 27 января, 2017 Поделиться Опубликовано 27 января, 2017 (изменено) Что-то у меня ошибку выбивает при вызове LogCalls: Error:Failure determining what MemoCallCount1 means Я про скрипт, ищущий в процессе игры. Изменено 27 января, 2017 пользователем aliast Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 27 января, 2017 Автор Поделиться Опубликовано 27 января, 2017 4 часа назад, aliast сказал: Что-то у меня ошибку выбивает при вызове LogCalls: Error:Failure determining what MemoCallCount1 means Это я оказывается неправильно форматирование скрипта правил. Как исправлю отпишусь. Оригиналы я похоже потерял, или где-то на хакрде. upd1: Первый скрипт (в первом посте) не стоит использовать. Там поиск всех call-ов по неправильным областям памяти. До появления Dessect Code. Т.е. область надо указывать правильную. Есть способы, когда это можно не делать. upd2: Надо будет эту тему освежить. Через два способа 1. Поиск по dessectCode. Из темы CE сделать или найти на храде у меня (где-то валяется) 2. Поиск в ida call-ов и их сохранение показать как делать. На Lua подгружать эти call-ы. Тоже где-то на храде это валяется. Найти надо. upd3: Поправил скрипт в первом посте. Но там надо указывать правильную область поиска памяти. Ссылка на комментарий Поделиться на другие сайты Поделиться
aliast Опубликовано 27 января, 2017 Поделиться Опубликовано 27 января, 2017 42 минуты назад, MasterGH сказал: Поправил скрипт в первом посте. Но там надо указывать правильную область поиска памяти. Хм... Взял для примера Limbo. Там в 0x00401000 - 0x00401004 идут int3, а начиная с 0x00401005 начинается куча jmp. Взял в диапазон парочку этих джампов (не все): Цитата Last log call at 004024A0 - E9 6BED0200 - jmp 00431210 Start region : 0x00401005, End region : 0x004024A5 Call injections : 0 End address from region: 0x004024A5 Scan addresses 5280 Finish time 0.03 sec Mem count region : 0x02C50000, End region : 0x02DD6A00 Injections complete!! Error:[string "allocMememoryCount = 0 ..."]:6: attempt to index a nil value (field 'Lines') Ошибка же не из-за "Call injections : 0" ? (в диапазон не попал ни один call) Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 27 января, 2017 Автор Поделиться Опубликовано 27 января, 2017 Надо будет проверить Ссылка на комментарий Поделиться на другие сайты Поделиться
aliast Опубликовано 27 января, 2017 Поделиться Опубликовано 27 января, 2017 В CE 6.5 скрипт работает без ошибок. В 6.6 что-то было изменено и скрипт работать перестал. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 27 января, 2017 Автор Поделиться Опубликовано 27 января, 2017 Есть одно изменение registersymbol(...) нельзя писать без label(....). Ссылка на комментарий Поделиться на другие сайты Поделиться
aliast Опубликовано 27 января, 2017 Поделиться Опубликовано 27 января, 2017 (изменено) Я вроде бы исправил ту ошибку. Вместо mainFrm.FromAddress.Lines.Text = string.format('%X', startAddress) mainFrm.ToAddress.Lines.Text = string.format('%X', endAddress) написал так: mainFrm.FromAddress.Text = string.format('%X', startAddress) mainFrm.ToAddress.Text = string.format('%X', endAddress) т.е. убрал Lines. Ошибка пропала, регион сканирования правится согласно выделенной области. Изменено 27 января, 2017 пользователем aliast 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 27 января, 2017 Автор Поделиться Опубликовано 27 января, 2017 Супер. Первый пост поправил. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения