이한솔

보고서 및 발표자료 업로드

...@@ -14,32 +14,36 @@ namespace { ...@@ -14,32 +14,36 @@ namespace {
14 static char ID; 14 static char ID;
15 15
16 PreProcess() : FunctionPass(ID) { } 16 PreProcess() : FunctionPass(ID) { }
17 - bool runOnFunction(Function &F) override { 17 + bool runOnFunction(Function &F) override {
18 Module* mod = F.getParent(); 18 Module* mod = F.getParent();
19 std::vector<Instruction *> instructions; 19 std::vector<Instruction *> instructions;
20 std::vector<BasicBlock *> RetBlocks; 20 std::vector<BasicBlock *> RetBlocks;
21 bool inserted = false; 21 bool inserted = false;
22 std::ofstream functionFile("functions.txt", std::ios_base::app); 22 std::ofstream functionFile("functions.txt", std::ios_base::app);
23 if (functionFile.is_open()) { 23 if (functionFile.is_open()) {
24 - functionFile << F.getName().str() << "\n"; 24 + if (!F.getName().contains("__cxx") && !F.getName().contains("_GLOBAL"))
25 + functionFile << F.getName().str() << "\n";
25 functionFile.close(); 26 functionFile.close();
26 } 27 }
27 - for (auto &BB : F) { 28 + if (!F.getName().contains("__cxx") && !F.getName().contains("_GLOBAL")) {
28 - for (auto &I : BB) { 29 + for (auto &BB : F) {
29 - if (I.getOpcode() == Instruction::Ret) { 30 + for (auto &I : BB) {
30 - instructions.push_back(&I); 31 + if (I.getOpcode() == Instruction::Ret) {
32 + instructions.push_back(&I);
33 + }
31 } 34 }
32 } 35 }
33 - } 36 + for (auto &I : instructions) {
34 - for (auto &I : instructions) { 37 + BasicBlock *BB = I->getParent();
35 - BasicBlock *BB = I->getParent(); 38 + // One Instruction Basic Block has only one ret instructions
36 - // One Instruction Basic Block has only one ret instructions 39 + if (!BB->size() < 2)
37 - if (!BB->size() < 2) 40 + {
38 - { 41 + BasicBlock *retblock = BB->splitBasicBlock(I->getIterator(), "obfuscatedreturn");
39 - BasicBlock *retblock = BB->splitBasicBlock(I->getIterator(), "obfuscatedreturn"); 42 + } else {
40 - } else { 43 + BB->setName("obfuscatedreturn");
41 - BB->setName("obfuscatedreturn"); 44 + }
42 } 45 }
46 +
43 } 47 }
44 return true; 48 return true;
45 } 49 }
......