All Projects → maoabc → nmmp

maoabc / nmmp

Licence: other
dex-vm used to protect the android classes.dex file

Programming Languages

c
50402 projects - #5 most used programming language
java
68154 projects - #9 most used programming language
C++
36643 projects - #6 most used programming language
assembly
5116 projects
M4
1887 projects
HTML
75241 projects

Projects that are alternatives of or similar to nmmp

Android Disassembler
Disassemble ANY files including .so (NDK, JNI), Windows PE(EXE, DLL, SYS, etc), linux binaries, libraries, and any other files such as pictures, audios, etc(for fun)files on Android. Capstone-based disassembler application on android. 안드로이드 NDK 공유 라이브러리, Windows 바이너리, etc,... 리버싱 앱
Stars: ✭ 250 (+9.17%)
Mutual labels:  ndk
UseCmakeBuildLib
用Cmake的方式构建a静态库,so动态库,且集成到项目中
Stars: ✭ 46 (-79.91%)
Mutual labels:  ndk
Camera2GLPreview
Android camera preview application using Camera2 API and OpenGL ES/Vulkan
Stars: ✭ 140 (-38.86%)
Mutual labels:  ndk
ZeeArchiver
Zee is an efficient and simple to use Android Archiver and decompressor. It can decompress and compress from-to all the formats supported by the well known 7zip utility. Copyright © 2018 Mahmoud Galal , for support contact me:[email protected]
Stars: ✭ 35 (-84.72%)
Mutual labels:  ndk
SecuritySample
(Android) Hide encrypted secret API keys in C/C++ code, retrieve and decrypt them via JNI. Google SafetyNet APIs example.
Stars: ✭ 49 (-78.6%)
Mutual labels:  ndk
libandroidjni
Android JNI bindings library
Stars: ✭ 66 (-71.18%)
Mutual labels:  ndk
Relinker
A robust native library loader for Android.
Stars: ✭ 2,612 (+1040.61%)
Mutual labels:  ndk
ScanShine
ScanShine - quickly take shining scans of your documents by using only your android phone. This scanner app takes pictures of docs, trims, enhances, and let you share them to your friends. Everything packed in an optimistic sunshine theme.
Stars: ✭ 19 (-91.7%)
Mutual labels:  ndk
Tango-C-NDK-Tutorial
Helping those who want to get involved in the realm of Augmented Reality
Stars: ✭ 16 (-93.01%)
Mutual labels:  ndk
android-iperf
Pre-compiled iperf/iperf3 binaries for Android + Dockerfile with SDK and NDK for manual build
Stars: ✭ 66 (-71.18%)
Mutual labels:  ndk
PersonDemo
🔥 一些个人学习中备份的技术方案
Stars: ✭ 16 (-93.01%)
Mutual labels:  ndk
Android-T3
Android 核心知识点整理归纳!!!
Stars: ✭ 315 (+37.55%)
Mutual labels:  ndk
byopen
🎉A dlopen library that bypasses mobile system limitation
Stars: ✭ 241 (+5.24%)
Mutual labels:  ndk
opencv android setup tutorial
Tutorial on OpenCV for Android with Android Studio
Stars: ✭ 32 (-86.03%)
Mutual labels:  ndk
android.cr
Create Android applications using Crystal and the NDK
Stars: ✭ 23 (-89.96%)
Mutual labels:  ndk
Sol2
Sol3 (sol2 v3.0) - a C++ <-> Lua API wrapper with advanced features and top notch performance - is here, and it's great! Documentation:
Stars: ✭ 2,791 (+1118.78%)
Mutual labels:  ndk
ChangeVoice
NDK语音消息的变声处理
Stars: ✭ 33 (-85.59%)
Mutual labels:  ndk
AverageFaceDemo
Average face on android
Stars: ✭ 31 (-86.46%)
Mutual labels:  ndk
android-sysinfo
No description or website provided.
Stars: ✭ 13 (-94.32%)
Mutual labels:  ndk
NativeGL demo
此程序使用android native代码实现EGL,并使用SurfaceView作为OpenGL绘图窗口。即可提高图形渲染性能,又可使用java层定义的图形界面
Stars: ✭ 43 (-81.22%)
Mutual labels:  ndk

nmmp

