còn buff có lợi , có hại thì chắc làm cái 2 cái data chứa 2 nhóm này, chứ làm test đủ kiểu mệt quá

Cần check buff có hại để giải độc kịp thời, mà phải mất đến 4-5s để biết là có bị độc hay hút mana không thì còn có tác dụng gì nữatìm được mảng buff hiện tại của char khá dễ, bằng cách cho buff và search số buff = 1, 2, ... sẽ ra offset của mảng
OFFSET :
base + 1c + 20 + 360 : số buff hiện có
base + 1c + 20 + 35C : mảng begin
đây là 1 mảng liên tiếp nhau nhau, và là mảng kiểu short int, mỗi phẩn tử 2 byte, lưu số ID của buff
Đến đây mới khó, từ cái ID này làm sao biết được buff này của skill nào, sao mà phân biệt được buff này có lợi hay hại
Mời các bạn chém tiếp, dò từ addr code : 00503E12
-----------------
Chán chết![]()
, từ ID băm vào mảng lấy ra chẳng có offset nào sử dụng được ngoài cái offset tên, còn lại toàn 0 và 1
Có 1 cách để xem buff là lợi hay hại bằng cách so sánh chỉ số nhân vật trước khi được buff và sau khi dc buff anh ạ, em nhớ k nhầm thì các chỉ số này read được mà![]()
Các buff có lợi chủ yếu tăng chỉ số nhân vật
Các buff có hại chủ yếu do mob hoặc boss gây ra và phần lớn có liên quan đến HP, 1 vài cái hút mana thì có liên quan đến MP.Anh thử check số buff hiện có và thêm 1 biến thời gian, nếu sau xx giây mà HP hoặc MP tụt đều đều (VD tầm 200 HP hoặc MP mỗi lần tụt) và duy trì trong 5~6s thì là buff có hại ( với MOB thì thường gây sát thương kéo dài tàm 3~5s tùy loại) còn boss thì có thể lâu hơn, cách này tuy là thủ công nhưng mà cũng có ích khi chưa tìm ra địa chỉ lưu cái offset có lợi hoặc có hại
À quên mất, còn 1 số buff có hại nữa là gây giảm tấn công, phòng thủ VL, kháng phép nữa (phải kiểm tra tất cả những gì có thể làm nhân vật giảm chỉ số)
Cần check buff có hại để giải độc kịp thời, mà phải mất đến 4-5s để biết là có bị độc hay hút mana không thì còn có tác dụng gì nữa
phù bây giờ mới rảnh, bắt tay vào nghiên cứu tiếp nào. Phen này phải chuyển sang C# hay C++ thôi. Ai có code C# hay C++ một số hàm cơ bản của auto send mình với. Nhất là mấy hàm memory và cách inject trong C nhé
CString CCharacter::GetInvName(int ind) { int tmp, j, i_begin, type; CString s = _T(""); MEM.ReadVal(AddBase20 + 0xC3C, tmp); MEM.ReadVal(tmp + 0xC, i_begin); MEM.ReadVal(i_begin + ind * 4, tmp); if (tmp != 0) { MEM.ReadVal(tmp + 0x4, type); switch (type) { case 0x9://potion MEM.ReadVal(tmp + 0x54, j); j += 0xC; break; case 0xF://vu khi MEM.ReadVal(tmp + 0xE4, j); j += 0xC; break; case 0x24://phu MEM.ReadVal(tmp + 0xB8, j); j += 0x4; break; case 0x1B://thuoc Pet case 0x13://the van may, item dac biet MEM.ReadVal(tmp + 0x4C, j); j += 0x4; break; default: return s; } MEM.ReadVal(j, s); } return s; }Hoặc, còn 1 cách nữa là dùng inject code rồi sau đó nhận giá trị trả về đưa vào auto để read, vấn đề này hơi phức tạp nên nếu cần thiết sẽ tám chủ đề khác
00430C90 - 56 - push esi 00430C91 - 8b 74 24 08 - mov esi,[esp+08] <--số ID 00430C95 - 8b c6 - mov eax,esi <--eax = ID 00430C97 - 33 d2 - xor edx,edx <--edx = 0 00430C99 - f7 b1 dc 00 00 00 - div [ecx+000000dc] <-- chia với max, băm đây :)), sau khi chia eax = phần nguyên, edx = số dư 00430C9F - 8b 81 d0 00 00 00 - mov eax,[ecx+000000d0] <--eax = begin 00430CA5 - 8b 14 90 - mov edx,[eax+edx*4] <-- lấy về phần tử đầu trong mảng băm 00430CA8 - 85 d2 - test edx,edx <-- có gia trị 00430CAA - 74 0b - je 00430cb7 00430CAC - 39 72 08 - cmp [edx+08],esi <-- kiểm tra ID trùng với ID cần băm nếu không sẽ di chuyển tiếp qua object sau 00430CAF - 74 0c - je 00430cbd 00430CB1 - 8b 12 - mov edx,[edx] 00430CB3 - 85 d2 - test edx,edx 00430CB5 - 75 f5 - jne 00430cac 00430CB7 - 33 c0 - xor eax,eax 00430CB9 - 5e - pop esi 00430CBA - c2 04 00 - ret 0004 <-- return không có giá trị 00430CBD - 8b 4a 04 - mov ecx,[edx+04] 00430CC0 - 5e - pop esi 00430CC1 - 8b 01 - mov eax,[ecx] 00430CC3 - c2 04 00 - ret 0004 <--return giá trị addr của string chức năngVD cụ thể cho hàm kiểm tra level của item vận may (thẻ vận may, thẻ may mắn, hộp vận may, sao vận may)
BOOL CCharacter::CheckLevelVanMay(int ID) { switch (ID) { case 0x2B54: case 0x2B55: return TRUE; case 0x2B56: case 0x2B57: return CharLevel >= 20; case 0x2B58: case 0x2B59: return CharLevel >= 50; case 0x2B5A: case 0x2B5B: case 0x2B5C: return CharLevel >= 70; case 0x2B5D: case 0x2B5E: case 0x2B5F: return CharLevel >= 90; } return FALSE; }
Bài viết này được chỉnh sửa bởi autoeasy: 02 July 2010 - 01:46 AM
Bài viết này được chỉnh sửa bởi heroceasar7384: 20 July 2010 - 10:35 AM
Func selectTarget($targetId, $pid) ;Select the NPC/Mob/Player denoted by targetId local $packet, $packetSize $packet = '0200' $packet &= _hex($targetId) $packetSize = 6 sendPacket($packet, $packetSize, $pid) EndFunc
Bài viết này được chỉnh sửa bởi autoeasy: 27 September 2010 - 07:47 PM
Bài viết này được chỉnh sửa bởi heroceasar7384: 28 September 2010 - 09:38 AM
crash auto là do số lần gọi inject chứ kg phải do hàm inject nhiều hay ít, có thể giải thuật của em chưa hoàn chỉnh thui.
dạo này anh không online yahoo ban ngày được, do công việc
Em đã có addr của hàm sendpacket rùi thì em debug trong hàm này, search lệnh ret , ghi nhớ addr chổ này, sau đó tạo break point ngay đây, thì mỗi lần game xử lý gì cần sendpacket thì nó sẽ ngừng ở đây, em cho run tiếp thì sẽ trở về hàm gọi sendpacket, thường thì packet lưu trong esi (có lệnh push length (độ dài packet), push esi/edi/ebx..), xem giá trị esi rùi xem tại ô nhớ này dạng array byte thì sẽ biết được packet là gì, nhớ đổi byte thấp byte cao ngược lại.
Hiện tại anh vẫn giữ những hàm inject cũ vì nó có tính toán một vài điều kiện nữa mới gọi sendpacket, vậy giúp server game đỡ quá tải, chỉ có hàm cho pet mới cần dùng sendpacket
$OPcode &= '60' ;PUSHAD $OPcode &= 'B8'&_hex($sendPacketFunction);MOV EAX, sendPacketAddress $OPcode &= '8B0D'&_hex($BASEADD);MOV ECX, DWORD PTR [revBaseAddress] $OPcode &= '8B4920' ;MOV ECX, DWORD PTR [ECX+20] $OPcode &= 'BF'&_hex($packetAddress[0]);MOV EDI, packetAddress //src pointer $OPcode &= '6A'&_hex($packetSize,2);PUSH packetSize //size $OPcode &= '57' ;PUSH EDI $OPcode &= 'FFD0' ;CALL EAX $OPcode &= '61' ;POPAD $OPcode &= 'C3' ;RET
Bài viết này được chỉnh sửa bởi heroceasar7384: 29 September 2010 - 10:37 AM
Bài viết này được chỉnh sửa bởi bhduong: 29 September 2010 - 10:42 PM