Перейти к содержанию

Узнаем кол-во срабатываний call-ов на участке кода (CE Lua)


Рекомендуемые сообщения

Данный скрипт позволит вести счет вызовов call на выделенном участке памяти. В отличии от Ultimap этот способ не должен видимо тормозить игру. Но есть и ограничение Call-ы размером не меньше пяти байт. А большие регионы памяти и большое количество call-ов возможно придется долго ждать.

 

Подробнее посмотрим идею на скришотах.

На скриншоте ниже показан результат после выполнения команды

 

 

Скрытый текст

 

post-3-0-36680500-1432791776_thumb.png

post-3-0-45923100-1432791785_thumb.png

post-3-0-62312400-1432791792_thumb.png

 

Скрытый текст

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
Ссылка на комментарий
Поделиться на другие сайты

Скрипт я изменил. Вот результаты, просто фантастика.
 
Вот эта штука в игрушке хот маями

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
Ссылка на комментарий
Поделиться на другие сайты

Счетчики расположились в памяти от адреса 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 вылет 1

00409370 -

00409530 -

00409600 -

00409EA0 -

0040A290 -

0040AA60 40 вылет 1

0040B5D0

0040BB60

0040C0C0

0040C270

0040C560

0040C670

0040C830

0040C990

0040CA70

0040CC20 50

0040D380

0040D5D0

0040DA90

0040DB90

0040DC90

0040E1E0

0040E2C0

0040E320

0040E5C0

0040E710 60

0040EA90

0040EDC0

0040F130

004106F0

00410750

00410940

00410AB0

004117E0

00411980

00411A10 70

00411B90

00414350

00414410

00414610

00415660

00415D00

004164B0

004165E0

00416770

00416860 80

004169F0

00416A70

00416CD0

00416D70

00416F60

004170B0

00417260

00417630

00417F10

00418010 90

004189F0

00419150

00419440

00419600

004196F0

004198F0

00419950

00419B00

00419EC0

00419F50 100

0041A0A0

0041A170

0041A290

0041A5D0

0041A700

0041A890

0041AB50

0041BAA0

0041BBE0

0041BE00 110

0041C4D0

0041D030

0041D0E0

0041DA20

0041DC30 -

0041E0D0

0041E160

0041E390

0041E930

0041EC60 120

0041F250

0041F550

0041F920

0041FAB0

0041FB70

00420480

00420E40

00421020

004210D0

00421520

00421B40

00422220

004222E0

00422480

00422810

00422940

00422AB0

00422CC0

00422D50

00422F30

004232E0

00423B50

00423D50

00423DF0

00423F70

004246B0

004249C0

00425500

00425D80

00425FA0

00426280

00426470

00426750

00426940

00426D00

00426FC0

00427220

00427440

004277B0

00427C80

00427D20

00427E30

00427FC0

00428160

00428290

004285D0

00429C90

0042A1A0

0042A700

0042AC60

0042ADD0

0042AEB0

0042B1C0

0042B500

0042BE50

0042C210

0042C540

0042C730

0042CB70

0042D190

0042D360

0042E480

0042E5B0

0042E710

0042E7D0

0042EB00

0042EC10

004336D0

00433D60

00433ED0 -

004462E0

004465C0

00446650

004466E0

00446770

00446800

00446890

00446920

004469B0

00446A40

00446AD0

00446B60

00446BF0

00446D00

00446DA0

00449160

00449330

00449F80

0044B4D0

0044B610

0044BA20

0044C9F0

00451070

00454FD0

00455780

00455F40

004566F0

00456F50

004572E0

00458070

004581C0

00458710

004588F0 -

00465390

00466310

00466FF0

00467BF0

004690F0

00469200

00469290

004695C0 -

00471CA0

00474180

00474E60

00475670

00475A30

00476260

004765A0

00479140

0047B500

0047BB90

0047C870

0047D0D0

0047D550 -

0049FCA0

0049FD30

0049FDC0

004A1E60

004A2560

004A2C90

004A3390

004A3A90

004A48E0

004A4C20

004A6700

004A6840

004A6D00

004A6F10

004AB0B0

004AB7B0

004ABEE0

004AC5E0

004ACCE0

004ACD70

004AD610

004AD8E0

004AE730 -

004B6920

004B8A30

004B8BF0

004BA090

004BA1D0

004BA2D0

004BA410

004BA590

004BBBD0

004BE100

004BEF80

004BF340

004C1010

004C1400

004C2DA0

004C4EE0

004C52D0

004C72B0

004C75C0

004C8320

004C8FA0

004CA0F0

004CA450

004CA5C0

004CBC00

004CE1F0

004CE9A0

004CEB40

004D01E0

004D10B0

004D1650

004D1BB0

004D3520

004D3AC0

004D4020

004D5040

004D5170

004D53A0

004D54E0

004D5E80

004D5F70

004D8FC0

004D9390

004D9740

004D9990

004DBD40

004DBF90

004DC1E0

004DE620

004DE9E0

004DEC30

004E0670

004E1050

004E1590

004E17F0

004E1BE0

004E1E60

004E20E0

004E44B0

004E4730

004E49B0

004E6D90

004E7150

004E73B0

004E78F0

004E7B70

004E7C00

004E7DB0

004E8630

004E88B0

004E8A80

004E8FA0

004E91D0

004E97E0

004E9AD0

004EA450

004EA910

004EAC00

004EB050

004EB220

004EBCB0

004EC000

004EC520

004EC9C0

004ECF50

004ED220

