Skip to content

Commit 58ccc1a

Browse files
committed
Merge remote-tracking branch 'origin/master'
2 parents db44c04 + c14822b commit 58ccc1a

File tree

10 files changed

+162
-90
lines changed

10 files changed

+162
-90
lines changed

app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ android {
2828
targetCompatibility JavaVersion.VERSION_17
2929
}
3030
kotlinOptions {
31-
jvmTarget = '17'
31+
jvmTarget = '11'
3232
}
3333
buildFeatures {
3434
viewBinding true

app/src/main/java/com/webileapps/protect/sample/MainActivity.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class MainActivity : AppActivity() {
3636
SecurityChecker.SecurityCheckState.WARNING, // ongoingCallCheck
3737
SecurityChecker.SecurityCheckState.WARNING, // appSignatureCheck
3838
"com.webileapps.protect.sample", // expectedPackageName
39-
"" // expectedSignature
39+
"2A36434023EECADABE4F43B09C4BF95AB2594256BD0A2577424B85BC2C6E0CBB" // expectedSignature
4040
)
4141
)
4242

gradle/wrapper/gradle-wrapper.jar

17.7 KB
Binary file not shown.
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip
44
networkTimeout=10000
5-
validateDistributionUrl=true
65
zipStoreBase=GRADLE_USER_HOME
76
zipStorePath=wrapper/dists

gradlew

Lines changed: 13 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@
1515
# See the License for the specific language governing permissions and
1616
# limitations under the License.
1717
#
18-
# SPDX-License-Identifier: Apache-2.0
19-
#
2018

2119
##############################################################################
2220
#
@@ -57,7 +55,7 @@
5755
# Darwin, MinGW, and NonStop.
5856
#
5957
# (3) This script is generated from the Groovy template
60-
# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
58+
# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
6159
# within the Gradle project.
6260
#
6361
# You can find Gradle at https://github.com/gradle/gradle/.
@@ -85,9 +83,10 @@ done
8583
# This is normally unused
8684
# shellcheck disable=SC2034
8785
APP_BASE_NAME=${0##*/}
88-
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
89-
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
90-
' "$PWD" ) || exit
86+
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
87+
88+
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
89+
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
9190

9291
# Use the maximum available, or set MAX_FD != -1 to use that value.
9392
MAX_FD=maximum
@@ -134,29 +133,26 @@ location of your Java installation."
134133
fi
135134
else
136135
JAVACMD=java
137-
if ! command -v java >/dev/null 2>&1
138-
then
139-
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
136+
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
140137
141138
Please set the JAVA_HOME variable in your environment to match the
142139
location of your Java installation."
143-
fi
144140
fi
145141

146142
# Increase the maximum file descriptors if we can.
147143
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
148144
case $MAX_FD in #(
149145
max*)
150146
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
151-
# shellcheck disable=SC2039,SC3045
147+
# shellcheck disable=SC3045
152148
MAX_FD=$( ulimit -H -n ) ||
153149
warn "Could not query maximum file descriptor limit"
154150
esac
155151
case $MAX_FD in #(
156152
'' | soft) :;; #(
157153
*)
158154
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
159-
# shellcheck disable=SC2039,SC3045
155+
# shellcheck disable=SC3045
160156
ulimit -n "$MAX_FD" ||
161157
warn "Could not set maximum file descriptor limit to $MAX_FD"
162158
esac
@@ -201,15 +197,11 @@ if "$cygwin" || "$msys" ; then
201197
done
202198
fi
203199

204-
205-
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
206-
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
207-
208-
# Collect all arguments for the java command:
209-
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
210-
# and any embedded shellness will be escaped.
211-
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
212-
# treated as '${Hostname}' itself on the command line.
200+
# Collect all arguments for the java command;
201+
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
202+
# shell script including quotes and variable substitutions, so put them in
203+
# double quotes to make sure that they get re-expanded; and
204+
# * put everything else in single quotes, so that it's not re-expanded.
213205

214206
set -- \
215207
"-Dorg.gradle.appname=$APP_BASE_NAME" \

gradlew.bat

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@
1313
@rem See the License for the specific language governing permissions and
1414
@rem limitations under the License.
1515
@rem
16-
@rem SPDX-License-Identifier: Apache-2.0
17-
@rem
1816

1917
@if "%DEBUG%"=="" @echo off
2018
@rem ##########################################################################
@@ -45,11 +43,11 @@ set JAVA_EXE=java.exe
4543
%JAVA_EXE% -version >NUL 2>&1
4644
if %ERRORLEVEL% equ 0 goto execute
4745

48-
echo. 1>&2
49-
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
50-
echo. 1>&2
51-
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
52-
echo location of your Java installation. 1>&2
46+
echo.
47+
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
48+
echo.
49+
echo Please set the JAVA_HOME variable in your environment to match the
50+
echo location of your Java installation.
5351

5452
goto fail
5553

@@ -59,11 +57,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe
5957

6058
if exist "%JAVA_EXE%" goto execute
6159

62-
echo. 1>&2
63-
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
64-
echo. 1>&2
65-
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
66-
echo location of your Java installation. 1>&2
60+
echo.
61+
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
62+
echo.
63+
echo Please set the JAVA_HOME variable in your environment to match the
64+
echo location of your Java installation.
6765

