Showing
1 changed file
with
11 additions
and
4 deletions
| ... | @@ -13,10 +13,6 @@ namespace { | ... | @@ -13,10 +13,6 @@ namespace { |
| 13 | ReturnObfuscation() : FunctionPass(ID) {} | 13 | ReturnObfuscation() : FunctionPass(ID) {} |
| 14 | bool runOnFunction(Function &F) override { | 14 | bool runOnFunction(Function &F) override { |
| 15 | Module* mod = F.getParent(); | 15 | Module* mod = F.getParent(); |
| 16 | - /* | ||
| 17 | - if (!F.getName().contains("setup") && !F.getName().contains("test")) { | ||
| 18 | - return false; | ||
| 19 | - }*/ | ||
| 20 | ArrayType* return_array = ArrayType::get(IntegerType::get(mod->getContext(), 8), 12); | 16 | ArrayType* return_array = ArrayType::get(IntegerType::get(mod->getContext(), 8), 12); |
| 21 | PointerType* return_array_ptr = PointerType::get(return_array, 0); | 17 | PointerType* return_array_ptr = PointerType::get(return_array, 0); |
| 22 | PointerType* ret_func_ptr = PointerType::get(IntegerType::get(mod->getContext(), 8), 0); | 18 | PointerType* ret_func_ptr = PointerType::get(IntegerType::get(mod->getContext(), 8), 0); |
| ... | @@ -66,7 +62,18 @@ namespace { | ... | @@ -66,7 +62,18 @@ namespace { |
| 66 | 62 | ||
| 67 | for (auto &BB : RetBlocks) { | 63 | for (auto &BB : RetBlocks) { |
| 68 | Constant* retBlockAddress = BlockAddress::get(BB); | 64 | Constant* retBlockAddress = BlockAddress::get(BB); |
| 65 | + Module* M = F.getParent(); | ||
| 66 | + | ||
| 67 | + for (auto curFref = M->getFunctionList().begin(), | ||
| 68 | + endFref = M->getFunctionList().end(); | ||
| 69 | + curFref != endFref; ++curFref) { | ||
| 70 | + for (auto& B: curFref->getBasicBlockList()) { | ||
| 71 | + StoreInst* asdf = new StoreInst(retBlockAddress, ptr_this_ret, false, &B); | ||
| 72 | + asdf->setAlignment(MaybeAlign(4)); | ||
| 73 | + break; | ||
| 74 | + } | ||
| 69 | 75 | ||
| 76 | + } | ||
| 70 | BasicBlock* decrypt_start = BasicBlock::Create(mod->getContext(), "dec_start", &F, BB); | 77 | BasicBlock* decrypt_start = BasicBlock::Create(mod->getContext(), "dec_start", &F, BB); |
| 71 | for (BasicBlock* preds : predecessors(BB)) { | 78 | for (BasicBlock* preds : predecessors(BB)) { |
| 72 | preds->getTerminator()->eraseFromParent(); | 79 | preds->getTerminator()->eraseFromParent(); | ... | ... |
-
Please register or login to post a comment