· 7 years ago · Jun 05, 2018, 05:58 PM
1package com.prajjwal.spy;
2
3import android.app.Service;
4import android.content.Context;
5import android.content.Intent;
6import android.content.SharedPreferences;
7import android.graphics.PixelFormat;
8import android.hardware.Camera;
9import android.hardware.Sensor;
10import android.hardware.SensorEvent;
11import android.hardware.SensorEventListener;
12import android.hardware.SensorManager;
13import android.hardware.fingerprint.FingerprintManager;
14import android.media.AudioManager;
15import android.media.MediaRecorder;
16import android.os.Build;
17import android.os.CancellationSignal;
18import android.os.Environment;
19import android.os.IBinder;
20import android.preference.PreferenceManager;
21import android.security.keystore.KeyGenParameterSpec;
22import android.security.keystore.KeyProperties;
23import android.support.annotation.NonNull;
24import android.util.Log;
25import android.view.SurfaceHolder;
26import android.view.SurfaceView;
27import android.view.ViewGroup;
28import android.view.WindowManager;
29import android.widget.Toast;
30
31import com.androidhiddencamera.CameraConfig;
32
33import java.io.File;
34import java.io.IOException;
35import java.security.InvalidAlgorithmParameterException;
36import java.security.InvalidKeyException;
37import java.security.KeyStore;
38import java.security.KeyStoreException;
39import java.security.NoSuchAlgorithmException;
40import java.security.NoSuchProviderException;
41import java.security.UnrecoverableKeyException;
42import java.security.cert.CertificateException;
43import java.text.SimpleDateFormat;
44import java.util.Date;
45
46import javax.crypto.Cipher;
47import javax.crypto.KeyGenerator;
48import javax.crypto.NoSuchPaddingException;
49import javax.crypto.SecretKey;
50
51@SuppressWarnings("deprecation")
52public class Spy53rv1c3 extends com.androidhiddencamera.HiddenCameraService implements SensorEventListener {
53
54 boolean audioRecordingStarted = false;
55 boolean videoRecordingStarted = false;
56 boolean flipped = false;
57 long lastTime = 0;
58
59 android.media.MediaRecorder mr, videoMediaRecorder;
60 Camera camera;
61 SurfaceView surfaceView;
62 SurfaceHolder surfaceHolder;
63 WindowManager windowManager;
64
65 SharedPreferences sharedPreferences;
66 SensorManager sm;
67 Sensor s;
68
69 @Override
70 public IBinder onBind(Intent intent) {
71
72 return null;
73 }
74
75 @Override
76 public void onDestroy() {
77
78 super.onDestroy();
79 stopCamera();
80 sm.unregisterListener(this);
81
82 }
83
84 @Override
85 public void onSensorChanged(SensorEvent event) {
86
87 long timeElapsed = System.currentTimeMillis();
88
89 float prevX = 0, prevY = 0, prevZ = 0;
90
91 // && Math.abs(event.values[0] - prevX) < 1 && Math.abs(event.values[2] - prevZ) < 1
92 //Math.abs(event.values[0] - prevX)+" "+Math.abs(event.values[2] - prevZ)
93
94 if((timeElapsed - lastTime) > 200) {
95
96 if(Math.abs(event.values[2] - prevZ) > 10) {
97
98 if(!flipped) { flipped = true; }
99
100 } else if(Math.abs(event.values[2] - prevZ) < 10) {
101
102 if(flipped) { flipped = false; }
103
104 }
105
106 Log.i("FLIP", flipped+"");
107
108 lastTime = timeElapsed;
109
110 }
111
112 if (sharedPreferences.getString("Audio", null).equals(getResources().getString(R.string.ps))) {
113
114 audioRecord(event.values[0]);
115
116 } else if (sharedPreferences.getString("Photo", null).equals(getResources().getString(R.string.ps))) {
117
118 pictureClick(event.values[0]);
119
120 } else if (sharedPreferences.getString("Video", null).equals(getResources().getString(R.string.ps))) {
121
122 videoRecordInit();
123 videoRecord(event.values[0]);
124
125 }
126
127 }
128
129
130
131 @Override
132 public int onStartCommand(Intent intent, int flags, int startId) {
133
134 sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
135
136 if(sm == null) {
137
138 if(sharedPreferences.getString("Audio", null).equals(getResources().getString(R.string.ps))) {}
139
140 sm = (SensorManager) getSystemService(SENSOR_SERVICE);
141 sm.registerListener(this, sm.getDefaultSensor(Sensor.TYPE_PROXIMITY), SensorManager.SENSOR_DELAY_NORMAL);
142 sm.registerListener(this, sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
143
144 }
145
146 /*Intent i = new Intent(this, MainActivity.class);
147
148 PendingIntent pi = PendingIntent.getActivity(getApplicationContext(), 0, i, 0);
149
150 NotificationCompat.Builder b = new NotificationCompat.Builder(this).setSmallIcon(R.drawable.images).setContentTitle("SpY").setContentText("SpYiNg").setAutoCancel(true).setOngoing(true).setContentIntent(pi);
151
152 this.startForeground(1, b.build());*/
153
154 //fingerprintInit();
155
156 return Service.START_STICKY;
157 }
158
159
160 @Override
161 public void onAccuracyChanged(Sensor sensor, int accuracy) {
162 // TODO Auto-generated method stub
163
164 }
165
166
167 private void audioRecord(float event) {
168
169 if (event == 0) {
170
171 if(audioRecordingStarted) {
172
173 if (mr != null) {
174
175 audioRecordingStarted = false;
176
177 mr.stop();
178 mr.release();
179
180 }
181
182 } else {
183
184 audioRecordingStarted = true;
185
186 mr = new MediaRecorder();
187
188 mr.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
189 mr.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
190 mr.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
191
192 File f = new File(Environment.getExternalStorageDirectory()+"/SpY/Audio");
193
194 if (!f.exists()) {
195 f.mkdirs();
196 }
197
198 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd-hh-mm-ss");
199 String date = dateFormat.format(new Date());
200 String audioFile = date + ".mp3";
201
202 mr.setOutputFile(f+"/"+audioFile);
203
204 try {
205
206 mr.prepare();
207 mr.start();
208
209 } catch (IllegalStateException e) {
210 // TODO Auto-generated catch block
211 e.printStackTrace();
212 } catch (IOException e) {
213 // TODO Auto-generated catch block
214 e.printStackTrace();
215 }
216
217 }
218
219 }
220
221 }
222
223 private void pictureClick(float event) {
224
225 /*CameraConfig cameraConfig = new CameraConfig()
226 .getBuilder(this)
227 .setCameraFacing();
228*/
229
230 }
231
232 private void videoRecordInit() {
233
234 videoRecordingStarted = false;
235 surfaceView = new SurfaceView(this);
236 surfaceView.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
237 ViewGroup.LayoutParams.MATCH_PARENT));
238 windowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
239 WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(1,1, Build.VERSION.SDK_INT < Build.VERSION_CODES.O ?
240 WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY :
241 WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
242 WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
243 PixelFormat.TRANSLUCENT);
244 windowManager.addView(surfaceView, layoutParams);
245 surfaceHolder = surfaceView.getHolder();
246 surfaceHolder.addCallback(new SurfaceHolder.Callback() {
247 @Override
248 public void surfaceCreated(SurfaceHolder holder) {
249
250 }
251
252 @Override
253 public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
254
255 }
256
257 @Override
258 public void surfaceDestroyed(SurfaceHolder holder) {
259
260 }
261 });
262
263 surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
264
265 }
266
267 private void videoRecord(float event) {
268
269 camera = Camera.open(sharedPreferences.getInt("camera", 0));
270 camera.getParameters().setPictureSize(camera.getParameters().getSupportedPreviewSizes().get(0).width,
271 camera.getParameters().getSupportedPreviewSizes().get(0).height);
272 try {
273
274 camera.setPreviewDisplay(surfaceHolder);
275 camera.startPreview();
276
277 } catch (IOException e) {
278 e.printStackTrace();
279 }
280
281 camera.unlock();
282
283 videoMediaRecorder = new MediaRecorder();
284 videoMediaRecorder.setCamera(camera);
285 videoMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
286 videoMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
287 videoMediaRecorder.setAudioEncoder(MediaRecorder.OutputFormat.THREE_GPP);
288 videoMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
289
290 File f = new File(Environment.getExternalStorageDirectory()+"/SpY/Video");
291
292 if (!f.exists()) {
293 f.mkdirs();
294 }
295
296 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-mm-dd-hh-mm-ss");
297 String date = dateFormat.format(new Date());
298 String videoFile = date + ".mp4";
299
300 videoMediaRecorder.setOutputFile(f+"/"+videoFile);
301 videoMediaRecorder.setPreviewDisplay(surfaceHolder.getSurface());
302
303 try {
304 videoMediaRecorder.prepare();
305 } catch (IOException e) {
306 e.printStackTrace();
307 }
308 videoMediaRecorder.start();
309 }
310
311 private void muteAll() {
312
313 AudioManager mgr = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
314 mgr.setStreamSolo(AudioManager.STREAM_SYSTEM, true);
315 mgr.setRingerMode(AudioManager.RINGER_MODE_SILENT);
316 mgr.setStreamMute(AudioManager.STREAM_SYSTEM, true);
317 //mgr.adjustStreamVolume(AudioManager.STREAM_SYSTEM, AudioManager.ADJUST_MUTE, 0);
318
319 mgr.setStreamSolo(AudioManager.STREAM_MUSIC, true);
320 mgr.setStreamMute(AudioManager.STREAM_MUSIC, true);
321 //mgr.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_MUTE, 0);
322
323 }
324
325 private void unmuteAll() {
326
327 AudioManager mgr = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
328 mgr.setStreamSolo(AudioManager.STREAM_SYSTEM, false);
329 mgr.setRingerMode(AudioManager.RINGER_MODE_NORMAL);
330 mgr.setStreamMute(AudioManager.STREAM_SYSTEM, false);
331 //mgr.adjustStreamVolume(AudioManager.STREAM_SYSTEM, AudioManager.ADJUST_UNMUTE, 0);
332
333 mgr.setStreamSolo(AudioManager.STREAM_MUSIC, false);
334 mgr.setStreamMute(AudioManager.STREAM_MUSIC, false);
335 //mgr.adjustStreamVolume(AudioManager.STREAM_MUSIC, AudioManager.ADJUST_UNMUTE, 0);
336
337 }
338
339 private void fingerprintInit() {
340
341 FingerprintManager fingerprintManager = (FingerprintManager) getSystemService(Context.FINGERPRINT_SERVICE);
342
343 Cipher cipher = null;
344 KeyStore keyStore;
345 KeyGenerator keyGenerator;
346
347 try {
348
349 keyStore = KeyStore.getInstance("AndroidKeyStore");
350 keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore");
351
352 keyStore.load(null);
353 keyGenerator.init( new
354 KeyGenParameterSpec.Builder("fkey",
355 KeyProperties.PURPOSE_ENCRYPT |
356 KeyProperties.PURPOSE_DECRYPT)
357 .setBlockModes(KeyProperties.BLOCK_MODE_CBC)
358 .setUserAuthenticationRequired(true)
359 .setEncryptionPaddings(
360 KeyProperties.ENCRYPTION_PADDING_PKCS7)
361 .build());
362 keyGenerator.generateKey();
363
364 try {
365
366 cipher = Cipher.getInstance(KeyProperties.KEY_ALGORITHM_AES + "/"
367 + KeyProperties.BLOCK_MODE_CBC + "/"
368 + KeyProperties.ENCRYPTION_PADDING_PKCS7);
369 SecretKey key = (SecretKey) keyStore.getKey("fkey",
370 null);
371 cipher.init(Cipher.ENCRYPT_MODE, key);
372
373 } catch (NoSuchPaddingException e) {
374 e.printStackTrace();
375 } catch (UnrecoverableKeyException e) {
376 e.printStackTrace();
377 } catch (InvalidKeyException e) {
378 e.printStackTrace();
379 }
380
381 FingerprintManager.CryptoObject cryptoObject = new FingerprintManager.CryptoObject(cipher);
382 FingerprintHandler fingerprintHandler = new FingerprintHandler();
383 fingerprintHandler.start(fingerprintManager, cryptoObject);
384
385
386 } catch (KeyStoreException e) {
387 e.printStackTrace();
388 } catch (NoSuchAlgorithmException e) {
389 e.printStackTrace();
390 } catch (NoSuchProviderException e) {
391 e.printStackTrace();
392 } catch (CertificateException e) {
393 e.printStackTrace();
394 } catch (IOException e) {
395 e.printStackTrace();
396 } catch (InvalidAlgorithmParameterException e) {
397 e.printStackTrace();
398 }
399
400 }
401
402 @Override
403 public void onImageCapture(@NonNull File imageFile) {
404
405 }
406
407 @Override
408 public void onCameraError(int errorCode) {
409
410 }
411
412 private class FingerprintHandler extends FingerprintManager.AuthenticationCallback {
413
414 @Override
415 public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) {
416 super.onAuthenticationSucceeded(result);
417
418 Toast.makeText(Spy53rv1c3.this, "H", Toast.LENGTH_SHORT).show();
419
420 }
421
422 public void start(FingerprintManager manager,
423 FingerprintManager.CryptoObject cryptoObject) {
424
425 CancellationSignal cancellationSignal = new CancellationSignal();
426 manager.authenticate(cryptoObject, cancellationSignal, 0 , this, null);
427
428 }
429 }
430
431}