I am trying to disassemble the game "Among Us" on mobile, which is written using Unity. It has also been obscured using IL2CPP. I have decompiled the APK into C# files, but they all either have nothing in them or have only a return value. They also have instruction offsets, but when I looked at some of the functions in assembly they only consisted of a ret instruction.
Example: Vending Machine Minigame Code
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using Il2CppDummyDll;
using UnityEngine;
// Token: 0x020000C2 RID: 194
[Token(Token = "0x200006E")]
public class VendingMinigame : Minigame
{
// Token: 0x0600040E RID: 1038 RVA: 0x00002050 File Offset: 0x00000250
[Token(Token = "0x600025F")]
[Address(RVA = "0x8944C4", Offset = "0x8944C4", VA = "0x8944C4", Slot = "4")]
public override void Begin(PlayerTask task)
{
}
// Token: 0x0600040F RID: 1039 RVA: 0x00003450 File Offset: 0x00001650
[Token(Token = "0x6000260")]
[Address(RVA = "0x894868", Offset = "0x894868", VA = "0x894868")]
private static int StringToSlotId(string code)
{
return 0;
}
// Token: 0x06000410 RID: 1040 RVA: 0x00002052 File Offset: 0x00000252
[Token(Token = "0x6000261")]
[Address(RVA = "0x894788", Offset = "0x894788", VA = "0x894788")]
private static string SlotIdToString(int slotId)
{
return null;
}
// Token: 0x06000411 RID: 1041 RVA: 0x00003468 File Offset: 0x00001668
[Token(Token = "0x6000262")]
[Address(RVA = "0x8946B8", Offset = "0x8946B8", VA = "0x8946B8")]
private bool PickARandomSlot(Sprite drink, out int slotId)
{
return default(bool);
}
// Token: 0x06000412 RID: 1042 RVA: 0x00002050 File Offset: 0x00000250
[Token(Token = "0x6000263")]
[Address(RVA = "0x894A40", Offset = "0x894A40", VA = "0x894A40")]
public void EnterDigit(string s)
{
}
// Token: 0x06000413 RID: 1043 RVA: 0x00002050 File Offset: 0x00000250
[Token(Token = "0x6000264")]
[Address(RVA = "0x894C00", Offset = "0x894C00", VA = "0x894C00")]
public void ClearDigits()
{
}
// Token: 0x06000414 RID: 1044 RVA: 0x00002050 File Offset: 0x00000250
[Token(Token = "0x6000265")]
[Address(RVA = "0x894D18", Offset = "0x894D18", VA = "0x894D18")]
public void AcceptDigits()
{
}
// Token: 0x06000415 RID: 1045 RVA: 0x00002052 File Offset: 0x00000252
[Token(Token = "0x6000266")]
[Address(RVA = "0x894B90", Offset = "0x894B90", VA = "0x894B90")]
[Attribute(Name = "IteratorStateMachineAttribute", RVA = "0x4FCC94", Offset = "0x4FCC94")]
private IEnumerator BlinkAccept()
{
return null;
}
// Token: 0x06000416 RID: 1046 RVA: 0x00002052 File Offset: 0x00000252
[Token(Token = "0x6000267")]
[Address(RVA = "0x894E30", Offset = "0x894E30", VA = "0x894E30")]
[Attribute(Name = "IteratorStateMachineAttribute", RVA = "0x4FCCF8", Offset = "0x4FCCF8")]
private IEnumerator Animate()
{
return null;
}
// Token: 0x06000417 RID: 1047 RVA: 0x00002052 File Offset: 0x00000252
[Token(Token = "0x6000268")]
[Address(RVA = "0x894EF8", Offset = "0x894EF8", VA = "0x894EF8")]
[Attribute(Name = "IteratorStateMachineAttribute", RVA = "0x4FCD5C", Offset = "0x4FCD5C")]
private IEnumerator CoBlinkVend()
{
return null;
}
// Token: 0x06000418 RID: 1048 RVA: 0x00002050 File Offset: 0x00000250
[Token(Token = "0x6000269")]
[Address(RVA = "0x894F94", Offset = "0x894F94", VA = "0x894F94")]
public VendingMinigame()
{
}
// Token: 0x040003F9 RID: 1017
[Token(Token = "0x4000257")]
[FieldOffset(Offset = "0x0")]
public static readonly string[] Letters;
// Token: 0x040003FA RID: 1018
[Token(Token = "0x4000258")]
[FieldOffset(Offset = "0x50")]
public TextRenderer NumberText;
// Token: 0x040003FB RID: 1019
[Token(Token = "0x4000259")]
[FieldOffset(Offset = "0x58")]
public SpriteRenderer TargetImage;
// Token: 0x040003FC RID: 1020
[Token(Token = "0x400025A")]
[FieldOffset(Offset = "0x60")]
public string enteredCode;
// Token: 0x040003FD RID: 1021
[Token(Token = "0x400025B")]
[FieldOffset(Offset = "0x68")]
private bool animating;
// Token: 0x040003FE RID: 1022
[Token(Token = "0x400025C")]
[FieldOffset(Offset = "0x69")]
private bool done;
// Token: 0x040003FF RID: 1023
[Token(Token = "0x400025D")]
[FieldOffset(Offset = "0x70")]
private string targetCode;
// Token: 0x04000400 RID: 1024
[Token(Token = "0x400025E")]
[FieldOffset(Offset = "0x78")]
public SpriteRenderer AcceptButton;
// Token: 0x04000401 RID: 1025
[Token(Token = "0x400025F")]
[FieldOffset(Offset = "0x80")]
public VendingSlot[] Slots;
// Token: 0x04000402 RID: 1026
[Token(Token = "0x4000260")]
[FieldOffset(Offset = "0x88")]
public Sprite[] Drinks;
// Token: 0x04000403 RID: 1027
[Token(Token = "0x4000261")]
[FieldOffset(Offset = "0x90")]
public Sprite[] DrawnDrinks;
// Token: 0x04000404 RID: 1028
[Token(Token = "0x4000262")]
[FieldOffset(Offset = "0x98")]
public AudioClip Ambience;
// Token: 0x04000405 RID: 1029
[Token(Token = "0x4000263")]
[FieldOffset(Offset = "0xA0")]
public AudioClip Button;
// Token: 0x04000406 RID: 1030
[Token(Token = "0x4000264")]
[FieldOffset(Offset = "0xA8")]
public AudioClip Error;
// Token: 0x04000407 RID: 1031
[Token(Token = "0x4000265")]
[FieldOffset(Offset = "0xB0")]
public AudioClip SliderOpen;
// Token: 0x04000408 RID: 1032
[Token(Token = "0x4000266")]
[FieldOffset(Offset = "0xB8")]
public AudioClip DrinkShake;
// Token: 0x04000409 RID: 1033
[Token(Token = "0x4000267")]
[FieldOffset(Offset = "0xC0")]
public AudioClip DrinkLand;
// Token: 0x020000C3 RID: 195
[Token(Token = "0x200023A")]
[Attribute(Name = "CompilerGeneratedAttribute", RVA = "0x4F9288", Offset = "0x4F9288")]
private sealed class <BlinkAccept>d__24 : IEnumerator<object>, IEnumerator, IDisposable
{
// Token: 0x0600041A RID: 1050 RVA: 0x00002050 File Offset: 0x00000250
[Token(Token = "0x6000E1D")]
[Address(RVA = "0x894EA0", Offset = "0x894EA0", VA = "0x894EA0")]
[DebuggerHidden]
public <BlinkAccept>d__24(int <>1__state)
{
}
// Token: 0x0600041B RID: 1051 RVA: 0x00002050 File Offset: 0x00000250
[Token(Token = "0x6000E1E")]
[Address(RVA = "0x895690", Offset = "0x895690", VA = "0x895690", Slot = "5")]
[DebuggerHidden]
private void Dispose()
{
}
// Token: 0x0600041C RID: 1052 RVA: 0x00003480 File Offset: 0x00001680
[Token(Token = "0x6000E1F")]
[Address(RVA = "0x895694", Offset = "0x895694", VA = "0x895694", Slot = "6")]
private bool MoveNext()
{
return default(bool);
}
// Token: 0x170000A1 RID: 161
// (get) Token: 0x0600041D RID: 1053 RVA: 0x00002052 File Offset: 0x00000252
[Token(Token = "0x17000186")]
private object Current
{
[Token(Token = "0x6000E20")]
[Address(RVA = "0x89578C", Offset = "0x89578C", VA = "0x89578C", Slot = "4")]
[DebuggerHidden]
get
{
return null;
}
}
// Token: 0x0600041E RID: 1054 RVA: 0x00002050 File Offset: 0x00000250
[Token(Token = "0x6000E21")]
[Address(RVA = "0x895794", Offset = "0x895794", VA = "0x895794", Slot = "8")]
[DebuggerHidden]
private void Reset()
{
}
// Token: 0x170000A2 RID: 162
// (get) Token: 0x0600041F RID: 1055 RVA: 0x00002052 File Offset: 0x00000252
[Token(Token = "0x17000187")]
private object Current
{
[Token(Token = "0x6000E22")]
[Address(RVA = "0x8957F4", Offset = "0x8957F4", VA = "0x8957F4", Slot = "7")]
[DebuggerHidden]
get
{
return null;
}
}
// Token: 0x0400040A RID: 1034
[Token(Token = "0x4000E32")]
[FieldOffset(Offset = "0x10")]
private int <>1__state;
// Token: 0x0400040B RID: 1035
[Token(Token = "0x4000E33")]
[FieldOffset(Offset = "0x18")]
private object <>2__current;
// Token: 0x0400040C RID: 1036
[Token(Token = "0x4000E34")]
[FieldOffset(Offset = "0x20")]
public VendingMinigame <>4__this;
// Token: 0x0400040D RID: 1037
[Token(Token = "0x4000E35")]
[FieldOffset(Offset = "0x28")]
private int <i>5__2;
}
// Token: 0x020000C4 RID: 196
[Token(Token = "0x200023B")]
[Attribute(Name = "CompilerGeneratedAttribute", RVA = "0x4F9298", Offset = "0x4F9298")]
private sealed class <Animate>d__25 : IEnumerator<object>, IEnumerator, IDisposable
{
// Token: 0x06000420 RID: 1056 RVA: 0x00002050 File Offset: 0x00000250
[Token(Token = "0x6000E23")]
[Address(RVA = "0x894ECC", Offset = "0x894ECC", VA = "0x894ECC")]
[DebuggerHidden]
public <Animate>d__25(int <>1__state)
{
}
// Token: 0x06000421 RID: 1057 RVA: 0x00002050 File Offset: 0x00000250
[Token(Token = "0x6000E24")]
[Address(RVA = "0x895114", Offset = "0x895114", VA = "0x895114", Slot = "5")]
[DebuggerHidden]
private void Dispose()
{
}
// Token: 0x06000422 RID: 1058 RVA: 0x00003498 File Offset: 0x00001698
[Token(Token = "0x6000E25")]
[Address(RVA = "0x895118", Offset = "0x895118", VA = "0x895118", Slot = "6")]
private bool MoveNext()
{
return default(bool);
}
// Token: 0x170000A3 RID: 163
// (get) Token: 0x06000423 RID: 1059 RVA: 0x00002052 File Offset: 0x00000252
[Token(Token = "0x17000188")]
private object Current
{
[Token(Token = "0x6000E26")]
[Address(RVA = "0x895620", Offset = "0x895620", VA = "0x895620", Slot = "4")]
[DebuggerHidden]
get
{
return null;
}
}
// Token: 0x06000424 RID: 1060 RVA: 0x00002050 File Offset: 0x00000250
[Token(Token = "0x6000E27")]
[Address(RVA = "0x895628", Offset = "0x895628", VA = "0x895628", Slot = "8")]
[DebuggerHidden]
private void Reset()
{
}
// Token: 0x170000A4 RID: 164
// (get) Token: 0x06000425 RID: 1061 RVA: 0x00002052 File Offset: 0x00000252
[Token(Token = "0x17000189")]
private object Current
{
[Token(Token = "0x6000E28")]
[Address(RVA = "0x895688", Offset = "0x895688", VA = "0x895688", Slot = "7")]
[DebuggerHidden]
get
{
return null;
}
}
// Token: 0x0400040E RID: 1038
[Token(Token = "0x4000E36")]
[FieldOffset(Offset = "0x10")]
private int <>1__state;
// Token: 0x0400040F RID: 1039
[Token(Token = "0x4000E37")]
[FieldOffset(Offset = "0x18")]
private object <>2__current;
// Token: 0x04000410 RID: 1040
[Token(Token = "0x4000E38")]
[FieldOffset(Offset = "0x20")]
public VendingMinigame <>4__this;
// Token: 0x04000411 RID: 1041
[Token(Token = "0x4000E39")]
[FieldOffset(Offset = "0x28")]
private int <slotId>5__2;
// Token: 0x04000412 RID: 1042
[Token(Token = "0x4000E3A")]
[FieldOffset(Offset = "0x30")]
private WaitForSeconds <wait>5__3;
}
// Token: 0x020000C5 RID: 197
[Token(Token = "0x200023C")]
[Attribute(Name = "CompilerGeneratedAttribute", RVA = "0x4F92A8", Offset = "0x4F92A8")]
private sealed class <CoBlinkVend>d__26 : IEnumerator<object>, IEnumerator, IDisposable
{
// Token: 0x06000426 RID: 1062 RVA: 0x00002050 File Offset: 0x00000250
[Token(Token = "0x6000E29")]
[Address(RVA = "0x894F68", Offset = "0x894F68", VA = "0x894F68")]
[DebuggerHidden]
public <CoBlinkVend>d__26(int <>1__state)
{
}
// Token: 0x06000427 RID: 1063 RVA: 0x00002050 File Offset: 0x00000250
[Token(Token = "0x6000E2A")]
[Address(RVA = "0x8957FC", Offset = "0x8957FC", VA = "0x8957FC", Slot = "5")]
[DebuggerHidden]
private void Dispose()
{
}
// Token: 0x06000428 RID: 1064 RVA: 0x000034B0 File Offset: 0x000016B0
[Token(Token = "0x6000E2B")]
[Address(RVA = "0x895800", Offset = "0x895800", VA = "0x895800", Slot = "6")]
private bool MoveNext()
{
return default(bool);
}
// Token: 0x170000A5 RID: 165
// (get) Token: 0x06000429 RID: 1065 RVA: 0x00002052 File Offset: 0x00000252
[Token(Token = "0x1700018A")]
private object Current
{
[Token(Token = "0x6000E2C")]
[Address(RVA = "0x89595C", Offset = "0x89595C", VA = "0x89595C", Slot = "4")]
[DebuggerHidden]
get
{
return null;
}
}
// Token: 0x0600042A RID: 1066 RVA: 0x00002050 File Offset: 0x00000250
[Token(Token = "0x6000E2D")]
[Address(RVA = "0x895964", Offset = "0x895964", VA = "0x895964", Slot = "8")]
[DebuggerHidden]
private void Reset()
{
}
// Token: 0x170000A6 RID: 166
// (get) Token: 0x0600042B RID: 1067 RVA: 0x00002052 File Offset: 0x00000252
[Token(Token = "0x1700018B")]
private object Current
{
[Token(Token = "0x6000E2E")]
[Address(RVA = "0x8959C4", Offset = "0x8959C4", VA = "0x8959C4", Slot = "7")]
[DebuggerHidden]
get
{
return null;
}
}
// Token: 0x04000413 RID: 1043
[Token(Token = "0x4000E3B")]
[FieldOffset(Offset = "0x10")]
private int <>1__state;
// Token: 0x04000414 RID: 1044
[Token(Token = "0x4000E3C")]
[FieldOffset(Offset = "0x18")]
private object <>2__current;
// Token: 0x04000415 RID: 1045
[Token(Token = "0x4000E3D")]
[FieldOffset(Offset = "0x20")]
public VendingMinigame <>4__this;
// Token: 0x04000416 RID: 1046
[Token(Token = "0x4000E3E")]
[FieldOffset(Offset = "0x28")]
private int <i>5__2;
}
}
Example: Vending Machine Code Enter in Assembly:
.method public hidebysig instance void EnterDigit(string s) cil managed
{
.custom instance void [Il2CppDummyDll]Il2CppDummyDll.TokenAttribute::.ctor() = ( 01 00 01 00 53 0E 05 54 6F 6B 65 6E 09 30 78 36 // ....S..Token.0x6
30 30 30 32 36 33 ) // 000263
.custom instance void [Il2CppDummyDll]Il2CppDummyDll.AddressAttribute::.ctor() = ( 01 00 03 00 53 0E 03 52 56 41 08 30 78 38 39 34 // ....S..RVA.0x894
41 34 30 53 0E 06 4F 66 66 73 65 74 08 30 78 38 // A40S..Offset.0x8
39 34 41 34 30 53 0E 02 56 41 08 30 78 38 39 34 // 94A40S..VA.0x894
41 34 30 ) // A40
// Code size 1 (0x1)
.maxstack 8
IL_0000: ret
} // end of method VendingMinigame::EnterDigit
How would I be able to see the functionality of the code (either in C# or in assembly)?
User contributions licensed under CC BY-SA 3.0