004EDE10

004EE1C0

004EE630

004EE950

004EEE80

004EF0C0

004EF6A0

004EF920

004EFC90

004F0150

004F02C0

004F3BA0

004F3E70

004F6930

004F72F0

004F89A0

004F8C60

004F8D50

004F8EF0

004F9C10

004F9FE0

004FAEE0

004FB130

004FB200

004FB330

004FB3C0

004FB640

004FB740

004FC210

004FC4A0

004FC840

004FCBE0

004FCEB0

004FD100

004FE280

00501820

00501CA0

00502220

005024A0

00502630

005039C0

00503BD0

00505560

00505790

005078B0

00507AF0

005097C0

00509D20

00509F60

0050BE90

0050E3B0

0050E6D0

0050E8F0

005100C0

005102C0

00510590

00510800

00510B00

00511240

00515B20

00516000

00516750

00517380

00517BC0

00517CD0

005180F0

00518B70

00518DB0

00519B80

00519D70

00519FA0

0051A750

0051A940

0051AF40

0051B1E0

0051DB20

0051FA10

0051FE90

005205C0

00520DF0

00522500

00522A60

00522FC0

00523FB0

005243E0

005246E0

00524F60 -

0052B1E0

0052B630

0052C0F0

0052C320

0052CA70

0052D6C0

0052DF00

0052EB20

0052EE40

0052F0A0

0052FE80

005300D0

00530890

00530B60

005312A0

00534450

00534C90

005360E0

00536220

0053C130

0053C9D0

0053CC50

0053E900

005408A0

00540DA0

005415B0

00541F10

00544900

00544C30

00545190

005458C0

00549490

00549EF0

0054A580

0054AAF0

0054AB90

0054ACA0

0054B610

0054B9D0

0054D2C0

0054D5F0

0054DC40

0054DEC0

0054E1F0

0054E400

0054E660

00551970

00552020

00552140

00552730

005535C0

005539C0

00553D70

00556C10

00557190

005573A0

00557550

0055AC30

0055B1B0

0055B3B0

0055EEF0

0055F4C0

00561DF0

00562340

00562610

00562760

00564300

00564E50

00565770

00565A30

00569AC0

00569C80

0056A450

0056A780

0056BA40

0056BED0

0056C380

0056CA10

0056CE80

0056DE80

005706A0

00570940

00570B60

00570C80

00570E80

00571260

00571440

005728D0

00572DC0

00577040

00577120

00577E20

00577EB0

00577FE0

00578990

00578E90

005794A0

005797E0

00579960

00579A20

0057A320

0057A5F0

0057A720

0057B2C0

0057BB10

0057BF10

0057C300

0057CBB0

0057CCC0

0057D0C0

0057D590

0057DA20

0057DFB0

0057E770

0057E8E0

0057EC60

0057EDB0

0057EF00

0057F120

0057F250

0057F470

0057F840

005804E0

00580680

00580860

00580EA0

005812E0

00581370

00581A40

00581B90

00581D90

00581F50

005821B0

005822B0

00582410

00583B80

00583D00

00584300

00585FB0

005870F0

005871C0

00587540

00589F50

0058AB10

0058ACE0

0058AF40

0058B3F0

0058D1C0

0058D290

0058DD90

0058DE60

0058DF80

0058E580

0058E980

0058EE30

0058F1E0

0058F690

0058F820

0058FE50

00590580

00590710

00590C70

005915E0

005917E0

00591FA0

00592250

005925D0

00592D90

00592F20

005931D0

00593260

00593A70

00594190

005948B0

00594A40

00594C80

00595510

00595CE0

00596490

00596580

00596E60

00597AB0

00597B80

00597C80

00598560

00599340

00599980

00599BD0

0059A200

0059A4D0

0059AB00

0059B1A0

0059B480

0059BA70

0059BCC0

0059C3B0

0059C6F0

0059CA00

0059CC60

0059D250

0059D490

0059DB00

0059E190

0059E390

0059ECF0

0059F0C0

0059F5F0

0059FE30

005A0330

005A09A0

005A11E0

005A1300

005A1990

005A1C00

005A1CD0

005A1F40

005A2380

005A39F0

005A3AC0

005A6910

005A69F0

005A6AD0

005A6B60

005A6CE0

005A9520

005A9600

005A9720

005A9C80

005ACF40

005AD060

005ADFA0

005AEEF0

005B1430

005B2180

005B30D0

005B55F0

005B6270

005B70C0

005B96F0

005B97D0

005B9DF0

005BA050

005BA270

005BA5A0

005BA880

005BA9F0

005BAC50

005BC7C0

005BE860

005C0FF0

005C3CB0

005C4090

005C64A0

005C6990

005C9060

005C9450

005C9BD0

005C9F40

005CED40

005CFD90

005D1700

005D32F0

005D6D70

005D6FE0

005D7B10

005D85A0 -

005E0540

005E0790

005E0D20

005E1150

005E5AE0

005E5D20

005E6200

005E63A0

005E7BF0

005E8C50

005E9290

005EBF30

005EC0E0

005ECA90

005ECCB0

005ECF10

005EE690

005EF3D0

005EF5D0

005F27C0

005F2CB0

005F5800

005F7E50

005F7F30

005F80A0

005FABE0

005FE4C0

00602F60

00605BE0

00605D60

00605EE0

00605FC0

006060A0

00606180

006062C0

00606880

00607B80

0060A8D0

0060AB00

0060F0E0

0060FAF0

00610500

006105E0

006107A0

00610CD0

006110F0

00611410

00611830

006132A0

00613760

00613C70

006142D0

00615E00

00615FA0

006161A0

00616300

00616460

00616990

00617CA0

00617D50

00618BF0

00618F00

00619D20

0061AB40

0061AE10

0061AF70

0061C0A0

0061CD20

0061DD60

0061E8B0

0061ED60

0061EEC0

0061FCE0

00620800

00620C70

00620DC0

00621BD0

006222C0

00622750

00623EE0

006243E0

00625B10

00625EF0

00627680

00627A80

00627BE0

006288F0

00629470

006298E0

0062AC80

0062AF10

0062C340

0062DC10

0062E080

0062F530

00630CE0

006311D0

00633B30

006352C0

00636770

00636C40

00638790

006389E0

0063ACA0

0063D140

0063F5D0

00642810

006429E0

00642EF0

00643110

00643300

006438B0

00643F70

00645CF0

00646800

00646A90

00647C70

00648030

00648370

00648520

00649910

006499C0

0064DA70

0064E100

0064EE40

0064EEE0

00650240

00650530

00650FC0

006514B0

006518F0

00651A60

00651C40

00651F50

006522F0

006539F0

00653AF0

00653E80

00654030

006568B0

00658330

00658860

00658CF0

0065BB70

0065D740

0065D9F0

0065DCE0

0065F440

0065F930

0065F9E0

0065FA90

0065FB40

0065FBF0

0065FCA0

0065FD50

0065FE00

00660040

00660510

006608F0

006609A0

00660A50

00660D30

00660DE0

006610D0

00661180

00661210

006612C0

00661370

00661450

00662510

00662620

00662700

00662EE0

00662FC0

006637A0

00663880

006641E0

00665030

00665660

006659E0

00665C80

00666670

00666810

00666CC0

00666F10

00667180

00667280

006674D0

00667640

00667730

00667A40

00667B30

00667DA0

00667EA0

00668B20

00669CB0

0066A150

0066CE10

0066D0B0

0066DAD0

0066DBD0

0066FD50

00670BD0

00670DB0

00671600

00671D70

00672510

006728C0

00672C00

00672E60

006752A0

00676540

00678880

00678AE0

0067AF90

0067B450

0067B900

0067CDF0

0067F750

0067F830

0067FCF0

00681100

00683A60

00683E90

00683F60

006842B0

00684480

00684740

00684EC0

00688330

00688660

00689070

0068A2A0

0068AB80

0068BAD0

0068BE00

0068C600

0068C710

0068CD50

0068D000

0068D150

0068D6D0

0068DAB0

0068DB60

0068DC60

0068E090

0068E1D0

0068E470

0068E540

0068F310

0068F3D0

0068FCF0

0068FF10

00690850

00690A20

00690B60

00690C70

00691F80

00692170

00692390

00692680

00692870

00692A30

00693810

00693BE0

00693D50

00694400

00694490

00694580

00694670

0069ABC0

0069C100

0069C240

0069C4F0

0069CC10

0069E5D0

006A1610

006A1750

006A5B70

006A9330

006AC430

006AC540

006AC620

006AE5E0

006AED30

006AF020

006AF1B0

006AF260

006B3910

006B3C40

006B64F0

006B6D10

006B6DD0

006B6F80

006B7270

006B7420

006B9670

006B9860

006BB3E0

006BD040

006BD250

006BD4C0

006BD5C0

006BD690

006C0BF0

006C1680

006C2380

006C2480

006C2940

006C38A0

006C3FC0

006C4CB0

006C5140

006C55D0

006C5B70

006C5C90

006C5EB0

006C6350

006C85C0

006C8F90

006CA800

006CB4F0

006CB5B0

006CB9D0

006CC1A0

006CC2A0

006CCB10

006CCE30

006CDC90

006CE500

006CE670

006CFA10

006CFC20

006D0430

006D0E60

006D12A0

006D4A90

006D88B0

006D8E50

006D90F0

006DBAB0

006DBD40

006DC010

006DC290

006DC3A0

006DC500

006DC7C0

006DCAD0

006DCDA0

006DD160

006DEE30

006DFB70

006E11E0

006E1400

006E14C0

006E1940

006E19F0

006E1B30

006E2020

006E2C10

006E3DF0

006E4DA0

006E5040

006E7550

006E79E0

006E7EF0

006E8450

006E8C90

006E8EE0

006E9470

006E9EB0

006EBA80

006EBC10

006EBE80

006EC590

006EC9A0

006ECE70

006ECF20

006ED130

006ED590

006ED6D0

006EDD70

006EDE70

006EE240

006EE960

006EEB10

006EFE80

006F01D0

006F2410

006F2540

006F2A60

006F2D20

006F2FB0

006F3250

006F4A30

006F4AC0

006F4BD0

006F4DE0

006F60B0

006F74E0

006F7570

006F97C0

006F9890

006F9960

006F9A30

006F9B00

006F9BE0

006F9CC0

006F9DA0

006F9E80

006F9F50

006FA090

006FA140

006FA200

006FA750

006FB200

006FB300

007004A0

00700590

00700850

007008E0

00700970

00700A00

00700A90

00700B20

00700BC0

00700C60

00700E10

007010E0

007012A0

00701330

00702BE0

00702E10

00702FA0

00703110

007032A0

00703430

007035C0

00703750

007038E0

00703A70

00703C00

00703D90

00703F20

007040B0

00704240

007043D0

00704560

00704740

00704980

00704B50

00705320

