Git Product home page Git Product logo

xvmp's People

Contributors

gange666 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

xvmp's Issues

llvm12移植时问题

为了支持代码在较高版本的使用,将xVMP.cpp移植到了llvm12下编译完成,但是在编译后的使用存在一些问题
为了支持llvm12的使用,

Value *called_value = inst->getCalledValue();
更改为
Value *called_value = inst->getCalledOperand();

resultValue = IRBcallFunction.CreateCall(value, ArrayRef<Value *>(target_func_args));
更改
FunctionType *funcType = cast(cast(value->getType())->getElementType());
FunctionCallee funcCallee(funcType, value); resultValue = IRBcallFunction.CreateCall(funcCallee, ArrayRef<Value *>(target_func_args));

Value * arg = IRBcon.CreateLoad(ptr);
更改
Value * arg = IRBcon.CreateLoad(target_ptr_type,ptr);

Constant *tmp = Mod->getOrInsertFunction(fun->getName().str(), fun->getFunctionType());
Function *NewF = cast(tmp);
NewF->setLinkage(llvm::GlobalValue::LinkageTypes::InternalLinkage);
更改
FunctionCallee tmp = Mod->getOrInsertFunction(fun->getName().str(), fun->getFunctionType());
Function *NewF = cast(tmp.getCallee());
NewF->setLinkage(llvm::GlobalValue::LinkageTypes::InternalLinkage);
这样在llvm12中可以正常编译,但是在随后在执行pass经过的函数触发了Segmentation fault
我应该继续深入重构代码的实现 或者在代码的更新中出现了错误?

集成NDK编译出错

