Skip to content
/ nmmp Public

dex-vm used to protect the android classes.dex file

Notifications You must be signed in to change notification settings

maoabc/nmmp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Repository files navigation

nmmp

Căn cứ vào dex-vm vận hành dalvik byte mã do đó đối dex tiến hành bảo hộ, gia tăng phản biên dịch khó khăn. Hạng mục chia làm hai bộ phận nmm-protect là thuần java hạng mục, đối dex tiến hành thay đổi, đem dex số liệu chuyển vì c kết cấu thể, opcode tùy cơ hoá sinh thành ndk hạng mục, biên dịch hậu sinh thành gia cố sau apk. nmmvm là một cái an trác hạng mục, bao hàm dex-vm thực hiện cập các loại dalvik mệnh lệnh thí nghiệm chờ.

nmm-protect

  • Phối trí ndk cập hoàn cảnh lượng biến đổi

Không biên dịch nmm-protect, có thể trực tiếp xem sử dụng nó sinh thành hạng mục cập cuối cùng apk,Một cái đối apk xử lý ví dụ.

Ví dụ ở linux hoàn cảnh hạ thí nghiệm, windows cũng nên không thành vấn đề, trước trang bị hảo JDK cập android sdk cùng ndk.

Downloadvm-protect.jar,Phối trí hảo hoàn cảnh lượng biến đổi ANDROID_SDK_HOME, ANDROID_NDK_HOME:

exportANDROID_SDK_HOME=/opt/android-sdk
exportANDROID_NDK_HOME=/opt/android-sdk/ndk/22.1.7171670
exportCMAKE_PATH=/opt/android-sdk/cmake/3.18.1/#Nhưng tuyển, không xứng trí nói trực tiếp sử dụng /bin/cmake
  • apk gia cố
java -jar vm-protect-xxx.jar apk input.apk convertRules.txt mapping.txt

Chấp hành xong sẽ ở input.apk nơi mục lục ra đời thành một cái build mục lục, bên trong bao hàm cuối cùng phát ra apk(build/input-protect.apk), hoàn chỉnh c hạng mục dex2c( căn cứ vào cmake) cập xử lý trong quá trình sinh thành.dex chờ.
Lần đầu tiên vận hành sau sẽ ở jar vị trí sinh thành tools mục lục, bên trong có config.json có thể biên tập nó phối trí an trác sdk, ndk tương quan đường nhỏ.

Có bằng hữu viết cái GUI giao diện, có thể càng phương tiện sử dụng, yêu cầu có thể đi thử xem,https://github /TimScriptov/nmmp

Sinh thành apk yêu cầu sử dụng zipalign đối tề ( tân phiên bản đã sử dụng zipflinger xử lý apk, có thể không cần sử dụng đơn độc zipalign ) cập apksigner ký tên mới có thể trang bị sử dụng

apksigner sign --ks~/.myapp.jks build/input-protect-align.apk
  • aab gia cố
java -jar vm-protect-xxx.jar aab test.aab convertRules.txt

Lúc sau yêu cầu sử dụng jarsigner ký tên, cũng có thể tổng thể signflinger tiến hành ký tên

jarsigner -keystore~/.myapp.jks -storepass pass -keypass pass test-protect.aab keyAlias
  • aar gia cố
java -jar vm-protect-xxx.jar aar testModule.aar convertRules.txt
  • Download cập biên dịch hạng mục
git clone https://github /maoabc/nmmp.git
cdnmmp/nmm-protect
./gradlew arsc:build
./gradlew build

Thành công sau sẽ ở build/libs sinh thành nhưng trực tiếp chấp hành fatjar.

  • Yêu cầu thay đổi loại cùng phương pháp quy tắc

Vô thay đổi quy tắc văn kiện, tắc sẽ thay đổi dex sở hữu class phương pháp ( trừ bỏ cấu tạo phương pháp cùng trạng thái tĩnh khởi động lại phương pháp ). Quy tắc chỉ duy trì một ít đơn giản tình huống:

// duy trì quy tắc tương đối đơn giản, * chỉ là bị chuyển thành chính tắc biểu đạt thức.*, duy trì một ít đơn giản kế thừa quan hệ
class*extendsandroid.app.Activity
class*implementsjava.io.Serializable
classmy.package.AClass
classmy.package.* { *; }
class*extendsjava.util.ArrayList{
if*;
}


classA{
}
classBextendsA{
}
classCextendsB{
}
// tỷ như 'class * extends A' chỉ biết xứng đôi B mà sẽ không lại xứng đôi C

nmmvm

nmmvm là dex giả thuyết cơ giới và công cụ thể thực hiện, nhập khẩu liền một cái hàm số:

jvaluevmInterpret(
JNIEnv*env,
constvmCode*code,
constvmResolver*dvmResolver
);

typedefstruct{
constu2*insns;// mệnh lệnh
constu4insnsSize;// mệnh lệnh lớn nhỏ
regptr_t*regs;// gởi lại khí
u1*reg_flags;// gởi lại khí số liệu loại hình đánh dấu, chủ yếu đánh dấu hay không vì đối tượng
constu1*triesHandlers;// dị thường biểu
}vmCode;


typedefstruct{

constvmField*(*dvmResolveField)(JNIEnv*env,u4idx,boolisStatic);

constvmMethod*(*dvmResolveMethod)(JNIEnv*env,u4idx,boolisStatic);

// từ loại hình đại lượng không đổi trì lấy được loại hình danh
constchar*(*dvmResolveTypeUtf)(JNIEnv*env,u4idx);

// trực tiếp phản hồi jclass đối tượng, bản địa trích dẫn yêu cầu phóng thích trích dẫn
jclass(*dvmResolveClass)(JNIEnv*env,u4idx);

// căn cứ loại hình danh được đến class
jclass(*dvmFindClass)(JNIEnv*env,constchar*type);

//const_string mệnh lệnh thêm tái tự phù xuyến đối tượng
jstring(*dvmConstantString)(JNIEnv*env,u4idx);

}vmResolver;

vmCode cung cấp chấp hành sở yêu cầu mệnh lệnh, dị thường biểu cập gởi lại khí không gian, vmResolver bao hàm một tổ hàm số kim đồng hồ, cung cấp vận hành khi ký hiệu, tỷ như field, method chờ. Thông qua tự định nghĩa này hai cái tham số tới thực hiện bất đồng gia cố phương thức, tỷ như hạng mục test.cpp có một cái đơn giản căn cứ vào libdex thực hiện vmResolver, nó chủ yếu dùng cho khai phá thí nghiệm. Mà nmm-protect thực hiện chính là đem.dex tương quan số liệu thay đổi vì c kết cấu thể, còn bao hàm opcode tùy cơ hóa chờ, cơ bản nhưng thực tế sử dụng.

aar mô khối gia cố

Trước mắt đã thực hiện mô khối tương quan gia cố, cách dùng cùng apk gia cố cùng loại, nếu có vấn đề có thể đề issue.

Licences

nmm-protect lấy gpl hiệp nghị tuyên bố,nmm-protect licence,dex-vm bộ phận lấy Apache hiệp nghị tuyên bố,nmmvm licence.Chỉ có vm bộ phận sẽ đóng gói tiến apk trung, nmm-protect chỉ là thay đổi dex, hiệp nghị không ảnh hưởng sinh thành kết quả.