2007-02-11, 17:52
  #1
Medlem
Rizados avatar
Hittar inte någon bra plats för detta, flytta om det inte passar.

De nyare versionerna av ventrilo är spärrade på 8 användare och fungerar därför inte så bra och den gammla fungerande är just gammal och buggig. Dålig ljudkvalite och för mig som använder linux går det bara att lyssna på en person åt gången är några tråkiga saker. Därför har jag sett mig om efter lite crack och hittade ett här. Hade inte så stora förväntningar först men till min stora förvåning fungerade det! Jag fick inte längre felmeddelandet att servern är full. Problemet nu är att det går bara in en extra person innan servern klagar på att "The physical limit is reached" eller något i den stilen. Har kollat runt lite i PEExplorer (nån disassembler) och hittat felmeddelandet. Jag följde det bakåt och hittade nån jnz, något jag har för mig är en if sats? Testade att fylla ut med 90 där istället men det fungerar inte. Kan tillägga att jag knappt har nån aning om vad jag pysslar med alls. Men det vore roligt och ganska lärorikt att lösa detta problem, någon annan kanske känner sig lockad?
Citera
2007-02-11, 18:54
  #2
Medlem
blueCommands avatar
Citat:
Ursprungligen postat av Rizado
Hittar inte någon bra plats för detta, flytta om det inte passar.

De nyare versionerna av ventrilo är spärrade på 8 användare och fungerar därför inte så bra och den gammla fungerande är just gammal och buggig. Dålig ljudkvalite och för mig som använder linux går det bara att lyssna på en person åt gången är några tråkiga saker. Därför har jag sett mig om efter lite crack och hittade ett här. Hade inte så stora förväntningar först men till min stora förvåning fungerade det! Jag fick inte längre felmeddelandet att servern är full. Problemet nu är att det går bara in en extra person innan servern klagar på att "The physical limit is reached" eller något i den stilen. Har kollat runt lite i PEExplorer (nån disassembler) och hittat felmeddelandet. Jag följde det bakåt och hittade nån jnz, något jag har för mig är en if sats? Testade att fylla ut med 90 där istället men det fungerar inte. Kan tillägga att jag knappt har nån aning om vad jag pysslar med alls. Men det vore roligt och ganska lärorikt att lösa detta problem, någon annan kanske känner sig lockad?

Säg till om du lyckas, är väldigt sugen på att uppdatera mina 6 ventriloservrar
Citera
2007-02-11, 20:40
  #3
Medlem
Rizados avatar
Det är helt otroligt hur mycket man kan ändra utan att det går sönder, har hållt på att ändra jnz till jmp och nop lite överallt Inget konstig händer. Nä jag kan nog ge upp detta för jag fattar inte ett smack

Iaf så här mycket har jag förstått. Om man öppnar servern (Har testat 2.3.0 och 2.3.1) i en hexeditor och letar upp hexsekvensen 6043 0008 0F8E 9600 och ändrar den till 6043 0008 E997 0000, ja då kommer en extra person in och man får ett nytt fint felmeddelande, då antar jag att man knäckt något. Men jag har inte den blekaste vad. Fattar inte hur jag ska hitta det stället i PVDasm heller? Kanske någon kan komma med tips?
Citera
2007-02-13, 20:44
  #4
Medlem
Det här är enbart en chansning från min sida. Använder inte Ventrilo och kan därför inte testa det 'live'

Ventrilo 2.3.0.0

Ladda ner http://www.ollydbg.de/odbg110.zip

Öppna Ventrilo.exe i Ollydbg.

Vänta tills den analyserat klart.

Ctrl + G
Klistra in adress 00434901
Enter

http://img402.imageshack.us/img402/9347/ven1wt1.png

På bilden ser du

00434903 JL SHORT 00434913
00434908 JG SHORT 00434913

De hoppar till Illegal max clients limit. NOP på dom.

Kanske fungerar, kanske inte. Hursomhelst har du fått ett kapabelt verktyg att jobba med

Det är inte särskilt kraftfullt att analysera "döda" program. Trycker du F9 i olly så körs programmet. Beroende på vad du vill göra får du sätta breakpoints på specifika ställen. Låt säga att felmeddelandet är en popup ruta, vanligast är MessageBoxA.

Högerklicka i Ollydbg, search for - > all intermodular calls. Skriv Messageboxa med tangentbordet så filtrerar den automagiskt. Tryck F2 för att sätta en breakpoint. I det stora hela handlar det om att kunna Windows API för att hamna på rätt ställe.
Citera
2007-02-13, 22:01
  #5
Medlem
Rizados avatar
buzifer det där programmet känner jag igen, det har jag använt förrut

Tror inte det är i klienten problemet ligger utan i servern. Men iaf så öppnade jag servern i ollydbg och letade runt lite. Så hittade jag en JL en bit ovanför felmeddelandet, närmare bestämt adress 004152BE. När jag följde den hoppade den vidare till accepted så jag tänket att JL, det kanske är något if liknande och ändrade den till jmp. Framgång! Nu accepterar den klienten men, efter att ha accepterat gör den inget mer. Så klienten blir tom.

Ska kolla på detta lite mera Väldans skönt att kunna starta programmet direkt när man ändrat det.

Det är en skillnad i vad som skrivs ut i servern upptäckte jag nu. I vanliga fall Står det först MSG_CONN blah blah accepted, och på nästa LOGON: ID blah blah.
Men efter att klient nummer nio kommit in slutar det meddelandet komma. En teori är att servern skickar ett OK, och klienten går vidare men nu skickas inte det OKet och klienten gör inte ett skit. Låter det rimligt?
Citera
2007-03-06, 22:51
  #6
Medlem
seb-s avatar
Allt kan crackas, vissa grejer tar bara längre tid än andra. Det är svårare om programmet är skyddat och man måste knäcka krypteringen för att få tillgång till den verkliga koden. Assembly kunskaper och en del grundläggande kunskaper om hur PE-filer är uppbyggda (samt förstå RVA, VA o.s.v.) krävs i allmänhet för att kunna cracka, och metoden som utgår på att ersätta JB/JL (eller någon annan "conditional jump") med NOP eller annan instruktion är i dag rätt "standard", så att säga. Är själv ingen crackare, men tycker det ändå är rätt fascinerande.
Citera
2007-03-07, 13:51
  #7
Medlem
kan någon läggaupp bara exen till ventrilo(inte installen eller liknande utan själv exen till ventrilo) så jag kan kolla lite på den.
Citera
2007-03-16, 04:10
  #8
Bannlyst
Citat:
Ursprungligen postat av Rizado
blah blah..

hittade jag en JL en bit ovanför felmeddelandet, närmare bestämt adress 004152BE. När jag följde den hoppade den vidare till accepted så jag tänket att JL, det kanske är något if liknande och ändrade den till jmp. Framgång! Nu accepterar den klienten men, efter att ha accepterat gör den inget mer. Så klienten blir tom.

Det är en skillnad i vad som skrivs ut i servern upptäckte jag nu. I vanliga fall Står det först MSG_CONN blah blah accepted, och på nästa LOGON: ID blah blah. Men efter att klient nummer nio kommit in slutar det meddelandet komma. En teori är att servern skickar ett OK, och klienten går vidare men nu skickas inte det OKet och klienten gör inte ett skit. Låter det rimligt?

hm.. nu har jag inte laddat hem ventrilio eller kollat den.. men omkring denna JL du patchade.. finns det en CALL där omkring? eller möjligtvis ett hopp till nån rutin av nåt slag.. i det hela låter det som att när du patchar JL blir det ok.. men att limit på 8 connections fortfarande är kvar.. jag är nästan säker på att det finns en rutin för detta som körs innan, som man borde kolla på.. ungefär som ett prog. man patchar för att acceptera alla nycklar.. den säger ok.. du startat om programmet och det är fortfarande oreggat..

en approach jag skulle kika på är just vad som händer vid varje ny connect.. sätt hardware eller memory access breakpoints.. och kolla var antal connectade folk lägger sig.. när man vet detta kan man alltid testa att göra en inc/dec (increase/decrease) på värdet för att få det att stämma till det tillåtna.. en fuling alltså.. problemet är väl då att den inte kommer skriva rätt antal connects.. men folk kan ansluta..

det andra är ju helt enkelt leta upp "8" connect och ersätta dem med något bättre värde

ah.. får kika på det imorn.. detta lät intressant.. alltid kul med nya nötter att knäcka

*edit*
client - windows i386 - 32bit - 3.2 Beta 3
http://download2.ventrilo.com/dl.php?client_windows_i386_beta&453583079
Citera
2007-03-16, 06:25
  #9
Bannlyst
Client - Windows i386 - 32bit - 3.2 Beta 3

hm.. detta är en jävla massa text faktiskt.. men ja orka inte leta servrar.. och för och kunna connecta internt localhost.. så gjorde jag såhär.. problemet för mig var att man inte kunde starta ventrilo två gånger! hur ska man då kunna connecta upp till 8 limiten? well.. det är löst nu.. ska kika vidare imorn.. läs å ta del så kanske vi löser detta nångång


00428311 > 389E 09080000 CMP BYTE PTR DS:[ESI+809],BL < eax = 1
00428317 . 75 61 JNZ SHORT Ventrilo.0042837A < oops, eax är inte 0 alltså multi instances

00428311 blir hoppad till från 00428293 och den ser ut såhär..

00428293 . 7D 7C JGE SHORT Ventrilo.00428311

00403695 > 8B5D 0C MOV EBX,DWORD PTR SS:[EBP+C] < steppar lite.. eax är fortfarande 0 här..
00403698 . 3BDA CMP EBX,EDX < ojdå, ebx blev 1, den lär ju hamna i eax senare antar jag.

004036D2 . 0F83 09010000 JNB Ventrilo.004037E1 < några steg ner.. edx är också 1 nu.. några steg till och den är 0 igen..

sen händer de lite fram och tillbaka på 1-0 på edx, ebx.. så jag satte en break längre ner.. här..
0042825F . 68 54BA4A00 PUSH Ventrilo.004ABA54 ; ASCII " -"

0042827A . 894C24 0C MOV DWORD PTR SS:[ESP+C],ECX < ecx blir 1 från 0

00428291 > 3BC8 CMP ECX,EAX < eax 1 ebx 1
00428293 . 7D 7C JGE SHORT Ventrilo.00428311 < ja då hoppar vi.. så var vi vid 00428311 igen..

vad har vi då lärt oss

jo, vi startar om.. sätter in break på.. och kollar lite mera noggrant..
0042825F . 68 54BA4A00 PUSH Ventrilo.004ABA54 ; ASCII " -"

igång igen..
0044F5F0 . 85C9 TEST ECX,ECX < ecx 0
0044F5F2 . 75 12 JNZ SHORT Ventrilo.0044F606 < hoppar inte

00428275 . B9 01000000 MOV ECX,1 < okej, tack..

framme vid.. igen..

00428311 > 389E 09080000 CMP BYTE PTR DS:[ESI+809],BL

så vi stänger ner den andra instansen.. startar om här i olly.. break på ASCII " -"
och även på 00428320 . FF15 30534A00 CALL DWORD PTR DS:[<&KERNEL32.CreateMute>; \CreateMutexA
och även på denna.. 00428326 . 3BC3 CMP EAX,EBX bara för att efter vi kommer ut så vill vi den ska bryta direkt..

00428326 . 3BC3 CMP EAX,EBX < det gjorde den.. eax 140
00428343 > FF15 10534A00 CALL DWORD PTR DS:[<&KERNEL32.GetLastError>] ; [GetLastError < in i kernel32

KERNEL32
7600812F 8B40 34 MOV EAX,DWORD PTR DS:[EAX+34] < eax blir 0

jaha, var är skillnaden då.. nollställer.. upp med andra instansen.. sen starta igen.. med samma breaks..

00428326 . 3BC3 CMP EAX,EBX < hm eax är 12C här nu..

KERNEL32
7600812F 8B40 34 MOV EAX,DWORD PTR DS:[EAX+34] så blev den B7

och ut ur kernel32..

00428343 > FF15 10534A00 CALL DWORD PTR DS:[<&KERNEL32.GetLastError>] ; [GetLastError
00428349 . 3D B7000000 CMP EAX,0B7
0042834E . 75 13 JNZ SHORT Ventrilo.00428363
00428350 . 53 PUSH EBX
00428351 . 53 PUSH EBX
00428352 . 68 D4B94A00 PUSH Ventrilo.004AB9D4 ; ASCII "Another copy of Ventrilo is already running."

okej, då vet vi mer..

okej.. vi vet vad som krävs.. steppa in i en jävla massa calls.. få eax bli 140 när den kommer ut ur KERNEL32.. blah blah.. men orkar inte kolla igenom så mkt mer såhär sent.. så vi provar vidare..

00428319 68 38BA4A00 PUSH Ventrilo.004ABA38 ; ASCII "Ventrilo_Multiple_Instance"
patchar > E9 00000000 (alltså.. jump till nästa instruktion, snyggare än NOP's eller hur?)

och eax är 140 som den skall vara..

.. nu crashar det på en access violation.. eax är nu 8..
004286B2 . F0:0FC111 LOCK XADD DWORD PTR DS:[ECX],EDX ; LOCK prefix

okej, inte hittat så mkt intressant än.. men det är bara början.. varför jag kollat det såhär.. är att även vid sk. ovesäntliga partier.. kan man få reda på saker som reg. nycklar eller användbar info etc. nu får vi göra på de enkla sättet..

DET ROLIGA

00428349 . 3D B7000000 CMP EAX,0B7
0042834E 75 13 JNZ SHORT Ventrilo.00428363 < EB här
00428350 . 53 PUSH EBX
00428351 . 53 PUSH EBX
00428352 . 68 D4B94A00 PUSH Ventrilo.004AB9D4 ; ASCII "Another copy of Ventrilo is already running."
00428357 . E8 F7ED0600 CALL Ventrilo.00497153
0042835C . 6A 01 PUSH 1
0042835E . E8 4A410500 CALL Ventrilo.0047C4AD < eftersom eax fortfarande är B7 så kommer det skita sig vid nästa compare..
nu kanske man tänker.. ah, men bara sätta EB här under.. så vi slipper "Unknown error".. well, not good! vad händer när det inte är två instanser av ventrilio och vi slutar upp här och ändå tar hoppet? antar de skiter sig.. så vi löser de såhär..

kolla noga på 00428365 den hoppar till 0042837A. ok, så om vi tar våran 0042834E EB och gör så den hoppar till 0042837A så ska de lösa sig..

00428363 > 3BC3 CMP EAX,EBX
00428365 . 74 13 JE SHORT Ventrilo.0042837A
00428367 . 53 PUSH EBX
00428368 . 53 PUSH EBX
00428369 . 68 A8B94A00 PUSH Ventrilo.004AB9A8 ; ASCII "Unknown error detecting previous instance."

ta bort alla breakpoints.. sätt en break på 00428349.. starta om..

vi får en break..
0042834E 75 13 JNZ SHORT Ventrilo.00428363 < EB2A här för att hoppa till. 0042837A

wow.. det startar

spara ner exen i olly.. lr en hexeditor.. offset 2834E.. EB2A

flyter på.. mm.. massa connects.. all slots currently full.. tja.. de blir morgonens problem.. ursäkta stavfel.. rätt sliten.. men lättare nu när man kan jobba lokalt.. hehe
Citera
2007-03-16, 08:49
  #10
Medlem
Rizados avatar
Citat:
Ursprungligen postat av OnY
hm.. detta är en jävla massa text faktiskt.. men ja orka inte leta servrar.. och för och kunna connecta internt localhost.. så gjorde jag såhär.. problemet för mig var att man inte kunde starta ventrilo två gånger! hur ska man då kunna connecta upp till 8 limiten? well.. det är löst nu.. ska kika vidare imorn.. läs å ta del så kanske vi löser detta nångång
Förstod att du hade fixat det men med hjälp av ventrilomix kan man köra flera ventriloklienter.

Ska läsa igenom detta och försöka förstå nåt, intressant, kan inte ett smack om sånt här egentligen
Citera
2007-03-16, 15:08
  #11
Bannlyst
Citat:
Ursprungligen postat av Rizado
Förstod att du hade fixat det men med hjälp av ventrilomix kan man köra flera ventriloklienter.
jag kan inte ett skit om ventrilo istället.. haha.. så jag hade inte en aning om vetrilomix.. där ser man.. är så skeptisk mot små program, vet aldrig vart man har dom och va de gör.. så jag föredrar ändå ollydbg så man vet va som händer

Citat:
Ursprungligen postat av Rizado
Ska läsa igenom detta och försöka förstå nåt, intressant, kan inte ett smack om sånt här egentligen
visst är det intressant.. och det behöver inte vara så svårt att förstå.. har du bara lite logisk tänkande och är dum nog att prova saker i kod som verkar lite ologiskt så löser sig det mesta det är bara att läsa och läsa.. testa och testa.. prova köra notepad.exe i en debugger och se vad som händer när du gör vissa saker så får du snart hum om hur programkod funkar..

ska kika vidare på detta senare idag.. en fråga bara.. om ventrilo är reggad, då försvinner alla limits eller? så detta inte är nån sorts strippad demo version man kan tanka.. det kanske e lättare att ge sig på registrerings checkarna vid uppstart så att säga.. såg att den gör en del sånna checkar etc..
Citera
2007-03-16, 18:12
  #12
Bannlyst
update, rättelse..

tröttheten tog ur sin rätt igår.. såg ett misstag jag gjort..

genom att hoppa till 0042837A från 0042834E så kommer aldrig "Unknown error detecting previous instance." att nås. nu vet jag inte om detta kommer innebära problem.. men för att göra det korrekt så patchar vi istället get last error från kernel32. vi vet att eax är 0 om allt stämmer.. så då gör vi eax 0 före den gör en CMP EAX,0B7.. alltså vid 00428343

00428343 > FF15 10534A00 CALL DWORD PTR DS:[<&KERNEL32.GetLastErr>; [GetLastError < ändra till MOV EAX,0 (B800000000 NOP'a byten som blir över)
00428349 . 3D B7000000 CMP EAX,0B7
0042834E . 75 13 JNZ SHORT Ventril.00428363 < här var den förra patchen!

i hexeditor.. sök efter.. FF1510534A00 ersätt med B80000000090

nu är serverdelen laddad i olly.. har även 8 instanser connectade till den.. den 9e är laddad i olly.. nu kör vi
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in