xvmp's People
Forkers
gmh5225 byrespect liumengdeqq ckandroidproject crackercat mrack fengjixuchui lpcdma 1683942030 classic130 binguoa killvxk cxapython yfw123 hzmslx shonker testcc2c acbocai kungia09 tjzhou23 751643992 amlloc archar123 ronaldinhol rtfsc-android mymoses zzz9328fb df13954 2274254 pfxjacky becomedragon kycgni losenineai deger123 qazxsw1597532018 stdhu letenz helloppm tugohost tangsilian npc2000 d34d633f enovella yax571 yaobanglin sh4m2hwz smallzhong orange150 whisper-zhang daerduotutu922 lvyitian uni7corn hide067 kitty22520 1226357697 tututu-patch p0prxx heitanbc zhuzhu-top xyxdaily xmanstyle stevezhou6 shuaibiboboxvmp'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
- parser at end of file
- Code generation
- 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)
能否整合进ndk,生成arm32或者arm64的so?
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
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.