007054C0

00705680

00705880

007059F0

00705B60

00706030

007062C0

00706660

00706B90

00706F90

00707110

00707170

007076A0

00707910

00707A70

00707C30

00707E90

00708140

007082A0

00708480

007085E0

00708DF0

00708EA0

00709090

007092D0

00709470

00709630

007098F0

00709A50

00709C90

00709DF0

00709FB0

0070A120

0070A290

0070A400

0070A590

0070A790

0070A910

0070A980

0070ABE0

0070AE10

0070B190

0070B310

0070B490

0070B630

0070B6A0

0070B950

0070BBE0

0070BDD0

0070BE90

0070C050

0070C1F0

0070C390

0070C5B0

0070C790

0070C7B0

00719840

0071A5D0

0071DFF0

0071E940

0071FE80

00720710

00722680

007232D0

007235A0 - ГГ не стреляет

007331E0

007375E0

007385E0

0073B840

0073D7C0

00741C50

00743EB0

00745F20

00748230

00748350 -

00759220

00759980

0075A090

0075BD50

0075E3E0

0075E940

0075EC00

00760B80

00762090

00765190

00767FB0

0076AA40

0076B290

0076BCE0

0076BF70

0076C640

0076D320

0076DB10

0076DDB0

0076E7E0

0076EA90

00770510

007707B0

007716E0

00772390

00773100

00773390

007741D0

00775030

007752F0

00775E60

007761A0

00776B90

007772C0

00777B10

00777DB0

00778CC0

00778F50

00779D70

0077A210

0077A660

0077AAB0

0077AFB0

0077B4C0

0077B740

0077C130

0077CCB0

0077D000

0077D220

0077D830

0077DD90

0077E2F0

0077E660

0077EB90

0077F0C0

0077F420

0077FF20

00780E60

00783570

00785570

00786700

007871E0

0078A0D0

0078A470

0078A780

0078A930

0078B9C0

0078C180

0078C420

0078F720 -

007CB840 -

007F8540

007F95E0

007F9910

007F9EE0

007FA1E0

007FA8B0

007FAE90

007FB6A0

007FB830

007FB9B0

007FC350

007FC6B0

007FD200

007FD410

007FD5E0

007FDA00

007FDE50

007FE2A0

007FE780

007FF2C0

007FFBC0

007FFEE0

00800250

008018D0

00801DD0

00802E30

00805D70

008061C0

008063D0

008067D0

00806BF0

00807020

00807340

008077B0

00807C80

00807E80

008080F0

0080AF60

0080B790

0080BBB0

0080C120

0080C5C0

0080CDF0

0080E470

008101A0

00810800

00810B50

00810DF0

00811190

00812480

00812C70

00812DC0

00812F90

008130E0

00813230

00813380

008134D0

00813620

008137F0

00813940

00815BD0

00816B70

0081A380

0081D340

00822B40

008252E0

00826020

008272F0

00827470

00827550

008276E0

00828490

008286E0

00828930

00828CC0

008291B0

008293C0

00829620

00829FD0

0082A980

0082AED0

0082B270

0082BAA0

0082BBE0

0082C1B0

0082CE00

0082DC80

0082E890

0082F010

0082FF20

00830AD0

00831310

00831490

00831BB0

00831C90

00831DD0

00831FC0

00832A50

00833920

00834170

00837000

00839AB0

0083B7F0

0083BDD0

0083BF70

0083C120

0083C540

0083C8B0

0083CB30

0083D050

0083D7E0

0083DB50

0083DE60

0083E250

0083E860

0083ED80

0083F260

0083F500

0083F830

0083FB70

0083FE10

008400B0

00840340

008405F0

008408D0

00840BB0

00841060

00841B20

00842800

00842DF0

00843330

00843660

00843FA0

00844D60

00844FA0

008451E0

008452E0

00846630

00846810

008469F0

00846E10

00846F30

008470B0

008471E0

00847790

008482D0

00848380

00848420

008484C0

00848560

00848600

008486A0

00848740

00848810

00848B10

00848D80

00848EB0

00849440

00849550

00849C90

00849FE0

0084A430

0084A780

0084A890

0084AA40

0084AC80

0084B9C0

0084BCC0

0084D160

0084E530

0084F460

00850C20

00850DA0

008541E0

00854300

00854480

00854520

008545C0

008552A0

00855EE0

008561A0

00856660

00856740

00856A00

00856C10

00857080

00857470

00857810

00857970

00857AD0

00857D50

00857ED0

00858060

008581F0

008583A0

00858550

00858D20

00859900

00859E70

0085A640 -

008A1730

008A1820

008A4440

008A4750

008A5660

008A5700

008A57F0

008A7860

008B0240

008B0310

008B0700

008B0EE0

008B0FE0

008B10E0

008B1400

008B1550

008B1810

008B1D50

008B1ED0

008B2210

008B45E0

008B46C0

008B47D0

008B48E0

008B4A60

008B4C10

008B4CF0

008B4E80

008B5220

008B5310

008B5400

008B54F0

008B55E0

008B56D0

008B57C0

008B59B0

008B5D60

008B6160

008B6410

008B6820

008B6A50

008B6C80

008B7200

008B7670

008B7CE0

008B7FF0

008B8060

008B8260

008B84A0

008B8530

008B8F30

008B93D0

008B95C0

008B97F0

008B9960

008B9A80

008B9C10

008B9E30

008BA720

008BB620

008BBF60

008BC270

008BC360

008BD4E0

008BD6E0

008BDB90

008BDCF0

008BDE70

008BE680

008BE830

008BE970

008BEAE0

008BED10

008BEDE0

008BF0A0

008BF150

008BF240

008BF390

008BF8A0

008BF9F0

008BFBD0

008BFD60

008BFDF0

008C01F0

008C02D0

008C0340

008C0610

008C0860

008C0AE0

008C0C20

008C0F50

008C1040

008C12A0

008C14E0

008C1650

008C1740

008C1880

008C1960

008C2A70

008C2FF0

008C32D0

008C33C0

008C34B0

008C35A0

008C3690

008C3780

008C3870

008C3960

008C3A50

008C3B50

008C3C40

008C3D30

008C3E20

008C3F10

008C4000

008C40F0

008C41E0

008C42D0

008C43C0

008C44B0

008C45A0

008C46A0

008C47A0

008C48A0

008C4A00

008C4B60

008C4C20

008C4D50

008C4E80

008C4FB0

008C50E0

008C5210

008C5340

008C5470

008C55A0

008C56D0

008C5800

008C5930

008C5A60

008C5B90

008C5CC0

008C5DF0

008C5F20

008C6050

008C6180

008C6210

008C64C0

008C7350

008C7A60

008C7F60

008C8030

008C8100

008C81D0

008C82A0

008C8380

008C8460

008C8540

008C8690

008C8770

008C8850

008C89A0

008C8AF0

008C8BD0

008C8D20

008C8E00

008C8EE0

008C9060

008CA2C0

008CABB0

008CACC0

008CB030

008CB2D0

008CB440

008CBC70

008CBD50

008CBE70

008CBFD0

008CC120

008CC200

008CC490

008CC600

008CCB40

008CCCB0

008CCD80

008CCE20

008CCF70

008CD030

008CD120

008CD5E0

008CD920

008CDB20

008CE430

008CE490

008CF120

008CF2D0

008CF480

008CF9C0

008CFA80

008CFD10

008D0120

008D0200

008D04B0

008D0510

008D0630

008D0740

008D0DF0

008D1000

008D17D0

008D1900

008D20F0

008D2650

008D2890

008D2AA0

008D2C70

008D2EE0

008D3040

008D3150

008D31B0

008D35B0

008D36F0

008D37F0

008D4670

008D46E0

008D4960

008D4A70

008D5120

008D5370

008D7130

008D7190

008D94B0

008D9A00

008D9EA0

008D9FC0

008DA6D0

008DA840

008DA9A0

008DAB00

008DB7D0

008DB910

008DBA10

008DBB10

008DBBE0

008DBCB0

008DC7B0

008DC8F0

008DCC90

008DD780

008DDD40

008DE490

008DE990

008DECE0

008DED40

008DEDA0

008DEE00

008DF1E0

008DF2E0

008DF4E0

008DF740

008DF9A0

008DFBF0

008DFCC0

008DFDA0

008DFEA0

008E0030

008E01F0

008E0440

008E0AE0

008E0C10

008E0D40

008E0E70

008E0FA0

008E11B0

008E1310

008E13D0

008E1540

008E1780

008E1950

008E1B20

008E1BF0

008E1F90

008E25E0

008E26D0

008E27B0

008E2870

008E2960

008E2A40

008E2B00

008E2BF0

008E2CD0

008E2D90

008E2E80

008E2F60

008E3020

008E30B0

008E3140

008E31D0

008E3330

008E33C0

008E3450

008E34E0

008E3570

008E3600

008E3690

008E3720

008E37B0

008E3A80

008E3B60

008E3C40

008E3D20

008E3E80

008E4030

008E4130

008E4230

008E4330

008E45E0

008E50C0

008E5150

008E51D0

008E55E0

008E56E0

008E57B0

008E58A0

008E5990

008E5E50

008E5EF0

008E5FD0

008E63E0

008E6460

008E65F0

008E6EC0

008E6F40

008E7150

008E7380

008E7410

008E74A0

008E75D0

008E7690

008E7750

008E7820

008E7950

008E7A10

008E7AD0

008E7BA0

008E7CF0

008E7D40

008E7F20

008E8010

008E80F0

008E81B0

008E82A0

008E8380

008E8440

008E84D0

008E8580

008E8780

008E8810

008E88A0

008E8930

008E8BC0

008E8CA0

008E8DC0

008E8EB0

008E8F90

008E9050

008E9140

008E92E0

008E9480

008E9510

008E9650

008E9750

008E98C0

008EB240

008EB2D0

008EB870

008EDE70

008EDF40

008EE000

008EE180

008EE7D0 вылет

008EEBF0

008EEE40

008EF1B0

008EFAD0

008EFB40

008EFF20

008F02D0

008F0370

008F0410

008F0800

008F08F0

008F09E0

008F1280

008F1330

008F13E0

008F1690

008F1A70

008F1B00

008F1E00

008F1EB0

008F1FA0

008F2080

008F2140

008F2210

008F2340

008F23D0

008F2460

008F2550

008F2630

008F26F0

008F2780

008F2A10

008F2AF0

008F2B80

008F2C30

008F2E60

008F2FF0

008F30E0

008F31C0

008F3280

008F33C0

008F3450

008F3570

008F36D0

008F3D50

008F4160

008F4250

008F4830

008F48D0

008F4970

008F5050

008F5430

008F54D0

008F58F0

008F5D90

008F5F50

008F5FF0

008F6230

008F6300

008F63F0

008F64D0

008F6590

008F6650

008F66E0

008F6770

