Skip to content

Commit af1c6c5

Browse files
committed
Update V3
1 parent fd07dbe commit af1c6c5

File tree

17 files changed

+281
-74
lines changed

17 files changed

+281
-74
lines changed

PermissionManager/app/src/main/cpp/root.cpp

Lines changed: 40 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,8 @@ Java_com_linux_permissionmanager_MainActivity_installSuTools(
144144
jobject /* this */,
145145
jlong rootKey,
146146
jstring basePath,
147-
jstring suToolsFilePath) {
147+
jstring suToolsFilePath,
148+
jstring suToolsFileFolderHeadFlags) {
148149

149150
const char *str1 = env->GetStringUTFChars(basePath, 0);
150151
string strBasePath= str1;
@@ -154,11 +155,15 @@ Java_com_linux_permissionmanager_MainActivity_installSuTools(
154155
string strSuFilePath= str1;
155156
env->ReleaseStringUTFChars(suToolsFilePath, str1);
156157

158+
str1 = env->GetStringUTFChars(suToolsFileFolderHeadFlags, 0);
159+
string strSuToolsFileFolderHeadFlags= str1;
160+
env->ReleaseStringUTFChars(suToolsFileFolderHeadFlags, str1);
161+
157162
stringstream sstr;
158163

159164
//安装su工具套件
160165
std::string su_hidden_path;
161-
int install_su_tools_ret = safe_install_su_tools(rootKey, strBasePath.c_str(), su_hidden_path);
166+
int install_su_tools_ret = safe_install_su_tools(rootKey, strBasePath.c_str(), su_hidden_path, strSuToolsFileFolderHeadFlags.c_str());
162167
sstr << "install_su_tools ret val:" << install_su_tools_ret<<", su_hidden_path:" << su_hidden_path << std::endl;
163168

164169
if (install_su_tools_ret == -504) {
@@ -169,7 +174,7 @@ Java_com_linux_permissionmanager_MainActivity_installSuTools(
169174
sstr << "safe_run_normal_cmd cp_ret val:" <<cp_ret;
170175
return env->NewStringUTF(sstr.str().c_str());
171176
}
172-
install_su_tools_ret = safe_install_su_tools(rootKey, strBasePath.c_str(), su_hidden_path);
177+
install_su_tools_ret = safe_install_su_tools(rootKey, strBasePath.c_str(), su_hidden_path, strSuToolsFileFolderHeadFlags.c_str());
173178
sstr << "install_su_tools ret val:" << install_su_tools_ret<<", su_hidden_path:" << su_hidden_path << std::endl;
174179
}
175180
if (install_su_tools_ret != 0) {
@@ -183,15 +188,20 @@ Java_com_linux_permissionmanager_MainActivity_uninstallSuTools(
183188
JNIEnv* env,
184189
jobject /* this */,
185190
jlong rootKey,
186-
jstring basePath) {
191+
jstring basePath,
192+
jstring suToolsFileFolderHeadFlags) {
187193

188194
const char *str1 = env->GetStringUTFChars(basePath, 0);
189195
string strBasePath= str1;
190196
env->ReleaseStringUTFChars(basePath, str1);
191197

198+
str1 = env->GetStringUTFChars(suToolsFileFolderHeadFlags, 0);
199+
string strSuToolsFileFolderHeadFlags= str1;
200+
env->ReleaseStringUTFChars(suToolsFileFolderHeadFlags, str1);
201+
192202
stringstream sstr;
193203

194-
int uninstall_su_tools_ret = safe_uninstall_su_tools(rootKey, strBasePath.c_str());
204+
int uninstall_su_tools_ret = safe_uninstall_su_tools(rootKey, strBasePath.c_str(), strSuToolsFileFolderHeadFlags.c_str());
195205
sstr << "uninstallSuTools ret val:" << uninstall_su_tools_ret << std::endl;
196206

197207
if (uninstall_su_tools_ret != 0) {
@@ -201,12 +211,28 @@ Java_com_linux_permissionmanager_MainActivity_uninstallSuTools(
201211
return env->NewStringUTF(sstr.str().c_str());
202212
}
203213
extern "C" JNIEXPORT jstring JNICALL
214+
Java_com_linux_permissionmanager_MainActivity_killAdbdProcess(
215+
JNIEnv* env,
216+
jobject /* this */,
217+
jlong rootKey) {
218+
219+
stringstream sstr;
220+
int kill_adbd = safe_kill_adbd_process(rootKey);
221+
sstr << "kill_adbd ret val:" << kill_adbd << std::endl;
222+
if (kill_adbd != 0) {
223+
return env->NewStringUTF(sstr.str().c_str());
224+
}
225+
sstr << "killAdbdProcess done.";
226+
return env->NewStringUTF(sstr.str().c_str());
227+
}
228+
extern "C" JNIEXPORT jstring JNICALL
204229
Java_com_linux_permissionmanager_MainActivity_autoSuEnvInject(
205230
JNIEnv* env,
206231
jobject /* this */,
207232
jlong rootKey,
208233
jstring targetProcessCmdline,
209-
jstring basePath) {
234+
jstring basePath,
235+
jstring suToolsFileFolderHeadFlags) {
210236

211237
const char *str1 = env->GetStringUTFChars(targetProcessCmdline, 0);
212238
string strTargetProcessCmdline= str1;
@@ -216,6 +242,12 @@ Java_com_linux_permissionmanager_MainActivity_autoSuEnvInject(
216242
string strBasePath= str1;
217243
env->ReleaseStringUTFChars(basePath, str1);
218244

245+
246+
str1 = env->GetStringUTFChars(suToolsFileFolderHeadFlags, 0);
247+
string strSuToolsFileFolderHeadFlags= str1;
248+
env->ReleaseStringUTFChars(suToolsFileFolderHeadFlags, str1);
249+
250+
219251
stringstream sstr;
220252

221253
//杀光所有历史进程
@@ -231,15 +263,15 @@ Java_com_linux_permissionmanager_MainActivity_autoSuEnvInject(
231263
kill_cmd += std::to_string(t);
232264
kill_cmd += ";";
233265
}
234-
int kill_ret = run_normal_cmd(rootKey, kill_cmd.c_str());
266+
int kill_ret = safe_run_normal_cmd(rootKey, kill_cmd.c_str());
235267
sstr << "kill_ret ret val:"<< kill_ret << std::endl;
236268
if (kill_ret != 0) {
237269
return env->NewStringUTF(sstr.str().c_str());
238270
}
239271

240272
//注入su环境变量到指定进程
241273
std::string su_hidden_path;
242-
int install_su_tools_ret = safe_install_su_tools(rootKey, strBasePath.c_str(), su_hidden_path);
274+
int install_su_tools_ret = safe_install_su_tools(rootKey, strBasePath.c_str(), su_hidden_path, strSuToolsFileFolderHeadFlags.c_str());
243275
sstr << "install_su_tools ret val:" << install_su_tools_ret<<", su_hidden_path:" << su_hidden_path << std::endl;
244276
if (install_su_tools_ret != 0) {
245277
return env->NewStringUTF(sstr.str().c_str());

PermissionManager/app/src/main/java/com/linux/permissionmanager/MainActivity.java

Lines changed: 49 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@
4444
public class MainActivity extends AppCompatActivity {
4545

4646
private long rootKey = 0x7F6766F8;
47-
4847
private String suBasePath = "/data/local/tmp";
4948

5049
//保存的本地配置信息
@@ -193,26 +192,51 @@ public void onClick(View v) {
193192
}
194193
});
195194

196-
Button su_env_inject_btn = findViewById(R.id.su_env_inject_btn);
197-
su_env_inject_btn.setOnClickListener(new View.OnClickListener() {
195+
Button su_env_inject_btn1 = findViewById(R.id.su_env_inject_btn1);
196+
su_env_inject_btn1.setOnClickListener(new View.OnClickListener() {
197+
@Override
198+
public void onClick(View v) {
199+
if (!guideOpenUsbDebugSwitch()) {
200+
return;
201+
}
202+
//1.获取su工具文件路径
203+
String suToolsFilePath = WirteSuToolsFilePath("simple_su", MainActivity.this);
204+
showConsoleMsg(suToolsFilePath);
205+
206+
//2.安装su工具
207+
String suFolderHeadFlag = "su_ver1";
208+
String insRet = installSuTools(rootKey, suBasePath, suToolsFilePath, suFolderHeadFlag);
209+
showConsoleMsg(insRet);
210+
if(insRet.indexOf("installSuTools done.") == -1) {
211+
return;
212+
}
213+
214+
//3.选择APP进程
215+
showSelectAppWindow(suFolderHeadFlag);
216+
217+
}
218+
});
219+
Button su_env_inject_btn2 = findViewById(R.id.su_env_inject_btn2);
220+
su_env_inject_btn2.setOnClickListener(new View.OnClickListener() {
198221
@Override
199222
public void onClick(View v) {
200223
if (!guideOpenUsbDebugSwitch()) {
201224
return;
202225
}
203226
//1.获取su工具文件路径
204-
String suToolsFilePath = WirteSuToolsFilePath(MainActivity.this);
227+
String suToolsFilePath = WirteSuToolsFilePath("su", MainActivity.this);
205228
showConsoleMsg(suToolsFilePath);
206229

207230
//2.安装su工具
208-
String insRet = installSuTools(rootKey, suBasePath, suToolsFilePath);
231+
String suFolderHeadFlag = "su_ver2";
232+
String insRet = installSuTools(rootKey, suBasePath, suToolsFilePath,suFolderHeadFlag);
209233
showConsoleMsg(insRet);
210234
if(insRet.indexOf("installSuTools done.") == -1) {
211235
return;
212236
}
213237

214238
//3.选择APP进程
215-
showSelectAppWindow();
239+
showSelectAppWindow(suFolderHeadFlag);
216240

217241
}
218242
});
@@ -221,7 +245,9 @@ public void onClick(View v) {
221245
clean_su_btn.setOnClickListener(new View.OnClickListener() {
222246
@Override
223247
public void onClick(View v) {
224-
showConsoleMsg(uninstallSuTools(rootKey,suBasePath));
248+
//让adbd自我重启
249+
showConsoleMsg(killAdbdProcess(rootKey));
250+
showConsoleMsg(uninstallSuTools(rootKey,suBasePath, "su"));
225251
}
226252
});
227253

@@ -279,7 +305,7 @@ public boolean guideOpenUsbDebugSwitch() {
279305
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this)
280306
.setTitle("提示")
281307
.setCancelable(false)
282-
.setMessage("请先到开发者选项页面里打开【USB调试】开关(提示:在手机关于页面里连续点击系统版本号可启用开发者选项页面)")
308+
.setMessage("请先到开发者选项页面里【打开USB调试】开关(提示:在手机关于页面里连续点击系统版本号可启用开发者选项页面)")
283309
.setOnDismissListener(new DialogInterface.OnDismissListener() {
284310
@Override
285311
public void onDismiss(DialogInterface dialog) {
@@ -311,7 +337,7 @@ public boolean guideCloseUsbDebugSwitch() {
311337
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this)
312338
.setTitle("提示")
313339
.setCancelable(false)
314-
.setMessage("请先到开发者选项页面里关闭【USB调试】开关")
340+
.setMessage("请先到开发者选项页面里【关闭USB调试】开关")
315341
.setOnDismissListener(new DialogInterface.OnDismissListener() {
316342
@Override
317343
public void onDismiss(DialogInterface dialog) {
@@ -352,7 +378,7 @@ public void handleMessage(@NonNull Message msg) {
352378

353379
new Thread() {
354380
public void run() {
355-
String ret = autoSuEnvInject(rootKey, appItem.getPackageName(), suBasePath);
381+
String ret = autoSuEnvInject(rootKey, appItem.getPackageName(), suBasePath, appItem.getSuFolderHeadFlag());
356382
runOnUiThread(new Runnable() {
357383
public void run() {
358384
showConsoleMsg(ret);
@@ -388,7 +414,7 @@ public void onClick(DialogInterface dialog, int which) {
388414
};
389415

390416
//显示选择应用程序窗口
391-
public void showSelectAppWindow() {
417+
public void showSelectAppWindow(String suFolderHeadFlag) {
392418
final PopupWindow popupWindow = new PopupWindow(this);
393419

394420
View view = View.inflate(this, R.layout.select_app_wnd, null);
@@ -456,7 +482,8 @@ public void onDismiss() { //窗口即将关闭
456482
appList.add(new SelectAppRecyclerItem(
457483
icon,
458484
showName,
459-
packageName));
485+
packageName,
486+
suFolderHeadFlag));
460487
}
461488
for (int i = 0; i < packages.size(); i++) {
462489
PackageInfo packageInfo = packages.get(i);
@@ -476,7 +503,8 @@ public void onDismiss() { //窗口即将关闭
476503
appList.add(new SelectAppRecyclerItem(
477504
icon,
478505
showName,
479-
packageName));
506+
packageName,
507+
suFolderHeadFlag));
480508
}
481509

482510
SelectAppRecyclerAdapter adapter = new SelectAppRecyclerAdapter(
@@ -491,18 +519,17 @@ public void onDismiss() { //窗口即将关闭
491519

492520
}
493521

494-
public static String WirteSuToolsFilePath(Context context) {
495-
String suFileName = "su";
522+
public static String WirteSuToolsFilePath(String suName, Context context) {
496523
String suFilePath = "";
497524
try {
498-
suFilePath = context.getFilesDir().getPath() + "/" + suFileName;
525+
suFilePath = context.getFilesDir().getPath() + "/" + suName;
499526
File file = new File(suFilePath);
500527
if (!file.exists()) {
501528
if (!file.getParentFile().exists()) file.getParentFile().mkdirs();
502529
file.createNewFile();
503530
}
504531
if (file.exists()) {
505-
InputStream inputStream = context.getAssets().open(suFileName);
532+
InputStream inputStream = context.getAssets().open(suName);
506533
FileOutputStream outputStream = new FileOutputStream(file);
507534
byte[] content = new byte[1024];
508535
while (inputStream.read(content) > 0) {
@@ -532,9 +559,11 @@ public static String WirteSuToolsFilePath(Context context) {
532559

533560
public native String adbRoot(long rootKey);
534561

535-
public native String installSuTools(long rootKey, String basePath, String suToolsFilePath);
562+
public native String installSuTools(long rootKey, String basePath, String suToolsFilePath, String suToolsFileFolderHeadFlags);
563+
564+
public native String uninstallSuTools(long rootKey, String basePath, String suToolsFileFolderHeadFlags);
536565

537-
public native String uninstallSuTools(long rootKey, String basePath);
566+
public native String killAdbdProcess(long rootKey);
538567

539-
public native String autoSuEnvInject(long rootKey, String targetProcessCmdline, String basePath);
568+
public native String autoSuEnvInject(long rootKey, String targetProcessCmdline, String basePath, String suToolsFileFolderHeadFlags);
540569
}

PermissionManager/app/src/main/java/com/linux/permissionmanager/Model/SelectAppRecyclerItem.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@ public class SelectAppRecyclerItem {
66
private Drawable icon=null;
77
private String showName;
88
private String packageName;
9+
private String suFolderHeadFlag;
910

10-
public SelectAppRecyclerItem(Drawable icon, String showName, String packageName){
11+
public SelectAppRecyclerItem(Drawable icon, String showName, String packageName, String suFolderHeadFlag){
1112
this.icon=icon;
1213
this.showName = showName;
1314
this.packageName = packageName;
15+
this.suFolderHeadFlag = suFolderHeadFlag;
1416
}
1517

1618
public Drawable getIcon() {
@@ -33,6 +35,14 @@ public String getPackageName() {
3335
return packageName;
3436
}
3537

38+
public void setSuFolderHeadFlag(String suFolderHeadFlag) {
39+
this.showName = showName;
40+
}
41+
42+
public String getSuFolderHeadFlag() {
43+
return suFolderHeadFlag;
44+
}
45+
3646
public void setPackageName(String packageName) {
3747
this.packageName = packageName;
3848
}

PermissionManager/app/src/main/res/layout/activity_main.xml

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,10 +110,18 @@
110110

111111
<Button
112112
android:layout_marginTop="5dp"
113-
android:id="@+id/su_env_inject_btn"
113+
android:id="@+id/su_env_inject_btn1"
114114
android:layout_width="wrap_content"
115115
android:layout_height="wrap_content"
116-
android:text="8.授权ROOT到其他APP"
116+
android:text="8.授权ROOT到其他APP-[1]"
117+
/>
118+
119+
<Button
120+
android:layout_marginTop="5dp"
121+
android:id="@+id/su_env_inject_btn2"
122+
android:layout_width="wrap_content"
123+
android:layout_height="wrap_content"
124+
android:text="8.授权ROOT到其他APP-[2]"
117125
/>
118126

119127
<Button

su/jni/Android.mk

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,5 @@ LOCAL_DISABLE_FATAL_LINKER_WARNINGS := true
99
LOCAL_MODULE := su
1010
LOCAL_SRC_FILES := ../su.cpp ../base64.cpp ../../testRoot/adb64_helper.cpp ../../testRoot/process64_inject.cpp ../../testRoot/ptrace_arm64_utils.cpp
1111
include $(BUILD_EXECUTABLE)
12+
13+
include $(LOCAL_PATH)/simple_su/Android.mk

su/jni/simple_su/Android.mk

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
LOCAL_PATH := $(call my-dir)
2+
3+
include $(CLEAR_VARS)
4+
LOCAL_CPPFLAGS += -std=c++17
5+
LOCAL_CFLAGS += -fPIE
6+
LOCAL_CFLAGS += -fvisibility=hidden
7+
LOCAL_LDFLAGS += -fPIE -pie
8+
LOCAL_DISABLE_FATAL_LINKER_WARNINGS := true
9+
LOCAL_MODULE := simple_su
10+
LOCAL_SRC_FILES := ../../simple_su.cpp ../../base64.cpp ../../../testRoot/adb64_helper.cpp ../../../testRoot/process64_inject.cpp ../../../testRoot/ptrace_arm64_utils.cpp
11+
include $(BUILD_EXECUTABLE)

su/root_key_helper.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,11 @@ static inline unsigned int get_tmp_root_key(const char* myself_path) {
88

99
//1.取路径尾巴
1010
unsigned int key = 0;
11-
const char* head_flag = "/su_";
12-
size_t len = strlen(head_flag);
13-
char *pstart = strstr((char*)myself_path, head_flag);
11+
char *pstart = strrchr((char*)myself_path, '_');
1412
if (!pstart) {
1513
return 0;
1614
}
17-
pstart += len;
15+
pstart ++;
1816

1917
size_t copy_len;
2018
char *pend = strstr(pstart, "/");

0 commit comments

Comments
 (0)