Otázka:
Zpětné inženýrství funkce šifrování paketů ve hře
Renan Moura
2015-05-05 05:48:59 UTC
view on stackexchange narkive permalink

Snažím se vytvořit emulátor herního serveru pro konkrétní MMORPG (Perfect World). Znám základy fungování sítě a strukturu některých paketů, ale všechny jsou šifrovány, kromě uživatelského jména v přihlašovacím paketu.

Používám Olly, abych se pokusil najít funkce crypt pro pakety, které se odesílají z klienta na server, aby věděli, jak hra šifruje data, a potřebuji pomoc s nalezením funkce crypt. Během ladění jsem pořídil několik snímků obrazovky Olly a okomentoval, co jsem v kódu analyzoval.

Toto je předtím, než najdu volání k odeslání, když ve hře pošlu chatovou zprávu, vidím toto: / p>

b

Teď to bylo, když jsem našel funkci, která volá send, a výpis pro každý řádek této funkce až do volání send:

c

Mám více snímků obrazovky výpisu pro ostatní řádky, ale nemám pověst zveřejňovat více než dva odkazy najednou , takže ostatní pošlu později, pokud je někdo chce.

Moje otázka je, kde je funkce krypty? A jak to funguje v jazyce, jako je C ++?

Jeden odpovědět:
Dominik Antal
2015-05-05 16:11:02 UTC
view on stackexchange narkive permalink

Nejprve bych spustil statickou analýzu aplikace, jako je Findcrypt nebo ProtectID a PEID Kanal plugin, abych vyhledal použité statické hodnoty v různých šifrovacích algoritmech. Pokud něco najdete, zkontrolujte, která funkce k nim přistupuje pomocí křížových odkazů (X v IDA, CTRL + r v olly) a dostanete se k šifrovacím funkcím nebo alespoň blízko nich.

Pokud tento přístup selže, můžete začít sledovat v dynamickém debuggeru, jako je olly. Našli jste funkci odesílání, můžete začít sledovat zpět v zásobníku volání. Vyberte horní část zásobníku a klikněte na follow in disassembler, čímž se dostanete k funkci, která se nazývá funkce send. Umístěte zarážku na horní část této funkce. Opakujte to několikrát, vraťte se zpět do stromu volání a sledujte proměnné, se kterými se funkce volá, dokud neuvidíte data, která mají být šifrována.

Na druhém obrázku zobrazíte funkci, kterou volání odesílá ( ) se šifrovanými daty. Chcete-li se přiblížit metodě šifrování, měli byste se vrátit o více úrovní zpět.

Vyhledejte relevantní řetězce v binárním souboru (Shift + F12 v IDA), například: „klíč“, „krypta“, „heslo“, a křížový odkaz, abyste zjistili, která funkce je používá.

Můžete také dát bod zlomu hardwaru na data, o kterých víte, že budou v určitém okamžiku zašifrována, a zkontrolovat, kde k nim máte přístup.

Chcete-li také potvrdit, že aplikace používá statický klíč, můžete nastavit nové prostředí pro hru s jiným účtem na jiném počítači a zjistit, zda jsou šifrovaná data šifrována na stejné bajty, jaké jste našli na obrázku 1. Pokud je to stejné, šifrování používá statický klíč.

Existuje také několik příspěvků o této hře na ragezone a elitepvpers, pokud selžou všechny ostatní, mohou vám pomoci:)

děkuji za pomoc, ale nález nenašel nic. Vybral jsem horní část funkce, která volá odeslat, a umístil zarážku na horní část, ale znovu nepracoval. Jediný způsob, jak jsem něco našel, je to, že když nastavím zarážku paměti / harwaru na data, která budou zašifrována, jdu na část kódu, kde to vypadá jako smyčková funkce, která odečte chatovou zprávu jako " ahoj "," ello "," llo "atd., ale nemohu najít žádnou logiku kódu této funkce
Vyzkoušeli jste všechny detekční nástroje nebo jen našli šifrování? Je naprosto možné, že nic nezjistí, ale stále tu něco je. Co myslíš tím, že „ale nebudeš znovu pracovat“? Když uvidíte opakování, je to pravděpodobně kopírování těchto dat do jiné vyrovnávací paměti, měli byste sledovat, kam se kopírují, a také na to umístit HW zarážku. Pravděpodobně bude o něco později použit pro šifrování. Upravte prosím svoji otázku podle svého postupu tak podrobně, jak jen můžete.


Tyto otázky a odpovědi byly automaticky přeloženy z anglického jazyka.Původní obsah je k dispozici na webu stackexchange, za který děkujeme za licenci cc by-sa 3.0, pod kterou je distribuován.
Loading...