008F6860

008F6940

008F6A00

008F6B20

008F6C00

008F6C90

008F6D20

008F6E10

008F6EF0

008F6FB0

008F70F0

008F71D0

008F7260

008F73A0

008F7480

008F7B00

008F85E0

008F8D90

008F8E30

008F8ED0

008F8FA0

008F9260

008F9580

008F9BD0

008F9FF0

008FA040

008FA240

008FA860

008FAA60

008FAAF0

008FAB70

008FAC30

008FAD10

008FAD90

008FAE40

008FAF30

008FB010

008FB0D0

008FB1C0

008FB2A0

008FB360

008FB3F0

008FB4B0

008FB530

008FB5C0

008FB650

008FB6E0

008FB890

008FB970

008FBC20

008FC980

008FCAD0

008FCFD0

008FD330

008FD5E0

008FD6D0

008FD7B0

008FD870

008FD900

008FD990

008FDAB0

008FDBB0

008FDE80

008FE1A0

008FE210

008FE300

008FE500

008FE5A0

008FE640

008FE770

008FE810

008FE9E0

008FEBE0

008FEFF0

008FF1F0

008FF530

008FF670

008FF760

008FF840

008FF900

008FF990

008FFA20

008FFAB0

008FFBA0

008FFC80

008FFD40

008FFE30

008FFF10

008FFFD0

00900060

009001C0

009002A0

00900330

00900420

009004B0

009006F0

009007D0

00900910

00900AD0

00900CF0

00900ED0

00900FC0

009010A0

00901160

00901300

00901390

009014E0

009015E0

00902020

00902080

00902100

00902160

00902CC0

00902FF0

00903250

00903600

00903D90

00904290

009049B0

00904F50

009052B0 -

00905B50

00905C20

009064B0

00907520

00907A90

00907FA0

00908280

00908360

00908400

009085E0

00908BB0

00908F10

00909700

00909780

0090AAD0

0090AD10

0090ADD0

0090AF50

0090BAE0

0090BFA0

0090C210

0090C300

0090C3F0

0090CB60

0090CE20

0090D0E0

0090D440

0090E370

0090E3E0

0090E450

0090E4C0

0090E9B0

0090ED30

0090EDB0

0090EF00

0090F110

0090F240

0090F5F0

0090F6A0

0090F790

0090F870

0090F930

0090FA00

0090FA90

0090FBB0

0090FCF0

009100C0

009102C0

00910440

009108A0

00910B00

00910BF0

00910CD0

00910D90

00910E20

00910EB0

00910FD0

009110D0

009112E0

009113D0

009118A0

00911AD0

00911E80

00911F00

00912110

00912200

00912680

009128F0

009132D0

009133D0

00913850

00913BA0

009142C0

00914B30

00914BD0

00914CE0

00914E00

009154C0

00915550

00915630

00915830

00915920

00915A00

00915AC0

00915B50

00915BE0

00915D00

00915E00

00916340

00916510

00916590

009167A0

009173B0

009176D0

009177B0

009178F0

00918240

00918680

00918700

00918780

00918800

0091B710

0091B920

0091B990

0091BA00

0091BB30

0091BBD0

0091BC70

0091BD10

0091BDB0

0091BE50

0091BF60

0091C630

0091C720

0091C850

0091C940

0091C9E0

0091CA80

0091D2D0

0091D860

0091DA60

0091DC60

0091E020

0091E110

0091E1F0

0091E2B0

0091E3A0

0091E480

0091E540

0091E630

0091E710

0091E7D0

0091E860

0091E8F0

0091E980

0091EA10

0091EAA0

0091EB30

0091EBC0

0091EC50

0091EE90

0091EF70

0091F050

0091F190

0091F290

0091F390

0091F710

0091F780

0091FA40

0091FB10

0091FEF0

0091FF60

009201D0

009202A0

00920650

009206C0

00920A10

00920CE0

00921210

009215B0

00921750

00921B20

00921DC0

00921EC0

009220C0

009221B0

00922290

00922350

009223E0

00922470

00922590

009226F0

00922E00

009236F0

00923870

00924630

00924930

00924B80

00924BF0 вылет

00925520

00925B70

00925C00

00925C80

00925D00

00925D80

00926A40

00926B80

00926D70

00926E10

00926EC0

00926F60

00927000

00927450

00927650

00927850

00927A50

00927C50

00927F80

00928070

00928150

00928210

00928300

009283E0

009284A0

00928590

00928670

00928730

00928820

00928900

009289C0

00928AB0

00928B90

00928C50

00928CE0

00928D70

00928E00

00928E90

00928F20

00928FB0

00929040

009290D0

00929160

009291F0

00929280

00929310

009293A0

00929430

00929790

00929870

00929950

00929A30

00929B10

00929C90

0092A310

0092A470

0092A6E0

0092A8E0

0092AC70

0092AE70

0092AF60

0092B040

0092B100

0092B190

0092B220

0092B340

0092B440

0092B8F0

0092BCE0

0092BD80

0092C1D0

0092C340

0092C540

0092C740

0092C830

0092C910

0092C9D0

0092CAC0

0092CBA0

0092CC60

0092CCF0

0092CD80

0092CE10

0092CEA0

0092CF30

0092D0E0

0092D1C0

0092D2E0

0092D840

0092DAA0

0092DB40

0092E080

0092E460

0092E660

0092E750

0092E830

0092E8F0

0092E980

0092EA10

0092EB30

0092EC10

0092ED00

0092EDE0

0092EEA0

