Open Stredit and load your memory dump. Usually, Stredit still works i dịch - Open Stredit and load your memory dump. Usually, Stredit still works i Việt làm thế nào để nói

Open Stredit and load your memory d

Open Stredit and load your memory dump. Usually, Stredit still works in new versions but sometime it doesn't, like lately. (v115 or something) In this case, you need to wait for Diamondo to update his tool. You can maybe find CWvsContext__OnPacket but it depends.

So after you've opened stredit with your memory dump, go into the search box in filtering and enter this: (remove quotes obviously)
"content like '%1000 generation%'
there are other strings you can use but 1000 generation is the one i alway use and i got used to it. You should get 1 result after that. Get it's string ID and go back to ida (memory dump, not v95) and switch to the hex view. ALT + I (Immediate value) and enter the ID. You should tick the find all occurences box. It's not needed but i recommend it, i'll assume you did in this case.

After the search is done, you will get a list of all the functions where that ID is called. You will need to search abit but usually there is only one function with that ID for 1000 generation. Select one of the function that starts with sub_ and press F5. (Decompile to pseudocode C) The new window that will popup might be scary at first, but don't fear, it's fairly simple. Note that nothing is named, it'll all be named like v33, v2, v12 etc. Now, once you've decompiled that function into pseudocode C, your cursor will be positioned already at the place where that ID was found. If it looks anything like this,
vXX = sub_XXXXXX(&vXX, 4918); (Replace X's with numbers, they change all the time and or often)
it's most likely a StringPool call. StringPool is the object where all the strings in the game are stored (Stredit looks for all those calls and make a huge list of them or something like that)
You can safely rename the function for StringPool::GetString by positioning your cursor on that function and pressing CTRL + N. Now you may be wondering, how did i know the name for this function? From nexon's mistake, the v95 leaked pdb.

Now that you've named that function, check the line just above it, it'll be something like sub_XXXXXX, rename this to StringPool::GetInstance. Now you've named 2 functions. But what we really want to find for now is CWvsContext__OnPacket. (Name gotten from v95 pdb again) What that function is is basically the main handler for any packet below 114 or something around that, i forgot. When i say handler, i don't mean RECV packets, i mean send packets. If you don't already know, when you write send packets in your source, it has to be handled by the client. When packets are handled in the source, it's the same as send packets but for the client. Instead of reading this time though, it's writing. Kinda like a response after a send packet.

Anyhow, to find CWvsContext, if you used 1000 generations for your reference string, it shouldn't be hard. Simply scroll all the way to the top and place your cursor on the very first line where the function is declared and press X on your keyboard. This will open the xref window, basically, everywhere where that function is called. You should have only 1 call for that. Simply select it and press enter. You should find yourself inside a function that has many, many cases. If so, congrats, you've found one of the main handler, CWvsContext__OnPacket. CField__OnPacket can wait for now, you'd be better naming a few important functions first, the decoders.

If you got a basic understanding so far, then you shouldn't have problems finding some decoders. Before continuing and reading, try to find them by going into CWvsContext__OnPacket in your v95 ida window.

Ok, tried? Yes? Failed to find them? Go into the first function for the first opcode case in CWvsContext but first, right click on one of the case and select hexadecimal if your opcode values in your source are in hex. Else, keep at decimal. Also before going into that function, try naming a few functions after the cases by referring to your opcodes. (Of course, having an updated list of opcodes from the version right before the one you are analysis atm is rather useful..) You can either take the names you can get from the v95 leak, basically the names nexon uses but i usually just call the functions by their opcode name in like in my source since i can't get used to nexon's name to be honest.

After you've named a few, check the parameters for INVENTORY_OPERATION and if you look carefully, you will notice that a3 is the actual packet object to decode. You can go ahead and rename it to something like PACKET or something if you want to. Remember that it's the second parameter. Go inside INVENTORY_OPERATION's function and while being at the top, rename the second parameter to something like PACKET again. Scroll down, basically anywhere you see PACKET being called is most likely a decoder. Use your v95 pdb to assist you. Just from INVENTORY_OPERATION, you can get CInPacket::Decode1 and CInPacket::Decode2, which is basically decoding a byte and a short. There are other ones too: CInPa
0/5000
Từ: -
Sang: -
Kết quả (Việt) 1: [Sao chép]
Sao chép!
Mở Stredit và tải kết xuất bộ nhớ của bạn. Thông thường, Stredit vẫn còn hoạt động trong phiên bản mới nhưng đôi khi nó không, giống như gần đây. (v115 hoặc một cái gì đó) Trong trường hợp này, bạn cần phải chờ đợi cho Diamondo để cập nhật công cụ của ông. Bạn có lẽ có thể tìm thấy CWvsContext__OnPacket, nhưng nó phụ thuộc.Vì vậy sau khi bạn đã mở stredit với kết xuất bộ nhớ của bạn, hãy vào hộp tìm kiếm trong lọc và nhập này: (loại bỏ dấu ngoặc kép rõ ràng)"nội dung giống như '% thế hệ 1000% 'có dây khác bạn có thể sử dụng nhưng thế hệ 1000 là một i luôn luôn, sử dụng và tôi đã nhận sử dụng để nó. Bạn sẽ nhận được 1 quả sau đó. Nhận được nó của chuỗi ID và trở về ida (kết xuất bộ nhớ, không v95) và chuyển sang xem hex. ALT + I (giá trị ngay lập tức) và nhập vào ID. Bạn nên đánh dấu các tìm thấy tất cả chú ô. Nó không phải là cần thiết, nhưng tôi khuyên bạn nên nó, tôi sẽ giả định bạn đã làm trong trường hợp này. Sau khi tìm kiếm xong, bạn sẽ nhận được một danh sách tất cả các chức năng mà ID đó được gọi là. Bạn sẽ cần phải tìm kiếm abit mà thường chỉ có một chức năng với ID đó cho thế hệ 1000. Chọn một trong các chức năng bắt đầu với sub_ và nhấn F5. (Ngược với mã giả C) Cửa sổ mới sẽ bật lên có thể đáng sợ lúc đầu tiên, nhưng không sợ hãi, nó là khá đơn giản. Lưu ý rằng không có gì đặt tên, nó sẽ đều được đặt tên như v33, v2, v12 vv. Bây giờ, một khi bạn đã decompiled chức năng đó vào mã giả C, con trỏ của bạn sẽ được định vị đã ở nơi nơi mà ID đã được tìm thấy. Nếu nó có vẻ bất cứ điều gì như thế này, vXX = sub_XXXXXX (& vXX, 4918); (Thay x với số lượng, họ đã thay đổi tất cả thời gian và hay thường)nó rất có thể là một cuộc gọi StringPool. StringPool là đối tượng nơi tất cả các chuỗi trong các trò chơi đang được lưu trữ (Stredit trông cho tất cả các cuộc gọi và làm cho một danh sách rất lớn của họ hoặc một cái gì đó như thế)Bạn một cách an toàn có thể đổi tên các chức năng cho StringPool::GetString bằng cách định vị con trỏ của bạn trên chức năng đó và nhấn CTRL + N. Bây giờ bạn có thể tự hỏi, làm thế nào đã làm tôi biết tên cho chức năng này? Từ sai lầm của nexon, v95 rò rỉ pdb.Bây giờ mà bạn đã đặt tên chức năng đó, hãy kiểm tra các dòng chỉ ở trên nó, nó sẽ là một cái gì đó như sub_XXXXXX, đổi tên này để StringPool::GetInstance. Bây giờ bạn đã đặt tên 2 chức năng. Nhưng những gì chúng tôi thực sự muốn tìm cho bây giờ là CWvsContext__OnPacket. (Tên nhận từ v95 pdb một lần nữa) Chức năng đó là những gì cơ bản là bộ xử lý chính cho bất kỳ gói dưới 114 hoặc một cái gì đó, tôi quên. Khi tôi nói rằng xử lý, tôi không có nghĩa là NHẬN gói, tôi có nghĩa là gửi gói tin. Nếu bạn không biết, khi bạn viết gửi gói tin trong mã nguồn của bạn, nó đã được xử lý bởi các khách hàng. Khi gói tin được xử lý trong mã nguồn, nó không giống như gửi gói tin nhưng cho khách hàng. Thay vì đọc thời gian này mặc dù, nó là bằng văn bản. Kinda giống như một phản ứng sau khi một gói dữ liệu gửi.Nhưng dù sao, để tìm CWvsContext, nếu bạn đã sử dụng thế hệ 1000 cho chuỗi tham khảo của bạn, nó không nên cứng. Đơn giản chỉ cần di chuyển đến đầu trang và đặt con trỏ của bạn trên dòng đầu tiên mà các chức năng được khai báo và nhấn X trên bàn phím của bạn. Điều này sẽ mở cửa sổ xref, về cơ bản, ở khắp mọi nơi nơi mà chức năng được gọi là. Bạn cần phải có chỉ có 1 cuộc gọi cho điều đó. Đơn giản chỉ cần chọn nó và nhấn enter. Bạn nên tìm thấy chính mình trong một chức năng có nhiều, rất nhiều trường hợp. Nếu vậy, chúc mừng, bạn đã tìm thấy một bộ xử lý chính, CWvsContext__OnPacket. CField__OnPacket có thể chờ đợi để bây giờ, bạn sẽ là tốt hơn đặt tên một vài chức năng quan trọng đầu tiên, các bộ giải mã.Nếu bạn có một cơ bản sự hiểu biết cho đến nay, sau đó bạn không nên có vấn đề về việc tìm kiếm một số bộ giải mã. Trước khi tiếp tục và đọc, cố gắng để tìm thấy chúng bằng cách đi vào CWvsContext__OnPacket trong v95 của bạn cửa sổ ida.OK, đã cố gắng? Có? Không thể tìm thấy chúng? Đi vào chức năng đầu tiên đối với trường hợp opcode đầu tiên ở CWvsContext, nhưng đầu tiên, nhấp chuột phải vào một trong các trường hợp và chọn hệ thập lục phân nếu giá trị opcode của bạn trong mã nguồn của bạn đang ở trong hex. Khác, Giữ số thập phân. Còn trước khi đi vào chức năng đó, hãy thử đặt tên một vài chức năng sau khi các trường hợp bằng cách tham khảo mã của bạn. (Tất nhiên, có một danh sách Cập Nhật của mã từ phiên bản ngay trước khi một trong những bạn đang phân tích atm là khá hữu ích...) Bạn có thể hoặc mất tên bạn có thể nhận được từ sự rò rỉ v95, về cơ bản các tên nexon sử dụng nhưng tôi thường chỉ cần gọi chức năng bởi opcode tên của họ trong như trong mã nguồn của tôi kể từ khi tôi không thể sử dụng để tên của nexon để được trung thực.Sau khi bạn đã đặt tên một vài, kiểm tra các thông số cho INVENTORY_OPERATION và nếu bạn nhìn một cách cẩn thận, bạn sẽ nhận thấy rằng a3 là đối tượng thực tế gói tin để giải mã. Bạn có thể đi trước và đổi tên nó một cái gì đó như GÓI hoặc một cái gì đó nếu bạn muốn. Hãy nhớ rằng nó là tham số thứ hai. Đi bên trong chức năng của INVENTORY_OPERATION và trong khi đang ở trên đầu, đổi tên tham số thứ hai để một cái gì đó giống như GÓI một lần nữa. Di chuyển xuống, về cơ bản bất cứ nơi nào bạn thấy các gói dữ LIỆU được gọi là nhiều khả năng là một bộ giải mã. Sử dụng pdb v95 của bạn để hỗ trợ bạn. Chỉ từ INVENTORY_OPERATION, bạn có thể nhận được CInPacket::Decode1 và CInPacket::Decode2, mà về cơ bản giải mã một byte và một đoạn ngắn. Có những người khác quá: CInPa
đang được dịch, vui lòng đợi..
Kết quả (Việt) 2:[Sao chép]
Sao chép!
Mở Stredit và tải đổ bộ nhớ của bạn. Thông thường, Stredit vẫn hoạt động trong các phiên bản mới nhưng đôi khi nó không, giống như thời gian gần đây. (v115 hoặc một cái gì đó) Trong trường hợp này, bạn cần phải chờ đợi cho Diamondo để cập nhật công cụ của mình. Bạn có thể có thể tìm thấy CWvsContext__OnPacket nhưng nó phụ thuộc.

Vì vậy, sau khi bạn đã mở stredit với bãi chứa bộ nhớ của bạn, đi vào hộp tìm kiếm trong lọc và nhập thế này: (xóa trích dẫn rõ ràng)
"nội dung như '% 1000 thế hệ%'
có dây khác bạn có thể sử dụng nhưng 1000 thế hệ là một trong tôi hoài sử dụng và tôi đã quen với nó. bạn sẽ nhận được 1 kết quả sau đó. nhận nó là chuỗi ID và trở lại ida (dump bộ nhớ, không v95) và chuyển sang xem hex. ALT + I (giá trị tức thời) và nhập ID. bạn nên đánh dấu vào tất cả lần xuất hiện hộp. nó không cần thiết, nhưng tôi khuyên bạn nên nó, tôi sẽ giả sử bạn đã làm trong trường hợp này.

Sau khi tìm kiếm được thực hiện, bạn sẽ nhận được một danh sách của tất cả các chức năng mà ID đó được gọi. Bạn sẽ cần phải tìm kiếm của abit nhưng thường chỉ có một chức năng với ID cho 1000 thế hệ. Chọn một trong những chức năng bắt đầu với sub_ và nhấn F5. (dịch ngược để giả C) cửa sổ mới sẽ bật lên có thể là đáng sợ lúc đầu, nhưng không sợ hãi, nó khá đơn giản. Lưu ý rằng không có gì được đặt tên, tất cả sẽ được đặt tên như V33, v2, v12, vv Bây giờ, khi bạn đã dịch ngược chức năng vào giả C, con trỏ chuột sẽ được định vị đã được tại nơi ID đã được tìm thấy. Nếu nó trông giống bất cứ điều gì như thế này,
vXX = sub_XXXXXX (& vXX, 4918); (Thay thế X với số lượng, họ thay đổi tất cả các thời gian và hoặc thường xuyên)
nó có thể là một cuộc gọi StringPool. StringPool là đối tượng mà tất cả các chuỗi trong các trò chơi được lưu trữ (Stredit vẻ cho tất cả những cuộc gọi và thực hiện một danh sách rất lớn của họ hoặc một cái gì đó như thế)
Bạn có thể an toàn đổi tên hàm cho StringPool :: GetString bởi vị trí con trỏ chuột vào chức năng mà và nhấn Ctrl + N. Bây giờ bạn có thể tự hỏi, làm thế nào tôi biết được tên cho chức năng này? Từ sai lầm của Nexon, các v95 bị rò rỉ pdb.

Bây giờ bạn đã đặt tên chức năng đó, kiểm tra dòng ngay phía trên nó, nó sẽ có một cái gì đó giống như sub_XXXXXX, đổi tên này để StringPool :: getInstance. Bây giờ bạn đã đặt tên 2 chức năng. Nhưng những gì chúng ta thực sự muốn tìm cho bây giờ là CWvsContext__OnPacket. (Tên nhận từ v95 pdb lại) gì chức năng mà là về cơ bản là xử lý chính cho bất kỳ gói dưới 114 hoặc một cái gì đó xung quanh đó, tôi quên. Khi tôi nói xử lý, tôi không có nghĩa là các gói recv, tôi có nghĩa là gửi các gói tin. Nếu bạn chưa biết, khi bạn viết thư gửi các gói tin trong mã nguồn của bạn, nó phải được xử lý bởi các khách hàng. Khi gói tin được xử lý trong nguồn, nó giống như gửi các gói tin nhưng đối với các khách hàng. Thay vì đọc thời gian này mặc dù, nó bằng văn bản. Kinda giống như một phản ứng sau khi một gói tin gửi.

Nhưng dù sao, để tìm CWvsContext, nếu bạn sử dụng 1000 thế hệ cho chuỗi tham khảo của bạn, nó không phải là khó. Đơn giản chỉ cần di chuyển tất cả các cách để trên đầu và đặt con trỏ vào dòng đầu tiên, nơi hàm được khai báo và báo chí X trên bàn phím của bạn. Điều này sẽ mở cửa sổ chiếu ngoài, về cơ bản, ở khắp mọi nơi mà hàm đó được gọi. Bạn chỉ nên có 1 cuộc gọi cho điều đó. Đơn giản chỉ cần chọn nó và nhấn Enter. Bạn sẽ thấy mình bên trong một hàm có nhiều, rất nhiều trường hợp. Nếu vậy, chúc mừng bạn đã tìm thấy một trong những bộ xử lý chính, CWvsContext__OnPacket. CField__OnPacket thể chờ đợi cho bây giờ, bạn muốn được tốt hơn đặt tên một vài chức năng quan trọng đầu tiên, các bộ giải mã.

Nếu bạn có một sự hiểu biết cơ bản cho đến nay, sau đó bạn không nên có vấn đề tìm kiếm một số bộ giải mã. Trước khi tiếp tục và đọc, cố gắng để tìm thấy chúng bằng cách đi vào trong cửa sổ CWvsContext__OnPacket ida v95 của bạn.

Ok, đã cố gắng? Vâng? Không thể tìm thấy chúng? Đi vào các chức năng đầu tiên cho trường hợp đầu tiên trong opcode CWvsContext nhưng lần đầu tiên, click chuột phải vào một trong các trường hợp và chọn hệ thập lục phân, nếu giá trị opcode của bạn trong mã nguồn của bạn là trong hex. Khác, giữ ở số thập phân. Ngoài ra trước khi đi sâu vào chức năng đó, hãy thử đặt tên một vài chức năng sau khi các trường hợp bằng cách tham khảo opcodes của bạn. (Tất nhiên, có một danh sách cập nhật của opcodes từ phiên bản ngay trước khi một trong những bạn đang phân tích atm là khá hữu ích ..) Bạn có thể lấy các tên mà bạn có thể nhận được từ sự rò rỉ v95, về cơ bản các tên sử dụng Nexon nhưng tôi thường chỉ gọi các chức năng theo tên opcode của họ trong như trong mã nguồn của tôi kể từ khi tôi không thể quen với tên của Nexon phải trung thực.

Sau khi bạn đã đặt tên một số ít, kiểm tra các thông số cho INVENTORY_OPERATION và nếu bạn nhìn kỹ, bạn sẽ nhận thấy rằng a3 là đối tượng gói tin thực tế để giải mã. Bạn có thể đi trước và đổi tên nó thành một cái gì đó giống như GÓI hay cái gì nếu bạn muốn. Hãy nhớ rằng đó là tham số thứ hai. Đi vào bên trong chức năng INVENTORY_OPERATION và trong khi được ở đầu trang, đổi tên các tham số thứ hai để một cái gì đó giống như GÓI nữa. Cuộn xuống, về cơ bản bất cứ nơi nào bạn nhìn thấy GÓI được gọi là nhiều khả năng một bộ giải mã. Sử dụng pdb v95 của bạn để hỗ trợ bạn. Chỉ cần từ INVENTORY_OPERATION, bạn có thể nhận được CInPacket :: Decode1 và CInPacket :: Decode2, mà về cơ bản giải mã một byte và một đoạn ngắn. Có những người khác quá: CInPa
đang được dịch, vui lòng đợi..
 
Các ngôn ngữ khác
Hỗ trợ công cụ dịch thuật: Albania, Amharic, Anh, Armenia, Azerbaijan, Ba Lan, Ba Tư, Bantu, Basque, Belarus, Bengal, Bosnia, Bulgaria, Bồ Đào Nha, Catalan, Cebuano, Chichewa, Corsi, Creole (Haiti), Croatia, Do Thái, Estonia, Filipino, Frisia, Gael Scotland, Galicia, George, Gujarat, Hausa, Hawaii, Hindi, Hmong, Hungary, Hy Lạp, Hà Lan, Hà Lan (Nam Phi), Hàn, Iceland, Igbo, Ireland, Java, Kannada, Kazakh, Khmer, Kinyarwanda, Klingon, Kurd, Kyrgyz, Latinh, Latvia, Litva, Luxembourg, Lào, Macedonia, Malagasy, Malayalam, Malta, Maori, Marathi, Myanmar, Mã Lai, Mông Cổ, Na Uy, Nepal, Nga, Nhật, Odia (Oriya), Pashto, Pháp, Phát hiện ngôn ngữ, Phần Lan, Punjab, Quốc tế ngữ, Rumani, Samoa, Serbia, Sesotho, Shona, Sindhi, Sinhala, Slovak, Slovenia, Somali, Sunda, Swahili, Séc, Tajik, Tamil, Tatar, Telugu, Thái, Thổ Nhĩ Kỳ, Thụy Điển, Tiếng Indonesia, Tiếng Ý, Trung, Trung (Phồn thể), Turkmen, Tây Ban Nha, Ukraina, Urdu, Uyghur, Uzbek, Việt, Xứ Wales, Yiddish, Yoruba, Zulu, Đan Mạch, Đức, Ả Rập, dịch ngôn ngữ.

Copyright ©2025 I Love Translation. All reserved.

E-mail: