Home of Gamehacking - Archiv
Far Cry 3 Shared Code (Life) - Druckversion

+- Home of Gamehacking - Archiv (http://archiv-homeofgamehacking.de)
+-- Forum: Gamehacking (http://archiv-homeofgamehacking.de/forumdisplay.php?fid=3)
+--- Forum: Gamehacking (http://archiv-homeofgamehacking.de/forumdisplay.php?fid=6)
+--- Thema: Far Cry 3 Shared Code (Life) (/showthread.php?tid=1511)

Seiten: 1 2


Far Cry 3 Shared Code (Life) - DarkLevi - 17.06.2013

Hallo Leute,

ich hänge wieder einmal =)

Seit wochen versuche ich den Shared Code für das Leben in FarCry 3 zu destrukturieren um einen Infinite Life Cheat zu erstellen (Pointerscan ergab auch bei 4096 und 2 1/2 stündiger Laufzeit nach dem dritten restart nichts mehr...).

Nun irgendwie sind meine Ansätze alle falsch. Level 9 in der Tutorial-exe war kein problem aber dass hier lässt mich die Haare raufen.

Bisherige Versuche waren zum einen mit dem "Dissect Structure" Tool von CE sowie eine an das Spiel angepasste Variante hiervon:

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
[enable]
alloc(x,8)			 // addess to hold the value to compare (8 bytes not needed,its free anyway)
registersymbol(x)	  // not really necessary,only use if u need to create a pointer from this
alloc(n1,2048)		 //allocate memory for code cave
alloc(n2,2048)		 //allocate memory for code cave
label(r1)			  //just for easier coding
label(r2)			  //just for easier coding

n1:							   //our code cave (1)
fld dword ptr [eax+10]	  //original code
mov [x],eax					   //we are moving the value in edx to the address x
jmp r1							//jump back to main game code

005892F7:						
jmp n1							//jump to code cave (1)
nop
r1:

n2:							   //our code cave (2)
cmp esi,[x]					   //compare esi with [x] to see if player/enemy
mov [esi+10,edx			//If u need inf.health , u can delete this line
je r2							 //If player ,jump to main game code
mov [esi+10],0			  //If enemy ,make their health 0  
jmp r2							//jump back to main game code


004B331F:						
jmp n2							//jump to code cave (2)
nop
r2:

[disable]
dealloc(x)
dealloc(n1)
dealloc(n2)

005892F7:
fld dword ptr [edx+00000540]

004B331F:
mov [esi+00000540],edx



Leider bisher alles ohne Erfolg.

Nun meine Bitte: falls jemand die Lösung hat, postet es mir doch bitte und erklärt mir doch bitte Step-by-Step welche Schritte nötig waren.

LG
DarkLevi


Far Cry 3 Shared Code (Life) - DNA - 20.06.2013

Hey,
ich habe das Spiel zwar nicht, aber ich könnte dir den Code erklären (den du gepostest hast), wenn du möchtest.


Sent from my iPhone using Tapatalk 2


RE: Far Cry 3 Shared Code (Life) - DarkLevi - 21.06.2013

Hi DNA,

Danke für das Angebot, aber den geposteten Code verstehe ich Wink

Mein Problem ist das ich in dem Spiel keinen Code finde der nur den Spieler accessen würde. Somit kann ich diesen nicht anwenden da wieder alles unverwundbar wird Happy

Das problem ist einfach dass ich mit meinem Assembly-Wissen nicht soweit komme herauszufinden wo das Spiel zwischen Gegner und Spieler unterscheidet und schon alles mögliche ausprobiert habe, aber nun am Ende meines Lateins bin :@

Leidergottes finde ich auch nirgends ein gutes Tut was auf den Shared-Code in diesem Spiel anwendbar wäre, weswegen ich hier gefragt habe.

Falls also doch noch jemand eine Lösung parat hat und mir erklären kann wie das Spiel den Spieler erkennt oder auch nur eine Idee hat die man testen könnte, ich bin für alles dankbar.

MfG
DarkLevi




RE: Far Cry 3 Shared Code (Life) - iNvIcTUs oRCuS - 21.06.2013

Eigentlich ist das recht simpel... Wenn Du mit dem Debugger entsprechend durch den Code stepst findest Du sehr schnell eine Stelle im Code die nur für den Spieler gilt. Allerdings wird diese nicht so häufig aufgerufen und der Spieler ist nur nahezu gegen alles unverwundbar. Stürze aus großer Höhe sind so das einzige Problem...


RE: Far Cry 3 Shared Code (Life) - DarkLevi - 24.06.2013

Und wie erkenne ich diese Stelle?

Was ich versucht habe war zb.: Access auf Spieler und einer Gegneradresse zu lesen um so ein Codefragment zu finden dass nur den Spieler anspricht. Das hat allerdings nicht funktioniert. Ich habe zwar eine Codestelle gefunden aber scheinbar accessed die auch die Gegner, auf jeden fall hatte ich obigen Code angepasst und es war wieder jeder unverwundbar Happy



RE: Far Cry 3 Shared Code (Life) - iNvIcTUs oRCuS - 24.06.2013

Wenn Du dir sämtliche Opcodes auflisten lässt die die Spieleradresse manipulieren/auslesen dann kommst du irgendwann zu so einem Codestück...

[code=ASM]ret 000C
xorps xmm0,xmm0
xor eax,eax
comiss xmm0,[ecx+10]
jb FC3.dll+905E4E[/code]Die Spieler- und Gegneradressen werden bei "comiss xmm0,[ecx+10]" durchlaufen.
Setze also einen Breakpoint auf diese Zeile und gehe zurück ins Spiel. Da die Health permanent durchlaufen wird und nicht nur wenn die Spielfigur getroffen wird müsste der Debugger sofort anspringen und an eben jenem Breakpoint das Spiel angehalten haben...
Da sich der oben gezeigte Code selbst innerhalb eines Call's (Subroutine) befindet muss also irgendwo am Ende dieser Funktion ein Return stehen. Also stepst du durch den Code und mit dem Ausführen des Return's kommst du aus diesem Call raus. Wenn Du dann eine Zeile oben drüber schaust siehst Du den Call der diese Funktion aufgerufen hat.

Die Funktion, welche das oben gezeigte Codeschnipsel inne hat, wird allerdings von mehreren Stellen aufgerufen. Deshalb wirst Du das wahrscheinlich mehrmals wiederholen müssen bis du einen solchen Code siehst...
[code=ASM]mov ecx,[esi+2C]
mov eax,[ecx]
call dword ptr [eax+1C][/code]Dieser "call dword ptr [eax+1C]" wird nur aufgerufen wenn es sich um eine Spieleradresse handelt. Also könntest du hier deine Codeinjection machen...

EDIT//
Aber wie ich schon sagte... Die Spielfigur wird dadurch unverwundbar, aber durch Stürze aus großer Höhe nimmt diese dennoch Schaden bzw. verliert die Health komplett...


RE: Far Cry 3 Shared Code (Life) - DarkLevi - 25.06.2013

Super besten Dank,

werde das gleich ausprobieren und dann Rückmeldung geben. Wenn dass dann auch funktioniert wenn ich da rumbastel, glaube ich es endlich kapiert zu haben Happy

Vielen Dank
ein glücklicher DarkLevi

EDIT: ne ich schnalls net....

1. Woher weißt du dass dieser Code nur den Spieler betrifft, und der richtige ist, wieso nicht die anderen Call's?

2. Mein Code soweit:

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat
alloc(newmem2,2048)
alloc(x,8)
registersymbol(x)
label(returnhere2)
label(originalcode2)
label(exit2)
alloc(newmem,2048)
label(returnhere)
label(originalcode)
label(exit)


newmem2: //this is allocated memory, you have read,write,execute access
call dword ptr [eax+1C]
mov [x],ecx //schreibe ecx in [x], da [ecx+10] = Spieleradresse

originalcode2:
test al,al

exit2:
jmp returnhere2

"FC3_d3d11.dll"+8C7636:
jmp newmem2
returnhere2:


newmem: //this is allocated memory, you have read,write,execute access
cmp esi,[x] //wenn esi gleich [x] (=Spieleradresse-10)
je exit //überspringe code der leben abzieht

originalcode:
movss [esi+10],xmm0

exit:
jmp returnhere

"FC3_d3d11.dll"+3F2D61:
jmp newmem
returnhere:


[DISABLE]
//code from here till the end of the code will be used to disable the cheat
dealloc(newmem2)
dealloc(x)
"FC3_d3d11.dll"+8C7636:
call dword ptr [eax+1C]
test al,al
//Alt: db FF 50 1C 84 C0
dealloc(newmem)
"FC3_d3d11.dll"+3F2D61:
movss [esi+10],xmm0
//Alt: db F3 0F 11 46 10


Funktioniert aber nicht, es ist wieder alles unverwundbar Huh
Also irgendwie verstehe ich das alles nicht so ganz, tut mir auch leid euch damit auf die nerven zu gehen, ich finde allerdings auch nirgends ein anständiges Tutorial

MfG ein verzweifelter DarkLevi


RE: Far Cry 3 Shared Code (Life) - DarkLevi - 26.06.2013

So habe jetzt mal was anhand der "DMA to Static" getestet:

Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
[ENABLE]
//code from here to '[DISABLE]' will be used to enable the cheat
alloc(newmem,2048)
alloc(pLife,8)
registersymbol(pLife)
label(returnhere)
label(originalcode)
label(exit)

newmem: //this is allocated memory, you have read,write,execute access
mov [pLife],ecx
add [pLife],10

originalcode:
call dword ptr [eax+1C]
test al,al

exit:
jmp returnhere

"FC3_d3d11.dll"+8C7636:
jmp newmem
returnhere:


 
 
[DISABLE]
//code from here till the end of the code will be used to disable the cheat
dealloc(newmem)
dealloc(pLife)
unregistersymbol(pLife)
"FC3_d3d11.dll"+8C7636:
call dword ptr [eax+1C]
test al,al
//Alt: db FF 50 1C 84 C0


Wenn ich nun in CE die Adresse [pLife] auslesen lasse habe ich immer meine Spieleradresse.... Huh

Eigentlich logisch wenn da nicht wieder die Tatsache wäre das mein Code aus dem obigen Post dazu führt das auch die Gegner unsterblich werden....

Wobei man erwähnen sollte dass ich die "Toten" Gegner während sie auf mich schießen und rumrennen plündern kann Huh Zombiemod für Assemblernoobs Happy

Zu 1. aus dem vorherigen Post:

kann es sein dass der "Call" der richtige ist da er der erste außerhalb des "Returns" ist, der meine Spieleradresse beinhaltet? Oder verstehe ich das immer noch nicht?

LG
DarkLevi


RE: Far Cry 3 Shared Code (Life) - DarkLevi - 26.06.2013

Oh man ich Hirnbeiß.... :@

alles zurück habe das "cmp" übersehen dass direkt vorher ausgeführt wird, und diese überprüfung durch mein "cmp" zerschossen :@:@:@

Im so f***ing sorry....

Bleibt nur noch die Frage woran man den richtigen call erkennt.
Danach bin ich wunschlos glücklich und eine erfahrung reicher Happy

LG
DarkLevi


AW: Far Cry 3 Shared Code (Life) - iNvIcTUs oRCuS - 26.06.2013

Ich werd mir dat Dingens nochmal installieren und dann vielleicht gleich nen Tutorial draus basteln...
Alles anhand von Cheat Engine... Das ist glaub ich für alle einfacher nachzuvollziehen...

Gesendet von meinem Galaxy S4 mit Tapatalk 4