0092EF50

0092EFE0

0092F070

0092F2C0

0092F4B0

009303B0

00930430

00930550

00930EE0

00931540

00931CE0

00931FA0

009321C0

009354A0

00935560

00935D90

00935E60

00935F30

00936000

009360D0

009361A0

00936270

00936340

00936410

009364E0

009365B0

00936680

00936750

00936820

009368F0

009369C0

00936A90

00936B60

00936C30

00936D00

00936DD0

00936EA0

00936F70

00937040

00937110

009371E0

009372B0

00937380

00937450

00937520

009375F0

009376C0

00937790

00937860

00937930

00937A00

00937AD0

00937BA0

00937C70

00937D40

00937E10

00937EE0

00937FB0

00938080

00938150

00938220

009382F0

009383C0

00938490

00938560

00938630

00938700

009387D0

009388A0

00938970

00938A40

00938B10

00938BE0

00938CB0

00938D80

00938E50

00938F20

00938FF0

009390C0

00939190

00939260

00939330

00939400

009394D0

009395A0

00939670

00939740

00939810

009398E0

009399B0

00939A80

00939B50

00939C20

00939CF0

00939DC0

00939E90

00939F60

0093A030

0093A100

0093A1D0

0093A2A0

0093A370

0093A440

0093A510

0093A5E0

0093A6B0

0093A780

0093A850

0093A920

0093A9F0

0093AAC0

0093AB90

0093AC60

0093AD30

0093AE00

0093AED0

0093AFA0

0093B070

0093B140

0093B210

0093B2E0

0093B3B0

0093B480

0093B550

0093B620

0093B6F0

0093B7C0

0093B890

0093B960

0093BA30

0093BB00

0093BBD0

0093BCA0

0093BD70

0093BE40

0093BF10

0093BFE0

0093C0B0

0093C180

0093C250

0093C320

0093C3F0

0093C4C0

0093C590

0093C660

0093C730

0093C800

0093C8D0

0093C9A0

0093CA70

0093CB40

0093CC10

0093CCE0

0093CDB0

0093CE80

0093CF50

0093D020

0093D0F0

0093D1C0

0093DAF0

0093DC00 -

0093E2C0

0093E550

0093E5F0

0093E950

0093EB50

0093EC40

0093ED20

0093EDE0

0093EE70

0093EF00

0093F020

0093F120

0093F4D0

0093F820

0093FA30

0093FB20

0093FC00

0093FCC0

0093FD50

0093FDE0

0093FF00

00940030

009401B0

00940470

00941960 -

00941E20

00942630

009432C0

00943390

009434F0

00943630

009436D0

009438C0

00943D30

00943E30

00944030

00944120

00944200

009442C0

00944350

009443E0

00944500

00944600

00944A70

00944DB0

00944F60

00945080

00945250

00945460

00945550

00945630

009456F0

00945780

00945810

00945930

00945A30

00945DA0

00946110

009461B0

00946890

00946C90

00946D30

00946E60

00947100

00947290

00947330

00947690

00947950

00947BA0

00947C90

00947D70

00947E30

00947F60

00947FF0

00948080

00948170

00948250

00948310

009484E0

009485C0

00948650

00948790

009488E0

00948DF0

00949240

009494F0

00949700

009497F0

009498D0

00949990

00949A20

00949AB0

00949BD0

00949D00

00949F50

0094A7D0

0094A870

0094A940

0094B940

0094B9F0

0094BC10

0094BCE0

0094BF80

0094C0E0

0094C3E0

0094C4E0

0094C610

0094C720 50

0094C9E0

0094CAB0

0094CE50

0094CF40

0094D020

0094D0E0

0094D190

0094D220

0094D2B0

0094D3A0 40

0094D480

0094D540

0094D660

0094D740

0094D7D0

0094D910

0094D9F0

0094DDA0

0094E3A0

0094FCA0 30

0094FE50

0094FF00

00950080

00950630

009507D0

009508A0

00950AB0

009510B0

009512B0

009514B0 20

009515A0

00951690

00951770

00951830

00951920

00951A00

00951AC0

00951B50

00951BE0

00951C70 10

00951D00

00951D90

00951F40

00952020

00952140

009527F0

009528C0

00952990

00952A30

00952CE0 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 -

00A1D4C0

00A27F10

00A27FC0

00A28080

00A28140

00A281F0

00A282E0

00A283A0

00A28490

00A28550

00A28610

00A286D0

00A28790

00A28850

00A28910

00A289D0

00A28A90

00A28B50

00A28C10

00A28CD0

00A28D90

00A28E40

00A28F00

00A29630

00A296F0

00A297B0

00A29870

00A29930

00A29CB0

00A29D70

00A29E30

00A2A0B0

00A2A170

00A2A230

00A2A2F0

00A2A3B0

00A2A470

00A2A560

00A2A620

00A2A6E0

00A2A7A0

00A2AE90

00A2B0B0

00A2B170

00A2B230

00A2B310

00A2B3E0

00A2B4A0

00A2B560

00A2B620

00A2B6E0

00A2B830

00A2B8F0

00A2B9B0

00A2BAA0

00A2BB60

00A2BC20

00A2BCE0

00A2BDD0

00A2BE90

00A2BF50

00A2C010

00A2C0D0

00A2C190

00A2C250

00A2C310

00A2C3D0

00A2C490

00A2C550

00A2C610

00A2C6D0

00A2C790

00A2C850

00A2C910

00A2C9D0

00A2CA90

00A2CB50

00A2CC40