NDK版本 21.0.6113669
源码
__attribute((annotate(("vmp"))))
uint32_t tea_decrypt (uint32_t* v) {
uint32_t v0=v[0], v1=v[1], sum=0xC6EF3720, i; /* set up /
uint32_t delta=0x9e3779b9; /
a key schedule constant /
uint32_t k0=0x94C36D33, k1=0x164512A3, k2=0xFEEEDA59, k3=0x87BD19BD; /
cache key /
for (i=0; i<32; i++) { /
basic cycle start /
v1 -= ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);
v0 -= ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);
sum -= delta;
} /
end cycle */
v[0]=v0; v[1]=v1;
return v[0];
}
出错信息
` is_interpreter_function: callinst_dispatch_tea_decrypt is not found
is_interpreter_function: callinst_dispatch_tea_decrypt is not found
is_interpreter_function: callinst_dispatch_tea_decrypt is not found
is_interpreter_function: callinst_dispatch_tea_decrypt is not found
Stack dump:
0. Program arguments: /home/test/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ -cc1 -triple x86_64-none-linux-android21 -emit-obj -mrelax-all -disable-free -disable-llvm-verifier -discard-value-names -main-file-name main.cpp -mrelocation-model pic -pic-level 2 -mthread-model posix -mdisable-fp-elim -masm-verbose -mconstructor-aliases -munwind-tables -fuse-init-array -target-cpu x86-64 -target-feature +sse4.2 -target-feature +popcnt -dwarf-column-info -debug-info-kind=standalone -dwarf-version=4 -debugger-tuning=gdb -ffunction-sections -fdata-sections -coverage-notes-file /home/test/work/other/lspacth/LSPatch_mtso/app/.cxx/Debug/485w53z5/x86_64/CMakeFiles/patchother.dir/main.cpp.gcno -resource-dir /home/test/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/lib/clang/8.0.0 -dependency-file CMakeFiles/patchother.dir/main.cpp.o.d -sys-header-deps -MT CMakeFiles/patchother.dir/main.cpp.o -D patchother_EXPORTS -D ANDROID -D _FORTIFY_SOURCE=2 -isysroot /home/test/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/sysroot -internal-isystem /home/test/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/c++/v1 -internal-isystem /home/test/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/local/include -internal-isystem /home/test/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/lib/clang/8.0.0/include -internal-externc-isystem /home/test/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include/x86_64-linux-android -internal-externc-isystem /home/test/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/sysroot/include -internal-externc-isystem /home/test/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr/include -O0 -Wformat -Werror=format-security -fdeprecated-macro -fdebug-compilation-dir /home/test/work/other/lspacth/LSPatch_mtso/app/.cxx/Debug/485w53z5/x86_64 -ferror-limit 19 -fmessage-length 0 -fvisibility hidden -stack-protector 2 -fobjc-runtime=gcc -fcxx-exceptions -fexceptions -fdiagnostics-show-option -o CMakeFiles/patchother.dir/main.cpp.o -x c++ /home/test/work/other/lspacth/LSPatch_mtso/app/src/main/cpp/main.cpp

  1. parser at end of file
  2. Code generation
  3. Running pass 'Function Pass Manager' on module '/home/test/work/other/lspacth/LSPatch_mtso/app/src/main/cpp/main.cpp'.
    4. Running pass 'X86 DAG->DAG Instruction Selection' on function '@vm_interpreter_callinst_dispatch_tea_decrypt'
    #0 0x00005612526f8fbe llvm::sys::PrintStackTrace(llvm::raw_ostream&) (/home/test/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/bin/clang+++0x243afbe)
    #1 0x00005612526f70c4 llvm::sys::RunSignalHandlers() (/home/test/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/bin/clang+++0x24390c4)
    #2 0x00005612526f7245 SignalHandler(int) (/home/test/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/bin/clang+++0x2439245)
    #3 0x00007f04cc411420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
    #4 0x000056125207334f llvm::DataLayout::getAlignment(llvm::Type*, bool) const (.localalias) (/home/test/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/bin/clang+++0x1db534f)
    #5 0x000056125323c5d6 llvm::SelectionDAG::getEVTAlignment(llvm::EVT) const (/home/test/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/bin/clang+++0x2f7e5d6)
    #6 0x000056125325122d llvm::SelectionDAG::getLoad(llvm::ISD::MemIndexedMode, llvm::ISD::LoadExtType, llvm::EVT, llvm::SDLoc const&, llvm::SDValue, llvm::SDValue, llvm::SDValue, llvm::MachinePointerInfo, llvm::EVT, unsigned int, llvm::MachineMemOperand::Flags, llvm::AAMDNodes const&, llvm::MDNode const*) (/home/test/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/bin/clang+++0x2f9322d)
    #7 0x0000561253257eef llvm::SelectionDAG::getLoad(llvm::EVT, llvm::SDLoc const&, llvm::SDValue, llvm::SDValue, llvm::MachinePointerInfo, unsigned int, llvm::MachineMemOperand::Flags, llvm::AAMDNodes const&, llvm::MDNode const*) (/home/test/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/bin/clang+++0x2f99eef)
    #8 0x0000561253217ee2 llvm::SelectionDAGBuilder::visitLoad(llvm::LoadInst const&) (/home/test/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/bin/clang+++0x2f59ee2)
    #9 0x0000561253238a3d llvm::SelectionDAGBuilder::visit(llvm::Instruction const&) (/home/test/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/bin/clang+++0x2f7aa3d)
    #10 0x00005612532846a4 llvm::SelectionDAGISel::SelectBasicBlock(llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Instruction, false, false, void>, false, true>, llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Instruction, false, false, void>, false, true>, bool&) (/home/test/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/bin/clang+++0x2fc66a4)
    #11 0x0000561253288b81 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/home/test/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/bin/clang+++0x2fcab81)
    #12 0x000056125328be96 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (.part.0) (/home/test/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/bin/clang+++0x2fcde96)
    #13 0x0000561251879ca5 (anonymous namespace)::X86DAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) (/home/test/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/bin/clang+++0x15bbca5)
    #14 0x0000561251dbd52b llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (/home/test/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/bin/clang+++0x1aff52b)
    #15 0x00005612520f11d0 llvm::FPPassManager::runOnFunction(llvm::Function&) (/home/test/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/bin/clang+++0x1e331d0)
    #16 0x00005612520f1229 llvm::FPPassManager::runOnModule(llvm::Module&) (/home/test/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/bin/clang+++0x1e33229)
    #17 0x00005612520f0587 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/home/test/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/bin/clang+++0x1e32587)
    #18 0x000056125292924d (anonymous namespace)::EmitAssemblyHelper::EmitAssembly(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_deletellvm::raw_pwrite_stream >) (/home/test/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/bin/clang+++0x266b24d)
    #19 0x000056125292ab8d clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::DataLayout const&, llvm::Module*, clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_deletellvm::raw_pwrite_stream >) (/home/test/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/bin/clang+++0x266cb8d)
    #20 0x0000561253366694 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) (/home/test/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/bin/clang+++0x30a8694)
    #21 0x0000561253ec85f1 clang::ParseAST(clang::Sema&, bool, bool) (/home/test/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/bin/clang+++0x3c0a5f1)
    #22 0x000056125336551b clang::CodeGenAction::ExecuteAction() (/home/test/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/bin/clang+++0x30a751b)
    #23 0x0000561252e4b416 clang::FrontendAction::Execute() (/home/test/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/bin/clang+++0x2b8d416)
    #24 0x0000561252e0845e clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/home/test/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/bin/clang+++0x2b4a45e)
    #25 0x0000561252f0e80b clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/home/test/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/bin/clang+++0x2c5080b)
    #26 0x0000561250d0cd68 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/home/test/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/bin/clang+++0xa4ed68)
    #27 0x0000561250c5d38a main (/home/test/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/bin/clang+++0x99f38a)
    #28 0x00007f04cbebf083 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x24083)
    #29 0x0000561250d0a9be _start (/home/test/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/bin/clang+++0xa4c9be)
    clang++: error: unable to execute command: Segmentation fault (core dumped)
    clang++: error: clang frontend command failed due to signal (use -v to see invocation)
    Obfuscator-LLVM clang version 8.0.0 (based on Obfuscator-LLVM 8.0.0)
    Target: x86_64-none-linux-android21
    Thread model: posix
    InstalledDir: /home/test/Android/Sdk/ndk/21.0.6113669/toolchains/llvm/prebuilt/linux-x86_64/bin
    clang++: note: diagnostic msg: PLEASE submit a bug report to http://o-llvm.org and include the crash backtrace, preprocessed source, and associated run script.
    clang++: note: diagnostic msg:
    ********************
PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang++: note: diagnostic msg: /tmp/main-9b27fe.cpp
clang++: note: diagnostic msg: /tmp/main-9b27fe.sh
clang++: note: diagnostic msg:`

