unit Unit1; interface private { Private declarations } public { Public declarations } function KillTask(ExeFileName: string): Integer; end; const bsize=1024; var Form1: TForm1; h_cal:hwnd;//窗口 hProc,xiel,xiel_tow:dword;//进程id s_proc:string;//进程id hProcess: Cardinal; query_thread_handle1: THandle; ac:Cardinal; ai_ga,ai_gb,id,y_id,baoh,baoha,baohb,timer_one:integer; bb:boolean; implementation {$R *.dfm} procedure Query(); stdcall; begin form1.timer1.Enabled:=true; form1.timer3.Enabled:=true; form1.timer7.Enabled:=true; form1.timer8.Enabled:=true; form1.timer6.Enabled:=true; SendMessage(h_cal,WM_KEYDOWN,vk_tab,0); SendMessage(h_cal,WM_KEYUP,vk_tab,0); form1.sb1.Panels[0].Text:='发现怪物...开始攻击'; if form1.ck3.Checked=true then begin form1.timer6.Enabled:=false; end; if form1.ck4.Checked=true then begin form1.timer4.Interval :=strtoint(form1.edit4.Text)*1000; form1.timer5.Interval :=strtoint(form1.edit5.Text)*1000; form1.timer4.Enabled :=true; form1.timer5.Enabled :=true; end; if form1.ck1.Checked=true then begin form1.timer6.Interval :=strtoint(form1.edit10.Text)*1000; form1.timer6.Enabled :=true; end; end; procedure jiant;//检测主窗口 var aproc:dword; Num: cardinal; PHND: THandle; ft: Integer; hp:array[0..30] of WideChar; begin aproc:=0; h_cal:=FindWindow(0,pchar('Element Client')); if h_cal=0 then begin form1.Memo1.Lines.Add('没发现游戏窗口!'); end else begin GetWindowThreadProcessId(h_cal,aproc); PHND := OpenProcess(PROCESS_VM_READ, False,aproc); if PHND <> 0 then begin if ReadProcessMemory(PHND, Pointer(xiel_tow), @ft, 4, Num)then if ReadProcessMemory(PHND, Pointer(ft), @hp,16, Num)then form1.Label18.Caption :=format('[ %s ]',[hp]); end; s_proc:='0x'+IntToHex(aproc,0); if aproc<> 0 then form1.Memo1.Lines.Add('发现游戏.请稍后...'); end; end; function GetDataFromRam(DSAddres: Cardinal; var RamDataBack: Cardinal): Boolean; var DataBuffer: Cardinal; bReadSucceed: LongBool; lpNumberOfBytesRead: Cardinal; begin //if hProc = 0 then Exit; hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False,strtoint(s_proc)); bReadSucceed := ReadProcessMemory(hProcess, Pointer(DSAddres), @DataBuffer, SizeOf(DataBuffer), lpNumberOfBytesRead); if bReadSucceed then begin RamDataBack := DataBuffer; Result := True; end else begin RamDataBack := $FFFFFFFF; Result := False; end; CloseHandle(hProcess); end; function doaddtoint(adrac:Cardinal):integer; var ok:boolean; LPDW:DWORD; //整数 Buffer:array[1..bSize] of byte;//用来装4KB的内存块 i,t:integer; begin hProcess := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ, False,strtoint(s_proc)); ok:=readProcessMemory(hProcess,pointer(adrac),pointer(@(buffer[1])),4,LPDW); if ok then //读取成功 ^_^ begin t:=(pint(@(buffer[1])))^; result:=t; end else result:=0; end; procedure TForm1.Button1Click(Sender: TObject); begin jiant; timer6.Interval :=180*1000; if GetDataFromRam(xiel,ac)=true then begin if doaddtoint(ac+$254) <> 0 then begin form1.Label9.Font.Color:=clred; form1.Label10.Font.Color:=clred; form1.Label11.Font.Color:=clblue; label9.Caption :=inttostr(doaddtoint(ac+$254)); baoh:=Trunc(doaddtoint(ac+$254) / 4); edit14.Text :=inttostr(baoh); baoha:=Trunc(doaddtoint(ac+$254) / 40); edit11.Text :=inttostr(baoha); label10.Caption:=inttostr(doaddtoint(ac+$258)); edit2.Text :=inttostr(Trunc(doaddtoint(ac+$258)/4)); label11.Caption:=inttostr(doaddtoint(ac+$254-8)); form1.Ba1.Max:=doaddtoint(ac+$254); ai_ga:=doaddtoint(ac+$258+4); ai_gb:=doaddtoint(ac+$258+4); form1.Ba1.Position:=Trunc(doaddtoint(ac+$254) / 2); form1.Memo1.Lines.Add('初始化成功!'); form1.sb1.Panels[0].Text:='初始化完成!启动-->开启外挂'; button2.Enabled :=true; button4.Enabled :=true; button5.Enabled :=true; button6.Enabled :=true; button1.Enabled :=false; end else begin form1.Memo1.Lines.Add('初始化失败!'); form1.Memo1.Lines.Add(''); end; end; end; procedure TForm1.Timer1Timer(Sender: TObject); begin SendMessage(h_cal,WM_KEYDOWN,vk_f2,0); SendMessage(h_cal,WM_KEYUP,vk_f2,0); form1.sb1.Panels[0].Text :='攻击中...'; end; procedure TForm1.ba1Change(Sender: TObject); begin edit1.Text:=inttostr(ba1.Position); end; procedure TForm1.Timer2Timer(Sender: TObject); begin if form1.ba1.Position>doaddtoint(ac+$254) then begin SendMessage(h_cal,WM_KEYDOWN,vk_f3,0); SendMessage(h_cal,WM_KEYUP,vk_f3,0); y_id:=y_id+1; form1.sb1.Panels[1].Text :='已吃红['+inttostr(y_id)+']个'; end; if strtoint(form1.edit2.Text)>doaddtoint(ac+$258) then begin SendMessage(h_cal,WM_KEYDOWN,vk_f4,0); SendMessage(h_cal,WM_KEYUP,vk_f4,0); form1.sb1.Panels[0].Text :='吃下蓝药物Oo...'; end; timer2.Enabled :=false; end; procedure TForm1.Timer3Timer(Sender: TObject); begin SendMessage(h_cal,WM_KEYDOWN,vk_f6,0); SendMessage(h_cal,WM_KEYUP,vk_f6,0); end; procedure TForm1.Timer4Timer(Sender: TObject); begin SendMessage(h_cal,WM_KEYDOWN,vk_f7,0); SendMessage(h_cal,WM_KEYUP,vk_f7,0); end; procedure TForm1.Timer5Timer(Sender: TObject); begin SendMessage(h_cal,WM_KEYDOWN,vk_f8,0); SendMessage(h_cal,WM_KEYUP,vk_f8,0); end; procedure TForm1.Timer7Timer(Sender: TObject); begin form1.Label9.Caption :=inttostr(doaddtoint(ac+$254)); form1.Label10.Caption :=inttostr(doaddtoint(ac+$258)); // form1.Label10.Caption :=inttostr(doaddtoint(ac+$79b)); //TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0),strtoint(edit1.Text )),strtoint(edit1.Text)); if (ck6.Checked=true) then begin // if 0<>doaddtoint(ac+$79b) then if 0=doaddtoint(ac+$79b) then begin if ck2.Checked=true then begin SendMessage(h_cal,WM_KEYDOWN,vk_tab,0); SendMessage(h_cal,WM_KEYUP,vk_tab,0); form1.sb1.Panels[0].Text :='正在查找怪物Oo。'; SendMessage(h_cal,WM_KEYDOWN,vk_f5,0); SendMessage(h_cal,WM_KEYUP,vk_f5,0); timer_one:=180; timer6.Enabled :=false; timer6.Enabled :=true; end; end; end else begin if ai_ga<>ai_gb then begin ai_gb:=ai_ga; if ck2.Checked=true then begin SendMessage(h_cal,WM_KEYDOWN,vk_tab,0); SendMessage(h_cal,WM_KEYUP,vk_tab,0); form1.sb1.Panels[0].Text :='没看见怪物,正在查找怪物Oo。'; SendMessage(h_cal,WM_KEYDOWN,vk_f5,0); SendMessage(h_cal,WM_KEYUP,vk_f5,0); timer_one:=180; timer6.Enabled :=false; timer6.Enabled :=true; end; end; end; ////////////////////////// if form1.ba1.Position>doaddtoint(ac+$254) then begin if ck3.Checked=true then begin timer1.Interval :=1; form1.Timer2.Enabled :=true; end else begin timer1.Interval :=1; form1.Timer2.Enabled :=true; end; if ck7.Checked=true then begin if strtoint(form1.edit14.Text)>doaddtoint(ac+$254) then begin // TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0),strtoint(s_proc )),strtoint(s_proc)); // button3.Click; // Form1.Show; memo1.Lines.Add('发现危险,急速吃下红药Oo!['+inttostr(y_id)+']'); SendMessage(h_cal,WM_KEYDOWN,vk_f1,0); SendMessage(h_cal,WM_KEYUP,vk_f1,0); y_id:=y_id+1; //form1.sb1.Panels[0].Text:='吃下红药Oo...['+inttostr(y_id)+']个'; form1.sb1.Panels[1].Text:='共['+inttostr(y_id)+']个'; end; end; if ck2.Checked=true then begin if strtoint(edit11.Text)>doaddtoint(ac+$254) then begin TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0),strtoint(s_proc )),strtoint(s_proc)); button3.Click; Form1.Show; memo1.Lines.Add('发现危险,关闭游戏!'); end; if strtoint(edit12.Text)-40<Y_ID begin TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0),strtoint(s_proc )),strtoint(s_proc)); button3.Click; Form1.Show; memo1.Lines.Add('没药啦,关闭游戏!'); end; end; end; if strtoint(edit2.Text)>doaddtoint(ac+$258) then begin form1.Timer2.Enabled :=true; end; ai_ga:=doaddtoint(ac+$258+4); end; procedure TForm1.Button2Click(Sender: TObject); var query_thread_id: Cardinal; begin button2.Enabled :=false; button3.Enabled :=true; form1.timer3.Interval :=strtoint(form1.edit3.Text)*1000; form1.timer7.Interval :=strtoint(form1.edit7.Text); baohb:=strtoint(form1.edit12.Text); y_id:=0; form1.timer8.Interval :=strtoint(form1.edit6.Text)*1000; query_thread_handle1 := CreateThread(nil, 0, @Query, nil, 0, query_thread_id); //query_thread_handle2 := CreateThread(nil, 0, @qhy, nil, 0, query_thread_id); end; procedure TForm1.Button3Click(Sender: TObject); begin timer1.Enabled:=false; timer2.Enabled:=false; timer3.Enabled:=false; timer4.Enabled:=false; timer5.Enabled:=false; timer6.Enabled:=false; timer7.Enabled:=false; timer8.Enabled:=false; button2.Enabled :=true; button3.Enabled :=false; TerminateThread(query_thread_handle1, 0); form1.sb1.Panels[0].Text :='停止!'; end; procedure TForm1.ck2Click(Sender: TObject); begin if ck2.Checked =true then begin ck1.Checked :=false; ck3.Checked :=false ; end; end; procedure TForm1.ck1Click(Sender: TObject); begin if ck1.Checked =true then begin ck2.Checked :=false; ck3.Checked :=false ; end else //ck2.Checked :=true; end; procedure TForm1.ck3Click(Sender: TObject); begin if ck3.Checked =true then begin ck1.Checked :=false; ck2.Checked :=false ; ck6.Checked :=false ; edit7.Text :=inttostr(200); end end; procedure TForm1.Timer6Timer(Sender: TObject); begin SendMessage(h_cal,WM_KEYDOWN,vk_tab,0); SendMessage(h_cal,WM_KEYUP,vk_tab,0); end; procedure TForm1.FormCreate(Sender: TObject); var f:textfile; ss:string; ahwnd:hwnd; bhwnd:hwnd; stxet:array[0..254]of char; str_aa:string; apath:string; begin timer_one:=180; button2.Enabled :=false; button3.Enabled :=false; button4.Enabled :=false; button5.Enabled :=false; button6.Enabled :=false; apath:=Extractfiledir(paramstr(0))+'\'+'system.dat'; bb:=true; assignfile(f,apath); reset(f); while not eof(f) do begin id:=id+1; readln(f,ss); form1.Listbox1.Items.Add(ss); label17.Caption:=inttostr(id); end; closefile(f); xiel:= strtoint64(form1.Listbox1.Items[0]); xiel_tow:= strtoint64(form1.Listbox1.Items[1]); end; procedure TForm1.Timer8Timer(Sender: TObject); begin timer1.Enabled :=false; SendMessage(h_cal,WM_KEYDOWN,vk_f5,0); SendMessage(h_cal,WM_KEYUP,vk_f5,0); timer_one:=timer_one-10; form1.sb1.Panels[0].Text:=inttostr(timer_one); sleep(1500); timer1.Enabled :=true; end; procedure TForm1.N4Click(Sender: TObject); begin form1.Hide; end; procedure TForm1.N2Click(Sender: TObject); begin ShowWindow(h_cal,SW_show); end; procedure TForm1.Button6Click(Sender: TObject); begin KillTask('elementclient.exe'); end; function TForm1.KillTask(ExeFileName: string): Integer; const PROCESS_TERMINATE = {post.content}01; var ContinueLoop: boolean; FSnapshotHandle: THandle; FProcessEntry32: TProcessEntry32; begin Result := 0; FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); FProcessEntry32.dwSize := SizeOf(FProcessEntry32); ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32); while Integer(ContinueLoop) <> 0 do begin if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) = UpperCase(ExeFileName))) then Result := Integer(TerminateProcess( OpenProcess(PROCESS_TERMINATE, BOOL(0), FProcessEntry32.th32ProcessID), 0)); ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32); end; CloseHandle(FSnapshotHandle); end; procedure TForm1.Button5Click(Sender: TObject); begin ShowWindow(h_cal,SW_hide); form1.Hide; end; procedure TForm1.CoolTrayIcon1Click(Sender: TObject); begin begin if bb=true then begin Form1.Hide; bb:=false;end else begin Form1.Show; bb:=true; end; end; end; procedure TForm1.N9Click(Sender: TObject); begin form1.Show; end; procedure TForm1.N5Click(Sender: TObject); var query_thread_id: Cardinal; begin button2.Enabled :=false; button3.Enabled :=true; query_thread_handle1 := CreateThread(nil, 0, @Query, nil, 0, query_thread_id); end; procedure TForm1.N6Click(Sender: TObject); begin timer1.Enabled:=false; timer2.Enabled:=false; timer3.Enabled:=false; timer4.Enabled:=false; timer5.Enabled:=false; timer6.Enabled:=false; timer7.Enabled:=false; timer8.Enabled:=false; button2.Enabled :=true; button3.Enabled :=false; TerminateThread(query_thread_handle1, 0); form1.sb1.Panels[0].Text:='停止!'; end; procedure TForm1.N7Click(Sender: TObject); begin ShowWindow(h_cal,SW_show); end; procedure TForm1.N8Click(Sender: TObject); begin ShowWindow(h_cal,SW_hide); form1.Hide; end; procedure TForm1.Button4Click(Sender: TObject); begin button1.Enabled :=true; button2.Enabled :=false; end; procedure TForm1.Button7Click(Sender: TObject); begin end; procedure TForm1.N3Click(Sender: TObject); begin ShowWindow(h_cal,SW_hide); end; procedure TForm1.N11Click(Sender: TObject); begin TerminateProcess(OpenProcess(PROCESS_TERMINATE, BOOL(0),strtoint(s_proc )),strtoint(s_proc)); end; procedure TForm1.N10Click(Sender: TObject); begin form1.Hide; end; procedure TForm1.N12Click(Sender: TObject); begin form1.Close; end; end.

评论