00A2CD00

00A2CDC0

00A2CE80

00A2CF40

00A2D000

00A2D0C0

00A2D180

00A2D240

00A2D300

00A2D3C0

00A2D480

00A2D570

00A2D750

00A2D810

00A2D8D0

00A2D990

00A2DA40

00A2DB00

00A2DBC0

00A2DC80

00A2DD40

00A2DE00

00A2DEC0

00A2DF80

00A2E040

00A2E110

00A2E1D0

00A2E290

00A2E350

00A2E470

00A2E880

00A2E940

00A2EA00

00A2EAC0

00A2EB80

00A2EC40

00A2ED00

00A2EDC0

00A2EE80

00A2EF40

00A2F000

00A2F0C0

00A2F180

00A2F230

00A2F3A0

00A2F460

00A2F520

00A2F5E0

00A2F6A0

00A2F760

00A2F820

00A2FA70

00A30090

00A30150

00A30210

00A302D0

00A30390

00A30450

00A30510

00A305D0

00A306A0

00A30760

00A30820

00A308E0

00A309A0

00A30BD0

00A30C90

00A30DB0

00A30E90

00A30F50

00A31000

00A310C0

00A31180

00A31240

00A31300

00A313C0

00A31480

00A31540

00A31600 20 -

00A316C0 -

00A31780 -

00A31840 -

00A31900 -

00A319C0 -

00A31A80 -

00A31B40 -

00A31C00 -

00A31CC0 -

00A31D80 10 -

00A31E40 -

00A31F00 -

00A31FC0 -

00A32080 -

00A34DB0 -

00A34E90 -

00A3A180 -

00A3A230 -

00A408E0 - 

- это проверенная функция по милишной атаке, ну вылет - это вылет из игры.

 

ЗЫ: вручную конечно долго и нудно (но другого варианта не придумал %) ), так что проверяю в день адресов по 100.

Изменено пользователем Garik66
Ссылка на комментарий
Поделиться на другие сайты

>> у меня вопрос ты сканировал Callы по выстрелу или как-то иначе?

 

Ищу call-ы от милишной атаки.  В данный момент ничего не ломаю и занимаюсь багами и вылетами.

 

Я законтролил одну инструкцию при крахе игры через Олли, там сразу

call адрес2

cmp .... // тут сразу сравнение, а флаг-то из-за inc[...] меняется

jge ... // тут прыг

 

Похоже надо делать 

 

pushf

inc [адрес1]

popf

jmp адрес2

 

 

Флаги надо будет попробовать сохранить и восстановить после inc. Но меня так в сон клонит, что сегодня ничего делать не буду. Сейчас отключусь и спать. Я некоторые call-ы находил интересные,  но это все не то.

 

Если у меня будут результаты по Майями, то я отпишусь. Пока результатов нет.

Ссылка на комментарий
Поделиться на другие сайты

У меня тоже пару интересных функций находилось, но тоже не то.

Мой способ (правда его даже способом назвать нельзя) перебора, можно было автоматизировать частично, если бы знал LUA, но к сожалению не знаю. %)

Ссылка на комментарий
Поделиться на другие сайты

1. Исправлен скрипт, чуть-чуть быстрее
 
2. В скрипте добавлена новая функция LogCallsWithIgnoreCalls(startAddress, endAddress, maxCalls, maxIgnoreCalls)
 
startAddress - начало поиска call-ов
endAddress - конец поиска
maxCalls - масимальное количество call-ов
maxIgnoreCalls - пропуск кол-ва первых call-ов
 
2. Ошибок не будет, если указывать регион кода до секции .text
post-3-0-81198000-1432867780_thumb.png
 

LogCalls(0x00401000, 0x00645714, 400000)

 
Я когда не знал, то переправил какие-то таблицы указателей на функций и естественно игра вылетала.
 
Раньше я писал по размеру региона

post-3-0-80646900-1432867964_thumb.png

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.

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Считаем 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
Ссылка на комментарий
Поделиться на другие сайты

  • 1 год спустя...

Что-то у меня ошибку выбивает при вызове LogCalls: Error:Failure determining what MemoCallCount1 means

Я про скрипт, ищущий в процессе игры.

Изменено пользователем aliast
Ссылка на комментарий
Поделиться на другие сайты

4 часа назад, aliast сказал:

Что-то у меня ошибку выбивает при вызове LogCalls: Error:Failure determining what MemoCallCount1 means

 

Это я оказывается неправильно форматирование скрипта правил. Как исправлю отпишусь. Оригиналы я похоже потерял, или где-то на хакрде.

 

upd1:

Первый скрипт (в первом посте) не стоит использовать. Там поиск всех call-ов по неправильным областям памяти. До появления Dessect Code. Т.е. область надо указывать правильную. Есть способы, когда это можно не делать.

 

upd2:

Надо будет эту тему освежить. Через два способа

1. Поиск по dessectCode. Из темы CE сделать или найти на храде у меня (где-то валяется)

2. Поиск в ida call-ов и их сохранение показать как делать. На Lua подгружать эти call-ы. Тоже где-то на храде это валяется. Найти надо.

 

upd3:

Поправил скрипт в первом посте. Но там надо указывать правильную область поиска памяти.

Ссылка на комментарий
Поделиться на другие сайты

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)

Ссылка на комментарий
Поделиться на другие сайты

Я вроде бы исправил ту ошибку. Вместо 

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. Ошибка пропала, регион сканирования правится согласно выделенной области.

Изменено пользователем aliast
  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.