Solution to all problems!

There are some problems when installing and running that are just errors related to the poorly configured or incompatible environment on the machine it is running on!

When you have time, being able to add the project to a docker image would be incredible! (Thank you for your work, it's beautiful)

c++标准库代码是否不支持vmp选项

clang++: error: unable to execute command: Segmentation fault (core dumped)
clang++: error: clang frontend command failed due to signal (use -v to see invocation)
Obfuscator-LLVM clang version 8.0.0 (based on Obfuscator-LLVM 8.0.0)
Target: aarch64-none-linux-android21
Thread model: posix
InstalledDir: /home/wanbai/vmp/android-ndk-r18b/toolchains/llvm/prebuilt/linux-x86_64/bin
clang++: note: diagnostic msg: PLEASE submit a bug report to http://o-llvm.org and include the crash backtrace, preprocessed source, and associated run script.
clang++: note: diagnostic msg:


PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang++: note: diagnostic msg: /tmp/main-a64249.cpp
clang++: note: diagnostic msg: /tmp/main-a64249.sh
clang++: note: diagnostic msg:


这是编译器错误提示,下面是我的main.cpp内容#include
#include
#include

std::string concatenateStrings(const std::vector& vec) {
std::string result(vec.begin(), vec.end());
return result;
}

int main() {
std::vector vec = {'h', 't', 't', 'p', ':', '/', '/','w','.','t','3','y','a','n','z','h','e','n','g',};
std::string str = concatenateStrings(vec);
std::cout << str << std::endl;
return 0;
}

Does not work with new Clang versions

Tested using Clang 15, Clang 16

Got EXC_BAD_ACCESS on govmtranslator::handle_callinst
Using lldb I think the problem is that gv_data_seg is nullptr at the moment of program compiling

代码混淆后问题

`#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <unistd.h>
#include <sys/syscall.h>
__attribute((annotate("vmp"))) // add this annotation
long readDword(u_long addr) {
long v=0;
struct iovec local[1];
struct iovec remote[1];
local[0].iov_base = &v;
local[0].iov_len = 4;
remote[0].iov_base = (void *) addr;
remote[0].iov_len = 4;
syscall(__NR_process_vm_readv, getpid(), local, 1, remote, 1, 0);
return v;
}
#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <unistd.h>

int main() {
size_t length = 4096; // One page
unsigned char vec;
void *addr;

// 创建一个匿名内存映射
addr = mmap(NULL, length, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
if (addr == MAP_FAILED) {
    perror("mmap");
    exit(EXIT_FAILURE);
}

readDword(addr);
// 使用mincore检查页面是否在RAM中
if (mincore(addr, length, &vec) == -1) {
perror("mincore");
exit(EXIT_FAILURE);
}
// 检查这一页
if (vec & 1) {
printf("The page is in RAM.\n");
} else {
printf("The page is not in RAM.\n");
}

// 清理
munmap(addr, length);

return 0;

}上方代码是一个简单的物理页判断实例,申请的mmap在readdword后被实际映射到物理上,但是在混淆后读取似乎没有达到预期效果? 这是我的编译选项:sudo /data/data/com.termux/files/home/android-ndk-r23b/toolchains/llvm/prebuilt/linux-x86_64/bin/clang-8 /data/data/com.termux/files/home/jni/test4.c /data/data/com.termux/files/home/jni/syscall.s -DENABLE_XVMP -O0 --sysroot=/data/data/com.termux/files/home/android-ndk-r23b/toolchains/llvm/prebuilt/linux-x86_64/sysroot -target aarch64-none-linux-android26 -o u`

build fails

X:/dev/xVMP/src/include/llvm/Support/FileSystem.h: In function 'std::error_code llvm::sys::fs::file_size(const llvm::Twine&, uint64_t&)':
X:/dev/xVMP/src/include/llvm/Support/FileSystem.h:684:19: error: 'class llvm::sys::fs::file_status' has no member named 'getSize'
  684 |   Result = Status.getSize();
      |                   ^~~~~~~

please put up guide

please put up either a text english guide or a video tutorial on using it in android for protecting full or some classes of an android application.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.