基于dex-vm运行dalvik字节码从而对dex进行保护,增加反编译难度。 项目分为两部分nmm-protect是纯java项目,对dex进行转换,把dex里数据转为c结构体,opcode随机化生成ndk项目,编译后生成加固后的apk。nmmvm是一个安卓项目,包含dex-vm实现及各种dalvik指令的测试等。

nmm-protect

  • 简单使用

不编译nmm-protect,可以直接看使用它生成项目及最后的apk,一个对apk处理的例子

例子在linux环境下测试的,windows也应该没问题,先安装好JDK及android sdk和ndk。(windows下apk资源复制可能出问题,如果遇到可以手动处理,复制旧apk里的res到加固后的apk)

下载nmm-protect-1.2.jar,配置好环境变量ANDROID_SDK_HOME、ANDROID_NDK_HOME:

export ANDROID_SDK_HOME=/opt/android-sdk
export ANDROID_NDK_HOME=/opt/android-sdk/ndk/22.1.7171670
export CMAKE_PATH=/opt/android-sdk/cmake/3.18.1/   #可选,不配置的话直接使用/bin/cmake

然后运行jar:

java -jar nmm-protect-xxx.jar input.apk

执行完毕会在input.apk所在的目录下生成一个build目录,里面包含最后输出的apk(build/input-protect.apk),完整的c项目dex2c(基于cmake)及处理过程中生成的.dex等。
第一次运行后会在jar位置生成tools目录,里面有config.json可以编辑它配置安卓sdk,ndk相关路径。

生成的apk需要使用zipalign对齐及apksigner签名才能安装使用

zipalign 4 build/input-protect.apk build/input-protect-align.apk
apksigner sign --ks ~/.myapp.jks build/input-protect-align.apk
  • 下载及编译项目
git clone https://github.com/maoabc/nmmp.git
cd nmmp/nmm-protect
./gradlew arsc:build
./gradlew build

成功后会在build/libs生成可直接执行的fatjar。

  • 需要转换的类和方法规则

无转换规则文件,则会转换dex里所有class里的方法(除了构造方法和静态初始化方法)。规则只支持一些简单的情况:

//支持的规则比较简单,*只是被转成正则表达式的.*,支持一些简单的继承关系
class * extends android.app.Activity
class * implements java.io.Serializable
class my.package.AClass
class my.package.* { *; }
class * extends java.util.ArrayList {
  if*;
}


class A {
}
class B extends A {
}
class C extends B {
}
//比如'class * extends A' 只会匹配B而不会再匹配C

nmmvm

nmmvm是dex虚拟机具体实现,入口就一个函数:

jvalue vmInterpret(
        JNIEnv *env,
        const vmCode *code,
        const vmResolver *dvmResolver
);

typedef struct {
    const u2 *insns;             //指令
    const u4 insnsSize;          //指令大小
    regptr_t *regs;                    //寄存器
    u1 *reg_flags;               //寄存器数据类型标记,主要标记是否为对象
    const u1 *triesHandlers;     //异常表
} vmCode;


typedef struct {

    const vmField *(*dvmResolveField)(JNIEnv *env, u4 idx, bool isStatic);

    const vmMethod *(*dvmResolveMethod)(JNIEnv *env, u4 idx, bool isStatic);

    //从类型常量池取得类型名
    const char *(*dvmResolveTypeUtf)(JNIEnv *env, u4 idx);

    //直接返回jclass对象,本地引用需要释放引用
    jclass (*dvmResolveClass)(JNIEnv *env, u4 idx);

    //根据类型名得到class
    jclass (*dvmFindClass)(JNIEnv *env, const char *type);

    //const_string指令加载的字符串对象
    jstring (*dvmConstantString)(JNIEnv *env, u4 idx);

} vmResolver;

vmCode提供执行所需要的指令、异常表及寄存器空间,vmResolver包含一组函数指针,提供运行时的符号,比如field,method等。通过自定义这两个参数来实现不同的加固方式,比如项目里的test.cpp有一个简单的基于libdex实现的vmResolver,它主要用于开发测试。而nmm-protect实现的是把.dex相关数据转换为c结构体,还包含了opcode随机化等,基本可实际使用。

Licences

nmm-protect 以gpl协议发布,nmm-protect licence, dex-vm部分以Apache协议发布, nmmvm licence. 只有vm部分会打包进apk中, nmm-protect只是转换dex,协议不影响生成的结果.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].