CrackMe.apk
Download file
package com.facebook.react.devsupport;
import android.os.Handler;
import android.os.Looper;
import com.facebook.infer.annotation.Assertions;
import com.facebook.react.bridge.JavaJSExecutor;
import com.facebook.react.devsupport.JSDebuggerWebSocketClient;
import java.util.HashMap;
import java.util.concurrent.Semaphore;
import java.util.concurrent.atomic.AtomicInteger;
public class WebsocketJavaScriptExecutor implements JavaJSExecutor {
private static final int CONNECT_RETRY_COUNT = 3;
private static final long CONNECT_TIMEOUT_MS = 5000;
private final HashMap<String, String> mInjectedObjects = new HashMap<>();
/* access modifiers changed from: private */
public JSDebuggerWebSocketClient mWebSocketClient;
public interface JSExecutorConnectCallback {
void onFailure(Throwable th);
void onSuccess();
}
public static class WebsocketExecutorTimeoutException extends Exception {
public WebsocketExecutorTimeoutException(String str) {
super(str);
}
}
private static class JSExecutorCallbackFuture implements JSDebuggerWebSocketClient.JSDebuggerCallback {
private Throwable mCause;
private String mResponse;
private final Semaphore mSemaphore;
private JSExecutorCallbackFuture() {
this.mSemaphore = new Semaphore(0);
}
public void onSuccess(String str) {
this.mResponse = str;
this.mSemaphore.release();
}
public void onFailure(Throwable th) {
this.mCause = th;
this.mSemaphore.release();
}
public String get() throws Throwable {
this.mSemaphore.acquire();
Throwable th = this.mCause;
if (th == null) {
return this.mResponse;
}
throw th;
}
}
public void connect(final String str, final JSExecutorConnectCallback jSExecutorConnectCallback) {
final AtomicInteger atomicInteger = new AtomicInteger(3);
connectInternal(str, new JSExecutorConnectCallback() {
public void onSuccess() {
jSExecutorConnectCallback.onSuccess();
}
public void onFailure(Throwable th) {
if (atomicInteger.decrementAndGet() <= 0) {
jSExecutorConnectCallback.onFailure(th);
} else {
WebsocketJavaScriptExecutor.this.connectInternal(str, this);
}
}
});
}
/* access modifiers changed from: private */
public void connectInternal(String str, final JSExecutorConnectCallback jSExecutorConnectCallback) {
final JSDebuggerWebSocketClient jSDebuggerWebSocketClient = new JSDebuggerWebSocketClient();
final Handler handler = new Handler(Looper.getMainLooper());
jSDebuggerWebSocketClient.connect(str, new JSDebuggerWebSocketClient.JSDebuggerCallback() {
/* access modifiers changed from: private */
public boolean didSendResult = false;
public void onSuccess(String str) {
jSDebuggerWebSocketClient.prepareJSRuntime(new JSDebuggerWebSocketClient.JSDebuggerCallback() {
public void onSuccess(String str) {
handler.removeCallbacksAndMessages((Object) null);
JSDebuggerWebSocketClient unused = WebsocketJavaScriptExecutor.this.mWebSocketClient = jSDebuggerWebSocketClient;
if (!AnonymousClass2.this.didSendResult) {
jSExecutorConnectCallback.onSuccess();
boolean unused2 = AnonymousClass2.this.didSendResult = true;
}
}
public void onFailure(Throwable th) {
handler.removeCallbacksAndMessages((Object) null);
if (!AnonymousClass2.this.didSendResult) {
jSExecutorConnectCallback.onFailure(th);
boolean unused = AnonymousClass2.this.didSendResult = true;
}
}
});
}
public void onFailure(Throwable th) {
handler.removeCallbacksAndMessages((Object) null);
if (!this.didSendResult) {
jSExecutorConnectCallback.onFailure(th);
this.didSendResult = true;
}
}
});
handler.postDelayed(new Runnable() {
public void run() {
jSDebuggerWebSocketClient.closeQuietly();
jSExecutorConnectCallback.onFailure(new WebsocketExecutorTimeoutException("Timeout while connecting to remote debugger"));
}
}, 5000);
}
public void close() {
JSDebuggerWebSocketClient jSDebuggerWebSocketClient = this.mWebSocketClient;
if (jSDebuggerWebSocketClient != null) {
jSDebuggerWebSocketClient.closeQuietly();
}
}
public void loadBundle(String str) throws JavaJSExecutor.ProxyExecutorException {
JSExecutorCallbackFuture jSExecutorCallbackFuture = new JSExecutorCallbackFuture();
((JSDebuggerWebSocketClient) Assertions.assertNotNull(this.mWebSocketClient)).loadBundle(str, this.mInjectedObjects, jSExecutorCallbackFuture);
try {
jSExecutorCallbackFuture.get();
} catch (Throwable th) {
throw new JavaJSExecutor.ProxyExecutorException(th);
}
}
public String executeJSCall(String str, String str2) throws JavaJSExecutor.ProxyExecutorException {
JSExecutorCallbackFuture jSExecutorCallbackFuture = new JSExecutorCallbackFuture();
((JSDebuggerWebSocketClient) Assertions.assertNotNull(this.mWebSocketClient)).executeJSCall(str, str2, jSExecutorCallbackFuture);
try {
return jSExecutorCallbackFuture.get();
} catch (Throwable th) {
throw new JavaJSExecutor.ProxyExecutorException(th);
}
}
public void setGlobalVariable(String str, String str2) {
this.mInjectedObjects.put(str, str2);
}
}
Download file