6866
goto fail
6967

protect/src/main/java/com/webileapps/safeguard/FridaDetection.java

Lines changed: 59 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import java.io.BufferedReader;
66
import java.io.File;
7+
import java.io.FileInputStream;
78
import java.io.InputStreamReader;
89
import java.util.Arrays;
910
import java.util.List;
@@ -19,11 +20,23 @@ public boolean detectFridaServer() {
1920

2021
for (File file : files) {
2122
if (file.getName().matches("\\d+")) { // Check only PID directories
22-
String cmdline = new String(java.nio.file.Files.readAllBytes(new File("/proc/" + file.getName() + "/cmdline").toPath()));
23-
for (String suspiciousProcess : suspiciousProcesses) {
24-
if (cmdline.contains(suspiciousProcess)) {
25-
Log.e("Security", "Frida detected: " + cmdline);
26-
return true;
23+
FileInputStream fis = null;
24+
try {
25+
fis = new FileInputStream(new File("/proc/" + file.getName() + "/cmdline"));
26+
byte[] data = new byte[fis.available()];
27+
fis.read(data);
28+
String cmdline = new String(data);
29+
for (String suspiciousProcess : suspiciousProcesses) {
30+
if (cmdline.contains(suspiciousProcess)) {
31+
Log.e("Security", "Frida detected: " + cmdline);
32+
return true;
33+
}
34+
}
35+
} catch (Exception e) {
36+
e.printStackTrace();
37+
} finally {
38+
if (fis != null) {
39+
fis.close();
2740
}
2841
}
2942
}
@@ -48,12 +61,25 @@ public boolean detectFridaPort() {
4861

4962
public boolean detectFridaLibrary() {
5063
try {
51-
String maps = new String(java.nio.file.Files.readAllBytes(new File("/proc/self/maps").toPath()));
52-
if (maps.contains("frida") || maps.contains("gum-js")) {
53-
Log.e("Security", "Frida detected in memory!");
54-
return true;
64+
FileInputStream fis = null;
65+
try {
66+
fis = new FileInputStream(new File("/proc/self/maps"));
67+
byte[] data = new byte[fis.available()];
68+
fis.read(data);
69+
String maps = new String(data);
70+
if (maps.contains("frida") || maps.contains("gum-js")) {
71+
Log.e("Security", "Frida detected in memory!");
72+
return true;
73+
}
74+
return false;
75+
} catch (Exception e) {
76+
e.printStackTrace();
77+
return false;
78+
} finally {
79+
if (fis != null) {
80+
fis.close();
81+
}
5582
}
56-
return false;
5783
} catch (Exception e) {
5884
e.printStackTrace();
5985
return false;
@@ -62,14 +88,28 @@ public boolean detectFridaLibrary() {
6288

6389
public boolean detectFridaTracer() {
6490
try {
65-
List<String> statusLines = java.nio.file.Files.readAllLines(new File("/proc/self/status").toPath());
66-
for (String line : statusLines) {
67-
if (line.startsWith("TracerPid")) {
68-
int tracerPid = Integer.parseInt(line.split("\t")[1].trim());
69-
return tracerPid > 0;
91+
FileInputStream fis = null;
92+
try {
93+
fis = new FileInputStream(new File("/proc/self/status"));
94+
byte[] data = new byte[fis.available()];
95+
fis.read(data);
96+
String status = new String(data);
97+
String[] statusLines = status.split("\n");
98+
for (String line : statusLines) {
99+
if (line.startsWith("TracerPid")) {
100+
int tracerPid = Integer.parseInt(line.split("\t")[1].trim());
101+
return tracerPid > 0;
102+
}
103+
}
104+
return false;
105+
} catch (Exception e) {
106+
e.printStackTrace();
107+
return false;
108+
} finally {
109+
if (fis != null) {
110+
fis.close();
70111
}
71112
}
72-
return false;
73113
} catch (Exception e) {
74114
e.printStackTrace();
75115
return false;
@@ -83,7 +123,9 @@ public boolean detectFridaDebugging() {
83123
boolean fridaTracer = detectFridaTracer();
84124

85125
boolean detected = fridaServer || fridaPort || fridaLibrary || fridaTracer;
86-
Log.e("Security>>>", "Frida detection result: Server=" + fridaServer + ", Port=" + fridaPort + ", Library=" + fridaLibrary + ", Tracer=" + fridaTracer);
126+
if (detected) {
127+
Log.e("Security>>>", "Frida detection result: Server=" + fridaServer + ", Port=" + fridaPort + ", Library=" + fridaLibrary + ", Tracer=" + fridaTracer);
128+
}
87129

88130
return detected;
89131
}

protect/src/main/java/com/webileapps/safeguard/SecurityConfigManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ public class SecurityConfigManager {
99
public static void initialize(Context context, SecurityChecker.SecurityConfig configuration) {
1010
config = configuration;
1111
securityChecker = new SecurityChecker(context, configuration);
12-
new SecurityChecker(context).startFridaDetection();
12+
securityChecker.startFridaDetection();
1313
}
1414

1515
public static SecurityChecker getSecurityChecker() {

0 commit comments

Comments
 (0)