本文整理汇总了C#中RandomGenerator.NextUInt32方法的典型用法代码示例。如果您正苦于以下问题:C# RandomGenerator.NextUInt32方法的具体用法?C# RandomGenerator.NextUInt32怎么用?C# RandomGenerator.NextUInt32使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类RandomGenerator
的用法示例。
在下文中一共展示了RandomGenerator.NextUInt32方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Initialize
public override void Initialize(RandomGenerator random) {
if (random.NextInt32(3) == 0)
Mask = 0xffffffff;
else
Mask = random.NextUInt32();
Key = random.NextUInt32() | 1;
}
示例2: GenerateExpression
static Expression GenerateExpression(RandomGenerator random, Expression current, int currentDepth, int targetDepth) {
if (currentDepth == targetDepth || (currentDepth > targetDepth / 3 && random.NextInt32(100) > 85))
return current;
switch ((ExpressionOps)random.NextInt32(6)) {
case ExpressionOps.Add:
return GenerateExpression(random, current, currentDepth + 1, targetDepth) +
GenerateExpression(random, (LiteralExpression)random.NextUInt32(), currentDepth + 1, targetDepth);
case ExpressionOps.Sub:
return GenerateExpression(random, current, currentDepth + 1, targetDepth) -
GenerateExpression(random, (LiteralExpression)random.NextUInt32(), currentDepth + 1, targetDepth);
case ExpressionOps.Mul:
return GenerateExpression(random, current, currentDepth + 1, targetDepth) * (LiteralExpression)(random.NextUInt32() | 1);
case ExpressionOps.Xor:
return GenerateExpression(random, current, currentDepth + 1, targetDepth) ^
GenerateExpression(random, (LiteralExpression)random.NextUInt32(), currentDepth + 1, targetDepth);
case ExpressionOps.Not:
return ~GenerateExpression(random, current, currentDepth + 1, targetDepth);
case ExpressionOps.Neg:
return -GenerateExpression(random, current, currentDepth + 1, targetDepth);
}
throw new UnreachableException();
}
示例3: Initialize
public override void Initialize(RandomGenerator random) {
Operation = (CryptoNumOps)(random.NextInt32(4));
switch (Operation) {
case CryptoNumOps.Add:
case CryptoNumOps.Xor:
Key = InverseKey = random.NextUInt32();
break;
case CryptoNumOps.Mul:
Key = random.NextUInt32() | 1;
InverseKey = MathsUtils.modInv(Key);
break;
case CryptoNumOps.Xnor:
Key = random.NextUInt32();
InverseKey = ~Key;
break;
}
}
示例4: HandleInject
public void HandleInject(AntiTamperProtection parent, ConfuserContext context, ProtectionParameters parameters) {
random = context.Registry.GetService<IRandomService>().GetRandomGenerator(parent.FullId);
z = random.NextUInt32();
x = random.NextUInt32();
c = random.NextUInt32();
v = random.NextUInt32();
name1 = random.NextUInt32() & 0x7f7f7f7f;
name2 = random.NextUInt32() & 0x7f7f7f7f;
switch (parameters.GetParameter(context, context.CurrentModule, "key", Mode.Normal)) {
case Mode.Normal:
deriver = new NormalDeriver();
break;
case Mode.Dynamic:
deriver = new DynamicDeriver();
break;
default:
throw new UnreachableException();
}
deriver.Init(context, random);
var rt = context.Registry.GetService<IRuntimeService>();
TypeDef initType = rt.GetRuntimeType("Confuser.Runtime.AntiTamperNormal");
IEnumerable<IDnlibDef> members = InjectHelper.Inject(initType, context.CurrentModule.GlobalType, context.CurrentModule);
var initMethod = (MethodDef)members.Single(m => m.Name == "Initialize");
initMethod.Body.SimplifyMacros(initMethod.Parameters);
List<Instruction> instrs = initMethod.Body.Instructions.ToList();
for (int i = 0; i < instrs.Count; i++) {
Instruction instr = instrs[i];
if (instr.OpCode == OpCodes.Ldtoken) {
instr.Operand = context.CurrentModule.GlobalType;
}
else if (instr.OpCode == OpCodes.Call) {
var method = (IMethod)instr.Operand;
if (method.DeclaringType.Name == "Mutation" &&
method.Name == "Crypt") {
Instruction ldDst = instrs[i - 2];
Instruction ldSrc = instrs[i - 1];
Debug.Assert(ldDst.OpCode == OpCodes.Ldloc && ldSrc.OpCode == OpCodes.Ldloc);
instrs.RemoveAt(i);
instrs.RemoveAt(i - 1);
instrs.RemoveAt(i - 2);
instrs.InsertRange(i - 2, deriver.EmitDerivation(initMethod, context, (Local)ldDst.Operand, (Local)ldSrc.Operand));
}
}
}
initMethod.Body.Instructions.Clear();
foreach (Instruction instr in instrs)
initMethod.Body.Instructions.Add(instr);
MutationHelper.InjectKeys(initMethod,
new[] { 0, 1, 2, 3, 4 },
new[] { (int)(name1 * name2), (int)z, (int)x, (int)c, (int)v });
var name = context.Registry.GetService<INameService>();
var marker = context.Registry.GetService<IMarkerService>();
foreach (IDnlibDef def in members) {
name.MarkHelper(def, marker, parent);
if (def is MethodDef)
parent.ExcludeMethod(context, (MethodDef)def);
}
MethodDef cctor = context.CurrentModule.GlobalType.FindStaticConstructor();
cctor.Body.Instructions.Insert(0, Instruction.Create(OpCodes.Call, initMethod));
parent.ExcludeMethod(context, cctor);
}
示例5: HandleInject
public void HandleInject(AntiTamperProtection parent, ConfuserContext context, ProtectionParameters parameters) {
this.context = context;
random = context.Registry.GetService<IRandomService>().GetRandomGenerator(parent.FullId);
z = random.NextUInt32();
x = random.NextUInt32();
c = random.NextUInt32();
v = random.NextUInt32();
name1 = random.NextUInt32() & 0x7f7f7f7f;
name2 = random.NextUInt32() & 0x7f7f7f7f;
key = random.NextUInt32();
fieldLayout = new byte[6];
for (int i = 0; i < 6; i++) {
int index = random.NextInt32(0, 6);
while (fieldLayout[index] != 0)
index = random.NextInt32(0, 6);
fieldLayout[index] = (byte)i;
}
switch (parameters.GetParameter(context, context.CurrentModule, "key", Mode.Normal)) {
case Mode.Normal:
deriver = new NormalDeriver();
break;
case Mode.Dynamic:
deriver = new DynamicDeriver();
break;
default:
throw new UnreachableException();
}
deriver.Init(context, random);
var rt = context.Registry.GetService<IRuntimeService>();
TypeDef initType = rt.GetRuntimeType("Confuser.Runtime.AntiTamperJIT");
IEnumerable<IDnlibDef> defs = InjectHelper.Inject(initType, context.CurrentModule.GlobalType, context.CurrentModule);
initMethod = defs.OfType<MethodDef>().Single(method => method.Name == "Initialize");
initMethod.Body.SimplifyMacros(initMethod.Parameters);
List<Instruction> instrs = initMethod.Body.Instructions.ToList();
for (int i = 0; i < instrs.Count; i++) {
Instruction instr = instrs[i];
if (instr.OpCode == OpCodes.Ldtoken) {
instr.Operand = context.CurrentModule.GlobalType;
}
else if (instr.OpCode == OpCodes.Call) {
var method = (IMethod)instr.Operand;
if (method.DeclaringType.Name == "Mutation" &&
method.Name == "Crypt") {
Instruction ldDst = instrs[i - 2];
Instruction ldSrc = instrs[i - 1];
Debug.Assert(ldDst.OpCode == OpCodes.Ldloc && ldSrc.OpCode == OpCodes.Ldloc);
instrs.RemoveAt(i);
instrs.RemoveAt(i - 1);
instrs.RemoveAt(i - 2);
instrs.InsertRange(i - 2, deriver.EmitDerivation(initMethod, context, (Local)ldDst.Operand, (Local)ldSrc.Operand));
}
}
}
initMethod.Body.Instructions.Clear();
foreach (Instruction instr in instrs)
initMethod.Body.Instructions.Add(instr);
MutationHelper.InjectKeys(initMethod,
new[] { 0, 1, 2, 3, 4 },
new[] { (int)(name1 * name2), (int)z, (int)x, (int)c, (int)v });
var name = context.Registry.GetService<INameService>();
var marker = context.Registry.GetService<IMarkerService>();
cctor = context.CurrentModule.GlobalType.FindStaticConstructor();
cctorRepl = new MethodDefUser(name.RandomName(), MethodSig.CreateStatic(context.CurrentModule.CorLibTypes.Void));
cctorRepl.IsStatic = true;
cctorRepl.Access = MethodAttributes.CompilerControlled;
cctorRepl.Body = new CilBody();
cctorRepl.Body.Instructions.Add(Instruction.Create(OpCodes.Ret));
context.CurrentModule.GlobalType.Methods.Add(cctorRepl);
name.MarkHelper(cctorRepl, marker, parent);
MutationHelper.InjectKeys(defs.OfType<MethodDef>().Single(method => method.Name == "HookHandler"),
new[] { 0 }, new[] { (int)key });
foreach (IDnlibDef def in defs) {
if (def.Name == "MethodData") {
var dataType = (TypeDef)def;
FieldDef[] fields = dataType.Fields.ToArray();
var layout = fieldLayout.Clone() as byte[];
Array.Sort(layout, fields);
for (byte j = 0; j < 6; j++)
layout[j] = j;
Array.Sort(fieldLayout, layout);
fieldLayout = layout;
dataType.Fields.Clear();
foreach (FieldDef f in fields)
dataType.Fields.Add(f);
}
name.MarkHelper(def, marker, parent);
if (def is MethodDef)
parent.ExcludeMethod(context, (MethodDef)def);
}
parent.ExcludeMethod(context, cctor);
}
示例6: ProcessBlocks
//.........这里部分代码省略.........
updated = true;
}
}
if (block.Footer.OpCode.Code == Code.Endfilter || block.Footer.OpCode.Code == Code.Endfinally) {
// Match the exit state within finally/fault/filter
List<ExceptionHandler> ehs;
if (!ehMap.TryGetValue(block, out ehs)) {
ehs = new List<ExceptionHandler>();
int footerIndex = graph.IndexOf(block.Footer);
foreach (var eh in graph.Body.ExceptionHandlers) {
if (eh.FilterStart != null && block.Footer.OpCode.Code == Code.Endfilter) {
if (footerIndex >= graph.IndexOf(eh.FilterStart) &&
footerIndex < graph.IndexOf(eh.HandlerStart))
ehs.Add(eh);
}
else if (eh.HandlerType == ExceptionHandlerType.Finally ||
eh.HandlerType == ExceptionHandlerType.Fault) {
if (footerIndex >= graph.IndexOf(eh.HandlerStart) &&
(eh.HandlerEnd == null || footerIndex < graph.IndexOf(eh.HandlerEnd)))
ehs.Add(eh);
}
}
ehMap[block] = ehs;
}
foreach (var eh in ehs) {
uint ehVal;
if (finallyIds.TryGetValue(eh, out ehVal)) {
if (key.ExitState > ehVal) {
finallyIds[eh] = key.ExitState;
updated = true;
}
else if (key.ExitState < ehVal) {
key.ExitState = ehVal;
updated = true;
}
}
else {
finallyIds[eh] = key.ExitState;
updated = true;
}
}
}
else if (block.Footer.OpCode.Code == Code.Leave || block.Footer.OpCode.Code == Code.Leave_S) {
// Match the exit state with finally/fault/filter
List<ExceptionHandler> ehs;
if (!ehMap.TryGetValue(block, out ehs)) {
ehs = new List<ExceptionHandler>();
int footerIndex = graph.IndexOf(block.Footer);
foreach (var eh in graph.Body.ExceptionHandlers) {
if (footerIndex >= graph.IndexOf(eh.TryStart) &&
(eh.TryEnd == null || footerIndex < graph.IndexOf(eh.TryEnd)))
ehs.Add(eh);
}
ehMap[block] = ehs;
}
uint? maxVal = null;
foreach (var eh in ehs) {
uint ehVal;
if (finallyIds.TryGetValue(eh, out ehVal) && (maxVal == null || ehVal > maxVal)) {
if (maxVal != null)
updated = true;
maxVal = ehVal;
}
}
if (maxVal != null) {
if (key.ExitState > maxVal.Value) {
maxVal = key.ExitState;
updated = true;
}
else if (key.ExitState < maxVal.Value) {
key.ExitState = maxVal.Value;
updated = true;
}
foreach (var eh in ehs)
finallyIds[eh] = maxVal.Value;
}
}
keys[block.Id] = key;
}
} while (updated);
if (random != null) {
// Replace id with actual values
var idMap = new Dictionary<uint, uint>();
for (int i = 0; i < keys.Length; i++) {
BlockKey key = keys[i];
uint entryId = key.EntryState;
if (!idMap.TryGetValue(entryId, out key.EntryState))
key.EntryState = idMap[entryId] = random.NextUInt32();
uint exitId = key.ExitState;
if (!idMap.TryGetValue(exitId, out key.ExitState))
key.ExitState = idMap[exitId] = random.NextUInt32();
keys[i] = key;
}
}
}
示例7: Init
public void Init(ConfuserContext ctx, RandomGenerator random)
{
k1 = random.NextUInt32() | 1;
k2 = random.NextUInt32() | 1;
k3 = random.NextUInt32() | 1;
seed = random.NextUInt32();
}