MethodControlFlowCalculator对InputArgs为0的BasicBlock随机化打乱顺序
parent
c596b58d3e
commit
4db68f707b
|
@ -362,13 +362,40 @@ namespace Obfuz.ObfusPasses.ControlFlowObfus
|
||||||
InsertSwitchMachineBasicBlockForGroup(rootGroup, inst2bb);
|
InsertSwitchMachineBasicBlockForGroup(rootGroup, inst2bb);
|
||||||
}
|
}
|
||||||
|
|
||||||
//private void ShuffleBasicBlocks0(List<BasicBlockInfo> bbs)
|
private void ShuffleBasicBlocks0(List<BasicBlockInfo> bbs)
|
||||||
//{
|
{
|
||||||
// int n = bbs.Count;
|
if (bbs.Count <= 2)
|
||||||
// if (n <= 1)
|
{
|
||||||
// {
|
return;
|
||||||
// return;
|
}
|
||||||
// }
|
|
||||||
|
var subBlocksExcludeFirstLast = bbs.GetRange(1, bbs.Count - 2);
|
||||||
|
|
||||||
|
var blocksInputArgsCountZero = new List<BasicBlockInfo>();
|
||||||
|
var blocksInputArgsCountNonZero = new List<BasicBlockInfo>();
|
||||||
|
foreach (var bb in subBlocksExcludeFirstLast)
|
||||||
|
{
|
||||||
|
if (bb.inputArgs.locals.Count == 0)
|
||||||
|
{
|
||||||
|
blocksInputArgsCountZero.Add(bb);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
blocksInputArgsCountNonZero.Add(bb);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
RandomUtil.ShuffleList(blocksInputArgsCountZero, _random);
|
||||||
|
|
||||||
|
int index = 1;
|
||||||
|
foreach (var bb in blocksInputArgsCountZero)
|
||||||
|
{
|
||||||
|
bbs[index++] = bb;
|
||||||
|
}
|
||||||
|
foreach (var bb in blocksInputArgsCountNonZero)
|
||||||
|
{
|
||||||
|
bbs[index++] = bb;
|
||||||
|
}
|
||||||
|
Assert.AreEqual(bbs.Count - 1, index, "Shuffled basic blocks count should be the same as original count minus first and last blocks");
|
||||||
|
|
||||||
//var firstSection = new List<BasicBlockInfo>() { bbs[0] };
|
//var firstSection = new List<BasicBlockInfo>() { bbs[0] };
|
||||||
//var sectionsExcludeFirstLast = new List<List<BasicBlockInfo>>();
|
//var sectionsExcludeFirstLast = new List<List<BasicBlockInfo>>();
|
||||||
|
@ -401,30 +428,30 @@ namespace Obfuz.ObfusPasses.ControlFlowObfus
|
||||||
//bbs.AddRange(sectionsExcludeFirstLast.SelectMany(section => section));
|
//bbs.AddRange(sectionsExcludeFirstLast.SelectMany(section => section));
|
||||||
//bbs.AddRange(lastSection);
|
//bbs.AddRange(lastSection);
|
||||||
//Assert.AreEqual(n, bbs.Count, "Shuffled basic blocks count should be the same as original count");
|
//Assert.AreEqual(n, bbs.Count, "Shuffled basic blocks count should be the same as original count");
|
||||||
//}
|
}
|
||||||
|
|
||||||
private void ShuffleBasicBlocks(List<BasicBlockInfo> bbs)
|
private void ShuffleBasicBlocks(List<BasicBlockInfo> bbs)
|
||||||
{
|
{
|
||||||
// TODO
|
// TODO
|
||||||
|
|
||||||
//int n = bbs.Count;
|
int n = bbs.Count;
|
||||||
//BasicBlockInfo groupPrev = bbs[0].prev;
|
BasicBlockInfo groupPrev = bbs[0].prev;
|
||||||
//BasicBlockInfo groupNext = bbs[n - 1].next;
|
BasicBlockInfo groupNext = bbs[n - 1].next;
|
||||||
////RandomUtil.ShuffleList(bbs, _random);
|
//RandomUtil.ShuffleList(bbs, _random);
|
||||||
//ShuffleBasicBlocks0(bbs);
|
ShuffleBasicBlocks0(bbs);
|
||||||
//BasicBlockInfo prev = groupPrev;
|
BasicBlockInfo prev = groupPrev;
|
||||||
//for (int i = 0; i < n; i++)
|
for (int i = 0; i < n; i++)
|
||||||
//{
|
{
|
||||||
// BasicBlockInfo cur = bbs[i];
|
BasicBlockInfo cur = bbs[i];
|
||||||
// cur.prev = prev;
|
cur.prev = prev;
|
||||||
// prev.next = cur;
|
prev.next = cur;
|
||||||
// prev = cur;
|
prev = cur;
|
||||||
//}
|
}
|
||||||
//prev.next = groupNext;
|
prev.next = groupNext;
|
||||||
//if (groupNext != null)
|
if (groupNext != null)
|
||||||
//{
|
{
|
||||||
// groupNext.prev = prev;
|
groupNext.prev = prev;
|
||||||
//}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Local _globalSwitchIndexLocal;
|
private Local _globalSwitchIndexLocal;
|
||||||
|
|
Loading…
Reference in New Issue