From 01c041582455df1f3f69c57d52cc735f4c72bc43 Mon Sep 17 00:00:00 2001 From: ga Date: Sat, 3 Oct 2015 19:41:52 +0200 Subject: [PATCH 01/49] Avoid duplicated open ports. When performing several Service inspector on the same target, due to a race condition it was adding the same results multiple times. --- .../src/org/csploit/android/net/Target.java | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/cSploit/src/org/csploit/android/net/Target.java b/cSploit/src/org/csploit/android/net/Target.java index 8c6c54dbbc..6fef98df50 100644 --- a/cSploit/src/org/csploit/android/net/Target.java +++ b/cSploit/src/org/csploit/android/net/Target.java @@ -634,19 +634,22 @@ public String getHostname(){ public void addOpenPort(Port port){ synchronized (mPorts) { - if (port.service != null) { // update service but preserve different versions - for (Port p : mPorts) { - if (p.number == port.number && (p.service == null || p.service.isEmpty())) { + // we cannot just check if mPorts already has the new port (contains(port)), because if the new port has new fields, + // it won't be the same and we'll add duplicated ports. + for (Port p : mPorts){ + // port considered added: same port + same protocol -> 22:tcp, 53:udp + if (p.number == port.number && p.protocol == port.protocol){ + if ((port.service != null && !port.service.isEmpty()) && (p.service == null || p.service.isEmpty())) { p.service = port.service; + } + if ((port.version != null && !port.version.isEmpty()) && (p.version == null || p.version.isEmpty())) { p.version = port.version; - return; } + return; } - mPorts.add(port); - } else { - if (!mPorts.contains(port)) - mPorts.add(port); } + + mPorts.add(port); } } From de07e3f928234312d886956af61742136f16267f Mon Sep 17 00:00:00 2001 From: ga Date: Sat, 3 Oct 2015 22:02:56 +0200 Subject: [PATCH 02/49] Allow to select a target from the Simple Sniff module. When using the Simple sniff module to see which hosts are sending traffic, allow to select them as target by clicking on on them. --- .../src/org/csploit/android/core/System.java | 7 ++- .../csploit/android/plugins/mitm/Sniffer.java | 61 ++++++++++++++++--- 2 files changed, 55 insertions(+), 13 deletions(-) diff --git a/cSploit/src/org/csploit/android/core/System.java b/cSploit/src/org/csploit/android/core/System.java index e6673041eb..8cf9144bfe 100644 --- a/cSploit/src/org/csploit/android/core/System.java +++ b/cSploit/src/org/csploit/android/core/System.java @@ -21,9 +21,7 @@ import android.app.Activity; import android.app.ActivityManager; import android.app.ActivityManager.RunningServiceInfo; -import android.app.AlertDialog; import android.content.Context; -import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.PackageInfo; @@ -32,7 +30,6 @@ import android.net.wifi.WifiManager; import android.net.wifi.WifiManager.WifiLock; import android.os.Build; -import android.os.Bundle; import android.os.Environment; import android.os.PowerManager; import android.os.PowerManager.WakeLock; @@ -1032,6 +1029,10 @@ public static Target getTarget(int index){ return mTargets.get(index); } + public static int getTargetPosition (Target t) { + return mTargets.indexOf(t); + } + public static boolean hasTarget(Target target){ return mTargets.contains(target); } diff --git a/cSploit/src/org/csploit/android/plugins/mitm/Sniffer.java b/cSploit/src/org/csploit/android/plugins/mitm/Sniffer.java index 021e1f3361..3e785a972e 100644 --- a/cSploit/src/org/csploit/android/plugins/mitm/Sniffer.java +++ b/cSploit/src/org/csploit/android/plugins/mitm/Sniffer.java @@ -19,6 +19,7 @@ package org.csploit.android.plugins.mitm; import android.content.Context; +import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; @@ -26,7 +27,6 @@ import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; -import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; @@ -38,12 +38,12 @@ import android.widget.Toast; import android.widget.ToggleButton; +import org.csploit.android.ActionActivity; import org.csploit.android.R; import org.csploit.android.core.Child; import org.csploit.android.core.ChildManager; import org.csploit.android.core.System; import org.csploit.android.gui.dialogs.ConfirmDialog; -import org.csploit.android.gui.dialogs.ConfirmDialog.ConfirmDialogListener; import org.csploit.android.gui.dialogs.ErrorDialog; import org.csploit.android.net.Target; import org.csploit.android.plugins.mitm.SpoofSession.OnSessionReadyListener; @@ -307,7 +307,43 @@ public void onNothingSelected(AdapterView arg0){ mListView.setAdapter(mAdapter); - mSniffToggleButton.setOnClickListener(new OnClickListener(){ + mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + final Target t = System.getTargetByAddress(mAdapter.getByPosition(position).mAddress); + + new ConfirmDialog("Select target", "Select " + t.getAddress().getHostAddress() + "?", Sniffer.this, new ConfirmDialog.ConfirmDialogListener() { + @Override + public void onConfirm() { + new Thread(new Runnable() { + @Override + public void run() { + setStoppedState(); + + startActivity(new Intent(Sniffer.this, + ActionActivity.class)); + + overridePendingTransition(R.anim.slide_in_left, + R.anim.slide_out_left); + } + }).start(); + + System.setCurrentTarget(System.getTargetPosition(t)); + Toast.makeText(Sniffer.this, + getString(R.string.selected_) + System.getCurrentTarget(), + Toast.LENGTH_SHORT).show(); + } + + @Override + public void onCancel() { + } + }).show(); + + + } + }); + + mSniffToggleButton.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v){ if(mRunning){ @@ -319,7 +355,7 @@ public void onClick(View v){ } ); - new ConfirmDialog( getString(R.string.file_output), getString(R.string.question_save_to_pcap), this, new ConfirmDialogListener(){ + new ConfirmDialog( getString(R.string.file_output), getString(R.string.question_save_to_pcap), this, new ConfirmDialog.ConfirmDialogListener(){ @Override public void onConfirm(){ mDumpToFile = true; @@ -357,15 +393,20 @@ private void setStoppedState(){ mTcpdumpProcess.kill(); mTcpdumpProcess = null; } - mSpoofSession.stop(); + Sniffer.this.runOnUiThread(new Runnable() { + @Override + public void run() { + mSpoofSession.stop(); - mSniffProgress.setVisibility(View.INVISIBLE); + mSniffProgress.setVisibility(View.INVISIBLE); - mRunning = false; - mSniffToggleButton.setChecked(false); - } + mRunning = false; + mSniffToggleButton.setChecked(false); + } + }); + } - private void setSpoofErrorState(final String error){ + private void setSpoofErrorState(final String error){ Sniffer.this.runOnUiThread(new Runnable(){ @Override public void run(){ From 3ba8717fcc77063d74d94ec206851474d9bdfb20 Mon Sep 17 00:00:00 2001 From: x-Ai Date: Mon, 5 Oct 2015 02:14:34 +0800 Subject: [PATCH 03/49] Update strings.xml --- cSploit/res/values-zh-rCN/strings.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/cSploit/res/values-zh-rCN/strings.xml b/cSploit/res/values-zh-rCN/strings.xml index a703113784..704c22f622 100644 --- a/cSploit/res/values-zh-rCN/strings.xml +++ b/cSploit/res/values-zh-rCN/strings.xml @@ -116,6 +116,9 @@ If not, see http://www.gnu.org/licenses/. 无效的文件名称。 发生了未知的错误,请尝试选择一个新的目标。 + DNS欺骗 + 重定向连接到指定的web/IP + 储存 已经选择 未找到]]> 没有在当前目标找到任何开放的端口,请先运行服务检查工具。 @@ -452,6 +455,8 @@ If not, see http://www.gnu.org/licenses/. 高级 启用 MSF 启用 MetaSploit 框架 + MSF 状态通知 + 显示MSF RPC连接状态 删除 MSF 从您的设备删除 MetaSploit 框架 包含 MetaSploit 框架的文件夹。 From 2b10d4d3bb85de392f873e9faa371fcffd5674a5 Mon Sep 17 00:00:00 2001 From: tux_mind Date: Sun, 4 Oct 2015 20:31:05 +0200 Subject: [PATCH 04/49] increase mac vendor lookup using an integer as key instead of a string --- .../src/org/csploit/android/core/System.java | 9 +++---- .../android/helpers/NetworkHelper.java | 24 +++++++++++++++++++ 2 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 cSploit/src/org/csploit/android/helpers/NetworkHelper.java diff --git a/cSploit/src/org/csploit/android/core/System.java b/cSploit/src/org/csploit/android/core/System.java index e6673041eb..1918705efa 100644 --- a/cSploit/src/org/csploit/android/core/System.java +++ b/cSploit/src/org/csploit/android/core/System.java @@ -44,6 +44,7 @@ import org.csploit.android.R; import org.csploit.android.WifiScannerActivity; import org.csploit.android.gui.dialogs.FatalDialog; +import org.csploit.android.helpers.NetworkHelper; import org.csploit.android.net.Endpoint; import org.csploit.android.net.GitHubParser; import org.csploit.android.net.Network; @@ -116,7 +117,7 @@ public class System private static int mCurrentTarget = 0; private static Map mServices = null; private static Map mPorts = null; - private static Map mVendors = null; + private static Map mVendors = null; private static SparseIntArray mOpenPorts = null; // registered plugins @@ -558,7 +559,7 @@ private static void preloadServices(){ private static void preloadVendors(){ if(mVendors == null){ try{ - mVendors = new HashMap(); + mVendors = new HashMap<>(); @SuppressWarnings("ConstantConditions") FileInputStream fstream = new FileInputStream(mContext.getFilesDir().getAbsolutePath() + "/tools/nmap/nmap-mac-prefixes"); @@ -572,7 +573,7 @@ private static void preloadVendors(){ String[] tokens = line.split(" ", 2); if(tokens.length == 2) - mVendors.put(tokens[0], tokens[1]); + mVendors.put(NetworkHelper.getOUICode(tokens[0]), tokens[1]); } } @@ -940,7 +941,7 @@ public static String getMacVendor(byte[] mac){ preloadVendors(); if(mac != null && mac.length >= 3) - return mVendors.get(String.format("%02X%02X%02X", mac[0], mac[1], mac[2])); + return mVendors.get(NetworkHelper.getOUICode(mac)); else return null; } diff --git a/cSploit/src/org/csploit/android/helpers/NetworkHelper.java b/cSploit/src/org/csploit/android/helpers/NetworkHelper.java new file mode 100644 index 0000000000..fe2f356345 --- /dev/null +++ b/cSploit/src/org/csploit/android/helpers/NetworkHelper.java @@ -0,0 +1,24 @@ +package org.csploit.android.helpers; + +/** + * A class that provide some useful network-related static methods + */ +public final class NetworkHelper { + /** + * translate an OUI to it's integer representation + * @param macAddress the 6-byte array that represent a mac address + * @return the OUI integer + */ + public static int getOUICode(byte[] macAddress) { + return (macAddress[2] << 16) & (macAddress[1] << 8) & macAddress[0]; + } + + /** + * translate an OUI to it's integer representation + * @param hexOui a string that hold OUI in hexadecimal form ( e.g. "ACDE48" ) + * @return the OUI integer + */ + public static int getOUICode(String hexOui) { + return Integer.parseInt(hexOui, 16); + } +} From 399e0fef079e0cd7df93813bc20cc2ff9e2d2420 Mon Sep 17 00:00:00 2001 From: tux_mind Date: Sun, 4 Oct 2015 22:46:25 +0200 Subject: [PATCH 05/49] log why an exploit fails to start. --- .../org/csploit/android/net/metasploit/MsfExploit.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/cSploit/src/org/csploit/android/net/metasploit/MsfExploit.java b/cSploit/src/org/csploit/android/net/metasploit/MsfExploit.java index e2eecb7cf9..c24e553f60 100644 --- a/cSploit/src/org/csploit/android/net/metasploit/MsfExploit.java +++ b/cSploit/src/org/csploit/android/net/metasploit/MsfExploit.java @@ -226,8 +226,11 @@ private void retrievePayloads() throws IOException, RPCClient.MSFException { @SuppressWarnings("unchecked") public boolean launch() throws RPCClient.MSFException { - if(System.getMsfRpc()==null || options.isEmpty()) + if(System.getMsfRpc()==null || options.isEmpty()) { + Logger.info("exploit launch failed: " + (options.isEmpty() ? + "missing options" : "RPC client not available")); return false; + } try { Map opts = new HashMap(); @@ -248,10 +251,13 @@ public boolean launch() throws RPCClient.MSFException { Map res = (Map) System.getMsfRpc().call("module.execute","exploit", name, opts); - if(res == null) + if(res == null) { + Logger.info("exploit launch failed: null response from RPC"); return false; + } if(res.get("job_id") == null) { + Logger.info("exploit launch failed: 'job_id' not found or null"); return false; } From 7bd9dc4ac848cd24f2953c127c8c767da2bd16d0 Mon Sep 17 00:00:00 2001 From: tux_mind Date: Sun, 4 Oct 2015 23:05:19 +0200 Subject: [PATCH 06/49] reformat code --- .../android/plugins/ExploitFinder.java | 668 +++++++++--------- 1 file changed, 334 insertions(+), 334 deletions(-) diff --git a/cSploit/src/org/csploit/android/plugins/ExploitFinder.java b/cSploit/src/org/csploit/android/plugins/ExploitFinder.java index 742fd9519a..28dcc86ddf 100644 --- a/cSploit/src/org/csploit/android/plugins/ExploitFinder.java +++ b/cSploit/src/org/csploit/android/plugins/ExploitFinder.java @@ -66,373 +66,373 @@ import static org.csploit.android.net.metasploit.MsfExploit.Ranking; public class ExploitFinder extends Plugin { - private ToggleButton mSearchToggleButton = null; - private ProgressBar mSearchProgress = null; - private ListView mListView = null; - private Future job = null; - private ExploitAdapter mAdapter = null; - - private static ExploitFinder UIThread = null; - - public class ExploitAdapter extends ArrayAdapter { - class ExploitHolder { - ImageView itemImage; - TextView itemTitle; - TextView itemDescription; - TextView itemRanking; - } + private ToggleButton mSearchToggleButton = null; + private ProgressBar mSearchProgress = null; + private ListView mListView = null; + private Future job = null; + private ExploitAdapter mAdapter = null; + + private static ExploitFinder UIThread = null; + + public class ExploitAdapter extends ArrayAdapter { + class ExploitHolder { + ImageView itemImage; + TextView itemTitle; + TextView itemDescription; + TextView itemRanking; + } - public ExploitAdapter() { - super(ExploitFinder.this, R.layout.plugin_exploit_finder_item, (List) System.getCurrentExploits()); - } + public ExploitAdapter() { + super(ExploitFinder.this, R.layout.plugin_exploit_finder_item, (List) System.getCurrentExploits()); + } - @Override - public View getView(int position, View convertView, ViewGroup parent) { - View row = convertView; - ExploitHolder holder; + @Override + public View getView(int position, View convertView, ViewGroup parent) { + View row = convertView; + ExploitHolder holder; - if (row == null) { - LayoutInflater inflater = (LayoutInflater) ExploitFinder.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); - row = inflater.inflate(R.layout.plugin_exploit_finder_item, parent, false); + if (row == null) { + LayoutInflater inflater = (LayoutInflater) ExploitFinder.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + row = inflater.inflate(R.layout.plugin_exploit_finder_item, parent, false); - holder = new ExploitHolder(); + holder = new ExploitHolder(); - holder.itemImage = (ImageView) row.findViewById(R.id.itemIcon); - holder.itemTitle = (TextView) row.findViewById(R.id.itemTitle); - holder.itemDescription = (TextView) row.findViewById(R.id.itemDescription); - holder.itemRanking = (TextView) row.findViewById(R.id.itemRanking); + holder.itemImage = (ImageView) row.findViewById(R.id.itemIcon); + holder.itemTitle = (TextView) row.findViewById(R.id.itemTitle); + holder.itemDescription = (TextView) row.findViewById(R.id.itemDescription); + holder.itemRanking = (TextView) row.findViewById(R.id.itemRanking); - row.setTag(holder); - } else { - holder = (ExploitHolder) row.getTag(); - } + row.setTag(holder); + } else { + holder = (ExploitHolder) row.getTag(); + } - Exploit exploit = getItem(position); - - if (exploit instanceof MsfExploit) { - holder.itemTitle.setText - ( - Html.fromHtml - ( - "" + exploit.getName() + "" - ) - ); - final Ranking rank = ((MsfExploit) exploit).getRank(); - String rString = "Ranking: "; - String color; - switch (rank) { - case Low: - rString+= "Low"; - color = "red"; - break; - case Average: - rString+= "Average"; - color = "grey4"; - break; - case Normal: - rString+= "Normal"; - color = "grey4"; - break; - case Good: - rString+= "Good"; - color = "blue"; - break; - case Great: - rString+= "Great"; - color = "green"; - break; - case Excellent: - rString+= "Excellent"; - color = "green"; - break; - case Manual: - default: - rString+= "Manual"; - color = "gray4"; - break; - } - - holder.itemRanking.setText(Html.fromHtml("" + rString + "")); - } else - holder.itemTitle.setText(exploit.getName()); - - holder.itemTitle.setTextColor(ContextCompat.getColor(getContext(), - exploit.isEnabled() ? R.color.app_color : R.color.gray_text)); - holder.itemTitle.setTypeface(null, Typeface.NORMAL); - holder.itemImage.setImageResource(exploit.getDrawableResourceId()); - holder.itemDescription.setText(exploit.getSummary()); - - return row; - } - } + Exploit exploit = getItem(position); - private OnItemClickListener listener = new OnItemClickListener() { - public void onItemClick(AdapterView parent, View v, final int position, long id) { - Exploit exp = mAdapter.getItem(position); - - if (exp == null) - return; - - if (exp instanceof MsfExploit) { - final MsfExploit msfEx = (MsfExploit) exp; - final ArrayList availableChoices = new ArrayList(); - - if (System.getMsfRpc() != null && !System.getMsfRpc().isRemote()) - availableChoices.add(R.string.exploit_launch); - if (msfEx.getOptions() != null) - availableChoices.add(R.string.exploit_edit_options); - if (msfEx.getCurrentPayload() != null) - availableChoices.add(R.string.payload_edit_settings); - if (msfEx.getPayloads() != null && msfEx.getPayloads().size() > 1) - availableChoices.add(R.string.exploit_choose_payload); - if (msfEx.getTargets() != null && msfEx.getTargets().size() > 1) - availableChoices.add(R.string.exploit_choose_target); - if (msfEx.getUrl() != null && !msfEx.getUrl().isEmpty()) - availableChoices.add(R.string.open_url); - if (msfEx.getDescription() != null) - availableChoices.add(R.string.show_full_description); - new ListChoiceDialog(R.string.choose_an_option, availableChoices.toArray(new Integer[availableChoices.size()]), ExploitFinder.this, new ChoiceDialog.ChoiceDialogListener() { - @Override - public void onChoice(int choice) { - Intent intent; - switch (availableChoices.get(choice)) { - case R.string.exploit_launch: - launchExploit(msfEx); - break; - case R.string.exploit_edit_options: - intent = new Intent(ExploitFinder.this, MsfPreferences.class); - System.setCurrentExploit(msfEx); - ExploitFinder.this.startActivity(intent); - break; - case R.string.payload_edit_settings: - intent = new Intent(ExploitFinder.this, MsfPreferences.class); - System.setCurrentPayload(msfEx.getCurrentPayload()); - ExploitFinder.this.startActivity(intent); - break; - case R.string.exploit_choose_payload: - new ListChoiceDialog("Choose a payload", msfEx.getPayloads().toArray(new Payload[msfEx.getPayloads().size()]), ExploitFinder.this, new ChoiceDialog.ChoiceDialogListener() { - @Override - public void onChoice(int choice) { - msfEx.setPayload(choice); - } - }).show(); - break; - case R.string.exploit_choose_target: - new ListChoiceDialog("Choose a target", msfEx.getTargets().toArray(new String[msfEx.getTargets().size()]), ExploitFinder.this, new ChoiceDialog.ChoiceDialogListener() { - @Override - public void onChoice(int choice) { - msfEx.setTarget(choice); - } - }).show(); - break; - case R.string.show_full_description: - new ErrorDialog(msfEx.getName(), msfEx.getDescription(), ExploitFinder.this).show(); - break; - case R.string.open_url: - startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(msfEx.getUrl()))); - break; - } - } - }).show(); - } else { - if (exp.getUrl() != null && !exp.getUrl().isEmpty()) - startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(exp.getUrl()))); - } + if (exploit instanceof MsfExploit) { + holder.itemTitle.setText + ( + Html.fromHtml + ( + "" + exploit.getName() + "" + ) + ); + final Ranking rank = ((MsfExploit) exploit).getRank(); + String rString = "Ranking: "; + String color; + switch (rank) { + case Low: + rString += "Low"; + color = "red"; + break; + case Average: + rString += "Average"; + color = "grey4"; + break; + case Normal: + rString += "Normal"; + color = "grey4"; + break; + case Good: + rString += "Good"; + color = "blue"; + break; + case Great: + rString += "Great"; + color = "green"; + break; + case Excellent: + rString += "Excellent"; + color = "green"; + break; + case Manual: + default: + rString += "Manual"; + color = "gray4"; + break; } - }; - - public void launchExploit(final MsfExploit msfEx) { - new Thread(new Runnable() { - @Override - public void run() { + holder.itemRanking.setText(Html.fromHtml("" + rString + "")); + } else + holder.itemTitle.setText(exploit.getName()); - int length; - String message; + holder.itemTitle.setTextColor(ContextCompat.getColor(getContext(), + exploit.isEnabled() ? R.color.app_color : R.color.gray_text)); + holder.itemTitle.setTypeface(null, Typeface.NORMAL); + holder.itemImage.setImageResource(exploit.getDrawableResourceId()); + holder.itemDescription.setText(exploit.getSummary()); - length = Toast.LENGTH_SHORT; - - try { - if (msfEx.launch()) - message = msfEx.getName() + ": Job started"; - else - message = msfEx.getName() + ": Launch failed"; - } catch (RPCClient.MSFException e) { - message = String.format("launch failed: %s", e.getMessage()); - length = Toast.LENGTH_LONG; - } - - final int flength = length; - final String fmessage = message; - - ExploitFinder.this.runOnUiThread(new Runnable() { - @Override - public void run() { - Toast.makeText(ExploitFinder.this, fmessage, flength).show(); - } - }); - } - }).start(); + return row; } - - public ExploitFinder() { - super - ( - - R.string.exploit_finder, - R.string.exploit_finder_desc, - - new Target.Type[]{Target.Type.ENDPOINT, Target.Type.REMOTE}, - R.layout.plugin_exploit_finder, - R.drawable.action_exploit_finder - ); + } + + private OnItemClickListener listener = new OnItemClickListener() { + public void onItemClick(AdapterView parent, View v, final int position, long id) { + Exploit exp = mAdapter.getItem(position); + + if (exp == null) + return; + + if (exp instanceof MsfExploit) { + final MsfExploit msfEx = (MsfExploit) exp; + final ArrayList availableChoices = new ArrayList(); + + if (System.getMsfRpc() != null && !System.getMsfRpc().isRemote()) + availableChoices.add(R.string.exploit_launch); + if (msfEx.getOptions() != null) + availableChoices.add(R.string.exploit_edit_options); + if (msfEx.getCurrentPayload() != null) + availableChoices.add(R.string.payload_edit_settings); + if (msfEx.getPayloads() != null && msfEx.getPayloads().size() > 1) + availableChoices.add(R.string.exploit_choose_payload); + if (msfEx.getTargets() != null && msfEx.getTargets().size() > 1) + availableChoices.add(R.string.exploit_choose_target); + if (msfEx.getUrl() != null && !msfEx.getUrl().isEmpty()) + availableChoices.add(R.string.open_url); + if (msfEx.getDescription() != null) + availableChoices.add(R.string.show_full_description); + new ListChoiceDialog(R.string.choose_an_option, availableChoices.toArray(new Integer[availableChoices.size()]), ExploitFinder.this, new ChoiceDialog.ChoiceDialogListener() { + @Override + public void onChoice(int choice) { + Intent intent; + switch (availableChoices.get(choice)) { + case R.string.exploit_launch: + launchExploit(msfEx); + break; + case R.string.exploit_edit_options: + intent = new Intent(ExploitFinder.this, MsfPreferences.class); + System.setCurrentExploit(msfEx); + ExploitFinder.this.startActivity(intent); + break; + case R.string.payload_edit_settings: + intent = new Intent(ExploitFinder.this, MsfPreferences.class); + System.setCurrentPayload(msfEx.getCurrentPayload()); + ExploitFinder.this.startActivity(intent); + break; + case R.string.exploit_choose_payload: + new ListChoiceDialog("Choose a payload", msfEx.getPayloads().toArray(new Payload[msfEx.getPayloads().size()]), ExploitFinder.this, new ChoiceDialog.ChoiceDialogListener() { + @Override + public void onChoice(int choice) { + msfEx.setPayload(choice); + } + }).show(); + break; + case R.string.exploit_choose_target: + new ListChoiceDialog("Choose a target", msfEx.getTargets().toArray(new String[msfEx.getTargets().size()]), ExploitFinder.this, new ChoiceDialog.ChoiceDialogListener() { + @Override + public void onChoice(int choice) { + msfEx.setTarget(choice); + } + }).show(); + break; + case R.string.show_full_description: + new ErrorDialog(msfEx.getName(), msfEx.getDescription(), ExploitFinder.this).show(); + break; + case R.string.open_url: + startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(msfEx.getUrl()))); + break; + } + } + }).show(); + } else { + if (exp.getUrl() != null && !exp.getUrl().isEmpty()) + startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(exp.getUrl()))); + } } + }; - private void setStartedState() { - mSearchProgress.setVisibility(View.VISIBLE); - - final Target target = System.getCurrentTarget(); - - job = Search.searchExploitForServices(target, - new Search.Receiver() { - private boolean somethingFound = false; - - @Override - public void onItemFound(final Exploit exploit) { - somethingFound = true; - ExploitFinder.this.runOnUiThread(new Runnable() { - @Override - public void run() { - target.addExploit(exploit); - mAdapter.notifyDataSetChanged(); - } - }); - } - - @Override - public void onFoundItemChanged(Exploit exploit) { - ExploitFinder.this.runOnUiThread(new Runnable() { - @Override - public void run() { - mAdapter.notifyDataSetChanged(); - } - }); - } + public void launchExploit(final MsfExploit msfEx) { - @Override - public void onEnd() { - ExploitFinder.this.runOnUiThread(new Runnable() { - @Override - public void run() { - mSearchProgress.setVisibility(View.GONE); - mSearchToggleButton.setChecked(false); - if (System.getCurrentExploits().size() == 0) { - new FinishDialog(getString(R.string.warning), getString(R.string.no_exploits_found), ExploitFinder.this).show(); - } else if (!somethingFound) { - new ErrorDialog(getString(R.string.warning), getString(R.string.no_exploits_found), ExploitFinder.this).show(); - } - } - }); - } - }); - } + new Thread(new Runnable() { + @Override + public void run() { - private void setStoppedState() { - if (job != null) - job.cancel(true); + int length; + String message; - mSearchProgress.setVisibility(View.GONE); - mSearchToggleButton.setChecked(false); - } + length = Toast.LENGTH_SHORT; - @Override - public boolean onCreateOptionsMenu(Menu menu) { - MenuInflater inflater = getMenuInflater(); - inflater.inflate(R.menu.exploit_finder, menu); - return super.onCreateOptionsMenu(menu); - } + try { + if (msfEx.launch()) + message = msfEx.getName() + ": Job started"; + else + message = msfEx.getName() + ": Launch failed"; + } catch (RPCClient.MSFException e) { + message = String.format("launch failed: %s", e.getMessage()); + length = Toast.LENGTH_LONG; + } - @Override - public void onCreate(Bundle savedInstanceState) { - SharedPreferences themePrefs = getSharedPreferences("THEME", 0); - Boolean isDark = themePrefs.getBoolean("isDark", false); - if (isDark) - setTheme(R.style.DarkTheme); - else - setTheme(R.style.AppTheme); - super.onCreate(savedInstanceState); + final int flength = length; + final String fmessage = message; - Target t = System.getCurrentTarget(); + ExploitFinder.this.runOnUiThread(new Runnable() { + @Override + public void run() { + Toast.makeText(ExploitFinder.this, fmessage, flength).show(); + } + }); + } + }).start(); + } - if (!t.hasOpenPorts()) - new FinishDialog(getString(R.string.warning), getString(R.string.no_open_ports), this).show(); + public ExploitFinder() { + super + ( - else if (!t.hasOpenPortsWithService()) - new FinishDialog(getString(R.string.warning), getString(R.string.no_infos_on_target), this).show(); + R.string.exploit_finder, + R.string.exploit_finder_desc, - mSearchToggleButton = (ToggleButton) findViewById(R.id.searchToggleButton); - mSearchProgress = (ProgressBar) findViewById(R.id.searchActivity); - mListView = (ListView) findViewById(android.R.id.list); - mAdapter = new ExploitAdapter(); + new Target.Type[]{Target.Type.ENDPOINT, Target.Type.REMOTE}, + R.layout.plugin_exploit_finder, + R.drawable.action_exploit_finder + ); + } - UIThread = this; + private void setStartedState() { + mSearchProgress.setVisibility(View.VISIBLE); - mListView.setAdapter(mAdapter); + final Target target = System.getCurrentTarget(); + job = Search.searchExploitForServices(target, + new Search.Receiver() { + private boolean somethingFound = false; - mListView.setOnItemClickListener(listener); + @Override + public void onItemFound(final Exploit exploit) { + somethingFound = true; + ExploitFinder.this.runOnUiThread(new Runnable() { + @Override + public void run() { + target.addExploit(exploit); + mAdapter.notifyDataSetChanged(); + } + }); + } - mSearchToggleButton.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View v) { - if (((ToggleButton) v).isChecked()) - setStartedState(); - else - setStoppedState(); - } - } - ); - } + @Override + public void onFoundItemChanged(Exploit exploit) { + ExploitFinder.this.runOnUiThread(new Runnable() { + @Override + public void run() { + mAdapter.notifyDataSetChanged(); + } + }); + } - @Override - public boolean onOptionsItemSelected(MenuItem item) { - switch (item.getItemId()) { - case R.id.exploit_launch_all: - mAdapter.getCount(); - for (int x=0; x < mAdapter.getCount(); x++) { - Exploit exp = mAdapter.getItem(x); - if (exp instanceof MsfExploit) { - launchExploit((MsfExploit) exp); + @Override + public void onEnd() { + ExploitFinder.this.runOnUiThread(new Runnable() { + @Override + public void run() { + mSearchProgress.setVisibility(View.GONE); + mSearchToggleButton.setChecked(false); + if (System.getCurrentExploits().size() == 0) { + new FinishDialog(getString(R.string.warning), getString(R.string.no_exploits_found), ExploitFinder.this).show(); + } else if (!somethingFound) { + new ErrorDialog(getString(R.string.warning), getString(R.string.no_exploits_found), ExploitFinder.this).show(); } - } - return true; - default: - return super.onOptionsItemSelected(item); + } + }); + } + }); + } + + private void setStoppedState() { + if (job != null) + job.cancel(true); + + mSearchProgress.setVisibility(View.GONE); + mSearchToggleButton.setChecked(false); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + MenuInflater inflater = getMenuInflater(); + inflater.inflate(R.menu.exploit_finder, menu); + return super.onCreateOptionsMenu(menu); + } + + @Override + public void onCreate(Bundle savedInstanceState) { + SharedPreferences themePrefs = getSharedPreferences("THEME", 0); + Boolean isDark = themePrefs.getBoolean("isDark", false); + if (isDark) + setTheme(R.style.DarkTheme); + else + setTheme(R.style.AppTheme); + super.onCreate(savedInstanceState); + + Target t = System.getCurrentTarget(); + + if (!t.hasOpenPorts()) + new FinishDialog(getString(R.string.warning), getString(R.string.no_open_ports), this).show(); + + else if (!t.hasOpenPortsWithService()) + new FinishDialog(getString(R.string.warning), getString(R.string.no_infos_on_target), this).show(); + + mSearchToggleButton = (ToggleButton) findViewById(R.id.searchToggleButton); + mSearchProgress = (ProgressBar) findViewById(R.id.searchActivity); + mListView = (ListView) findViewById(android.R.id.list); + mAdapter = new ExploitAdapter(); + + UIThread = this; + + mListView.setAdapter(mAdapter); + + + mListView.setOnItemClickListener(listener); + + mSearchToggleButton.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + if (((ToggleButton) v).isChecked()) + setStartedState(); + else + setStoppedState(); + } + } + ); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.exploit_launch_all: + mAdapter.getCount(); + for (int x = 0; x < mAdapter.getCount(); x++) { + Exploit exp = mAdapter.getItem(x); + if (exp instanceof MsfExploit) { + launchExploit((MsfExploit) exp); + } } + return true; + default: + return super.onOptionsItemSelected(item); } - - @Override - public void onBackPressed() { - setStoppedState(); - super.onBackPressed(); - overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_left); - } - - @Override - public void onRpcChange(RPCClient currentValue) { - // TODO: use Java Observer/Observable implementation - if (UIThread == null) - return; - // rebuild view - if (this != UIThread) { - UIThread.onRpcChange(currentValue); - } else { - ExploitFinder.this.runOnUiThread(new Runnable() { - @Override - public void run() { - mAdapter.notifyDataSetChanged(); - } - }); + } + + @Override + public void onBackPressed() { + setStoppedState(); + super.onBackPressed(); + overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_left); + } + + @Override + public void onRpcChange(RPCClient currentValue) { + // TODO: use Java Observer/Observable implementation + if (UIThread == null) + return; + // rebuild view + if (this != UIThread) { + UIThread.onRpcChange(currentValue); + } else { + ExploitFinder.this.runOnUiThread(new Runnable() { + @Override + public void run() { + mAdapter.notifyDataSetChanged(); } + }); } + } } \ No newline at end of file From c5c3a1af6e755d976ecd7ad9e782098046606267 Mon Sep 17 00:00:00 2001 From: tux_mind Date: Sun, 4 Oct 2015 23:42:20 +0200 Subject: [PATCH 07/49] reduced code complexity --- cSploit/res/values/colors.xml | 9 ++++- cSploit/res/values/strings.xml | 8 ++++ .../android/net/metasploit/MsfExploit.java | 30 ++++++++++---- .../android/plugins/ExploitFinder.java | 39 ++----------------- 4 files changed, 43 insertions(+), 43 deletions(-) diff --git a/cSploit/res/values/colors.xml b/cSploit/res/values/colors.xml index c9a04089ff..f63f0a3a04 100644 --- a/cSploit/res/values/colors.xml +++ b/cSploit/res/values/colors.xml @@ -16,5 +16,12 @@ #3F51B5 #FFC107 #000000 - + #0000FF + @color/red + #FF7F50 + @color/gray_text + @color/gray_text + @color/blue + @color/green + @color/green \ No newline at end of file diff --git a/cSploit/res/values/strings.xml b/cSploit/res/values/strings.xml index 1aa3a263a8..63f8244393 100644 --- a/cSploit/res/values/strings.xml +++ b/cSploit/res/values/strings.xml @@ -514,4 +514,12 @@ A new version for ruby is available, do you want to upgrade ? A new msf version is available, do you want to upgrade ? MetaSploit Status + Ranking: %s + Manual + Low + Average + Normal + Good + Great + Excellent diff --git a/cSploit/src/org/csploit/android/net/metasploit/MsfExploit.java b/cSploit/src/org/csploit/android/net/metasploit/MsfExploit.java index c24e553f60..9933361850 100644 --- a/cSploit/src/org/csploit/android/net/metasploit/MsfExploit.java +++ b/cSploit/src/org/csploit/android/net/metasploit/MsfExploit.java @@ -38,13 +38,29 @@ public class MsfExploit extends Target.Exploit private ArrayList payloads = new ArrayList(); public enum Ranking { - Manual, - Low, - Average, - Normal, - Good, - Great, - Excellent; + Manual(R.color.msf_rank_manual, R.string.msf_rank_manual), + Low(R.color.msf_rank_low, R.string.msf_rank_low), + Average(R.color.msf_rank_average, R.string.msf_rank_average), + Normal(R.color.msf_rank_normal, R.string.msf_rank_normal), + Good(R.color.msf_rank_good, R.string.msf_rank_good), + Great(R.color.msf_rank_great, R.string.msf_rank_great), + Excellent(R.color.msf_rank_excellent, R.string.msf_rank_excellent); + + final int color; + final int stringID; + + Ranking(int color, int stringID) { + this.color = color; + this.stringID = stringID; + } + + public int getColor() { + return color; + } + + public int getStringID() { + return stringID; + } public static Ranking valueOf(int value) { switch (value) { diff --git a/cSploit/src/org/csploit/android/plugins/ExploitFinder.java b/cSploit/src/org/csploit/android/plugins/ExploitFinder.java index 28dcc86ddf..ea7440f4e8 100644 --- a/cSploit/src/org/csploit/android/plugins/ExploitFinder.java +++ b/cSploit/src/org/csploit/android/plugins/ExploitFinder.java @@ -21,7 +21,6 @@ import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; -import android.graphics.Color; import android.graphics.Typeface; import android.net.Uri; import android.os.Bundle; @@ -118,41 +117,11 @@ public View getView(int position, View convertView, ViewGroup parent) { ) ); final Ranking rank = ((MsfExploit) exploit).getRank(); - String rString = "Ranking: "; - String color; - switch (rank) { - case Low: - rString += "Low"; - color = "red"; - break; - case Average: - rString += "Average"; - color = "grey4"; - break; - case Normal: - rString += "Normal"; - color = "grey4"; - break; - case Good: - rString += "Good"; - color = "blue"; - break; - case Great: - rString += "Great"; - color = "green"; - break; - case Excellent: - rString += "Excellent"; - color = "green"; - break; - case Manual: - default: - rString += "Manual"; - color = "gray4"; - break; - } - holder.itemRanking.setText(Html.fromHtml("" + rString + "")); + holder.itemRanking.setText( + String.format(getString(R.string.msf_exploit_ranking), + getString(rank.getStringID()))); + holder.itemRanking.setTextColor(rank.getColor()); } else holder.itemTitle.setText(exploit.getName()); From 07ebc066dde4068ea8142764dec2486cd55e4f5c Mon Sep 17 00:00:00 2001 From: tux_mind Date: Sun, 4 Oct 2015 23:42:42 +0200 Subject: [PATCH 08/49] update core reference --- cSploit/jni | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cSploit/jni b/cSploit/jni index 346967efea..5d58371006 160000 --- a/cSploit/jni +++ b/cSploit/jni @@ -1 +1 @@ -Subproject commit 346967efea5dbec7f07d93beb7c8e2ccdf423ab1 +Subproject commit 5d58371006ad73c6d3ebf766cdfcf774822fd511 From 80e70293464777e2c277ae26901d515b885783a9 Mon Sep 17 00:00:00 2001 From: tux_mind Date: Mon, 5 Oct 2015 03:17:39 +0200 Subject: [PATCH 09/49] moved equals and merge logic into the appropriate class --- .../src/org/csploit/android/net/Target.java | 48 +++++++++---------- 1 file changed, 22 insertions(+), 26 deletions(-) diff --git a/cSploit/src/org/csploit/android/net/Target.java b/cSploit/src/org/csploit/android/net/Target.java index 6fef98df50..6ebe0515a4 100644 --- a/cSploit/src/org/csploit/android/net/Target.java +++ b/cSploit/src/org/csploit/android/net/Target.java @@ -118,21 +118,20 @@ public boolean equals(Object o) { if(o == null || o.getClass() != this.getClass()) return false; Port p = (Port)o; - if(p.number != this.number || p.protocol != this.protocol) - return false; - if(this.version!=null) { - if(!this.version.equals(p.version)) - return false; - } else if (p.version != null) { - return false; + return (p.number == this.number && p.protocol == this.protocol); + } + + /** + * merge data from this port to another + * @param other + */ + public void mergeTo(Port other) { + if(service != null && !service.equals(other.service)) { + other.service = service; } - if(this.service!=null) { - if(!this.service.equals(p.service)) - return false; - } else if (p.service!=null) { - return false; + if(version != null && !version.equals(other.version)) { + other.version = version; } - return true; } } @@ -634,22 +633,19 @@ public String getHostname(){ public void addOpenPort(Port port){ synchronized (mPorts) { - // we cannot just check if mPorts already has the new port (contains(port)), because if the new port has new fields, - // it won't be the same and we'll add duplicated ports. - for (Port p : mPorts){ - // port considered added: same port + same protocol -> 22:tcp, 53:udp - if (p.number == port.number && p.protocol == port.protocol){ - if ((port.service != null && !port.service.isEmpty()) && (p.service == null || p.service.isEmpty())) { - p.service = port.service; - } - if ((port.version != null && !port.version.isEmpty()) && (p.version == null || p.version.isEmpty())) { - p.version = port.version; - } - return; + Port existing = null; + for(Port p : mPorts) { + if(p.equals(port)) { + existing = p; + break; } } - mPorts.add(port); + if(existing != null) { + port.mergeTo(existing); + } else { + mPorts.add(port); + } } } From 7b313b6f9fa8156ce517a1efb64bf5de4f625d0c Mon Sep 17 00:00:00 2001 From: tux_mind Date: Mon, 5 Oct 2015 04:25:54 +0200 Subject: [PATCH 10/49] Update README.md thanks to fat-tire --- README.md | 82 +++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 58 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index b07efb6285..cb29e343b1 100644 --- a/README.md +++ b/README.md @@ -1,39 +1,73 @@ -cSploit - An Android network penetration suite. -============================== +# cSploit: Android network pentesting suite -Copyleft Margaritelli of Simone aka evilsocket and then fused with zANTI2 continued by tux-mind. + -- +[cSploit](http://www.csploit.org) is an open source (GPLed) Android network analysis and penetration suite which aims to be +**the most complete and advanced professional toolkit** for IT security experts/geeks to perform network security assessments on a mobile device. + +See more at [www.cSploit.org](http://www.csploit.org). + +## Features: + +* Map your local network +* Fingerprint hosts' operating systems and open ports +* Add your own hosts outside the local network +* Integrated traceroute +* **Integrated [Metasploit](https://www.metasploit.com/) framework RPCd** + * Search hosts for **known vulnerabilities** via integrated Metasploit daemon + * Adjust exploit settings, launch, and create shell consoles on exploited systems + * More coming +* Forge tcp/udp packets +* Perform man in the middle attacks (MITM) including: + * Image, text, and video replacement-- replace your own content on unencrypted web pages + * javascript injection-- add your own javascript to unencrypted web pages. + * **password sniffing** ( with common protocols dissection ) + * Capture pcap network traffic files + * Real time **traffic manipulation** to replace images/text/inject into web pages + * DNS spoofing to redirect traffic to different domain + * Break existing connections + * Redirect traffic to another address + * Session Hijacking-- listen for unencrypted cookies and clone them to take Web session + +## Tutorials: + + + +* [Use cSploit to get root shell on Metasploitable2](https://github.com/cSploit/android/wiki/%5BTutorial%5D-Use-cSploit-to-get-root-shell-on-Metasploitable2) +* [Use cSploit for simple Man-in-the-Middle (MITM security demos](https://github.com/cSploit/android/wiki/%5BTutorial%5D-Use-cSploit-for-simple-Man-In-The-Middle-(MITM)-security-demos) -[![Click here to lend your support to: cSploit and make a donation at www.paypal.com](https://www.paypalobjects.com/en_GB/i/btn/btn_donate_LG.gif?skin_name=chrome)](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=FTKXDCBEDMW9G&lc=GB&item_name=cSploit¤cy_code=EUR&bn=PP%2dDonationsBF%3abtn_donate_LG%2egif%3aNonHosted) -------------- +Also see the [wiki](https://github.com/cSploit/android/wiki) for instructions on building, [reporting issues](https://github.com/cSploit/android/wiki/How-to-open-an-issue), and more. -cSploit is an Android network analysis and penetration suite which aims to offer to IT security experts/geeks -**the most complete and advanced professional toolkit** to perform network security assesments on a mobile device. +## Requirements -Once cSploit is started, you will be able to easily map your network, fingerprint alive hosts operating systems -and running services, search for **known vulnerabilities**, crack logon procedures of many tcp protocols, perform -man in the middle attacks such as **password sniffing** ( with common protocols dissection ), real time **traffic -manipulation**, etc, etc . +* A **ROOTED** device running Android 2.3 (Gingerbread) or newer +* The device must have a BusyBox **full install**, this means with **every** utility installed ( not the partial installation ). If you do not have busybox already, you can get it [here](https://play.google.com/store/apps/details?id=stericson.busybox) or [here](https://play.google.com/store/apps/details?id=com.jrummy.busybox.installer) (note cSploit does not endorse any busybox installer. These are just two we found). -This application is still in **beta stage**, a stable release will be available as soon as possible, but expect -some crash or strange behaviour until then, in any case, feel free to submit an issue here on GitHub. +## Downloads -Requirements -------------- +The latest release and pre-release versions are available on github: -- An Android device with at least the 2.3 ( Gingerbread ) version of the OS. -- The device **must be rooted**. -- The device must have a BusyBox **full install**, this means with **every** utility installed ( not the partial installation ). +https://github.com/cSploit/android/releases +Or to save a click, [this link](https://github.com/cSploit/android/releases/latest) should always point to the most recent release. -Disclaimer -------------- +Additionally, you can get a fresh-from-the-source nightly at [www.cSploit.org/downloads](http://www.csploit.org/downloads). These nightly builds are generated more frequently than the releases. And while they may have the very latest features, they may also have the latest bugs, so be careful running them! -This application is not to be used for any purposes other than to demonstrate its functions, and must only be used on networks for which you have permission to do so. Any other use is not the responsibility of the developer.In other words, don't be stupid, and don't direct angry people towards me. +## How to contribute -License -------------- +All contributions are welcome, from code to documentation to graphics to design suggestions to bug reports. Please use github to its fullest-- contribute Pull Requests, contribute tutorials or other wiki content-- whatever you have to offer, we can use it! + +## License This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + +## Copyright + +Copyleft Margaritelli of Simone aka evilsocket and then fused with zANTI2 continued by @tux-mind and additional contributors. + +[![Click here to lend your support to: cSploit and make a donation at www.paypal.com](https://www.paypalobjects.com/en_GB/i/btn/btn_donate_LG.gif?skin_name=chrome)](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=FTKXDCBEDMW9G&lc=GB&item_name=cSploit¤cy_code=EUR&bn=PP%2dDonationsBF%3abtn_donate_LG%2egif%3aNonHosted) + +## Disclaimer + +***Note: cSploit is intended to be used for legal security purposes only, and you should only use it to protect networks/hosts you own or have permission to test. Any other use is not the responsibility of the developer(s). Be sure that you understand and are complying with the cSploit licenses and laws in your area. In other words, don't be stupid, don't be an asshole, and use this tool responsibly and legally.*** \ No newline at end of file From 7bfb674463ff34a0c4760eaebab2aedc55a1dbd6 Mon Sep 17 00:00:00 2001 From: Ilya Date: Mon, 5 Oct 2015 14:38:24 +0900 Subject: [PATCH 11/49] Update strings.xml Added and translated new strings --- cSploit/res/values-ru/strings.xml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/cSploit/res/values-ru/strings.xml b/cSploit/res/values-ru/strings.xml index 1d12481a7c..b0070c882b 100644 --- a/cSploit/res/values-ru/strings.xml +++ b/cSploit/res/values-ru/strings.xml @@ -488,4 +488,12 @@ Новая версия ruby доступна, вы хотите обновиться? Новая версия MSF доступна, вы хотите обновиться? Статус MetaSploit + Рейтинг: %s + Вручную + Низкий + Средний + Нормальный + Хороший + Отличный + Превосходный From 70b1fe961f6ff939eda2ae2095ec95989c80e6e7 Mon Sep 17 00:00:00 2001 From: Tajnymag Date: Mon, 5 Oct 2015 08:54:00 +0200 Subject: [PATCH 12/49] Updated czech translation --- cSploit/res/values-cs/strings.xml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/cSploit/res/values-cs/strings.xml b/cSploit/res/values-cs/strings.xml index 4b092b46e6..c56ca7b05f 100644 --- a/cSploit/res/values-cs/strings.xml +++ b/cSploit/res/values-cs/strings.xml @@ -486,4 +486,20 @@ Knihovna JNI spadla již minule, doufám, že jsi nám již podal hlášení. Aktualizace byla zastavena Nemohu spustit proces + MSF RPC Daemon byl terminován + Nepodařilo se spustit MSF RPC Daemon + Připojení k MSF RPC Daemon SELHALO! + Průzkum sítě SELHAL! + Je k dispozici verze aplikace %s , přejete si aktualizovat? + Je k dispozici nová verze Ruby, přejete si aktualizovat? + Je k dispozici nová verze MSF, přejete si aktualizovat? + Metasploit Status + Hodnocení: %s + Ruční + Nízký + Průměrný + Normalní + Dobrý + Skvělý + Excellentní From ae463e96913f23b436067eb40bb1ddec29e5fbda Mon Sep 17 00:00:00 2001 From: tux_mind Date: Mon, 5 Oct 2015 10:18:22 +0200 Subject: [PATCH 13/49] some fixup: - target index may change - move callback - onClick get called from main Thread --- cSploit/res/values/strings.xml | 2 + .../src/org/csploit/android/core/System.java | 12 ++- .../csploit/android/plugins/mitm/Sniffer.java | 82 +++++++++---------- 3 files changed, 51 insertions(+), 45 deletions(-) diff --git a/cSploit/res/values/strings.xml b/cSploit/res/values/strings.xml index 1aa3a263a8..71fbad87d1 100644 --- a/cSploit/res/values/strings.xml +++ b/cSploit/res/values/strings.xml @@ -514,4 +514,6 @@ A new version for ruby is available, do you want to upgrade ? A new msf version is available, do you want to upgrade ? MetaSploit Status + Select target + Select %s ? diff --git a/cSploit/src/org/csploit/android/core/System.java b/cSploit/src/org/csploit/android/core/System.java index 8cf9144bfe..ddd706e439 100644 --- a/cSploit/src/org/csploit/android/core/System.java +++ b/cSploit/src/org/csploit/android/core/System.java @@ -1029,10 +1029,6 @@ public static Target getTarget(int index){ return mTargets.get(index); } - public static int getTargetPosition (Target t) { - return mTargets.indexOf(t); - } - public static boolean hasTarget(Target target){ return mTargets.contains(target); } @@ -1041,6 +1037,14 @@ public static void setCurrentTarget(int index){ mCurrentTarget = index; } + public static void setCurrentTarget(Target target) { + int index = mTargets.indexOf(target); + if(index != -1) + setCurrentTarget(index); + else + Logger.error("target '" + target + "' not found"); + } + public static Target getCurrentTarget(){ return getTarget(mCurrentTarget); } diff --git a/cSploit/src/org/csploit/android/plugins/mitm/Sniffer.java b/cSploit/src/org/csploit/android/plugins/mitm/Sniffer.java index 3e785a972e..20f9f11b46 100644 --- a/cSploit/src/org/csploit/android/plugins/mitm/Sniffer.java +++ b/cSploit/src/org/csploit/android/plugins/mitm/Sniffer.java @@ -54,7 +54,7 @@ import java.util.ArrayList; import java.util.Collections; -public class Sniffer extends AppCompatActivity +public class Sniffer extends AppCompatActivity implements AdapterView.OnItemClickListener { private static final String[] SORT = { "Bandwidth ↓", @@ -296,52 +296,18 @@ public void onCreate(Bundle savedInstanceState){ mSpoofSession = new SpoofSession(false, false, null, null); mSortSpinner.setAdapter(new ArrayAdapter(this, android.R.layout.simple_spinner_item, SORT)); - mSortSpinner.setOnItemSelectedListener(new OnItemSelectedListener(){ - public void onItemSelected(AdapterView adapter, View view, int position, long id){ + mSortSpinner.setOnItemSelectedListener(new OnItemSelectedListener() { + public void onItemSelected(AdapterView adapter, View view, int position, long id) { mSortType = position; } - public void onNothingSelected(AdapterView arg0){ + public void onNothingSelected(AdapterView arg0) { } }); mListView.setAdapter(mAdapter); - mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { - @Override - public void onItemClick(AdapterView parent, View view, int position, long id) { - final Target t = System.getTargetByAddress(mAdapter.getByPosition(position).mAddress); - - new ConfirmDialog("Select target", "Select " + t.getAddress().getHostAddress() + "?", Sniffer.this, new ConfirmDialog.ConfirmDialogListener() { - @Override - public void onConfirm() { - new Thread(new Runnable() { - @Override - public void run() { - setStoppedState(); - - startActivity(new Intent(Sniffer.this, - ActionActivity.class)); - - overridePendingTransition(R.anim.slide_in_left, - R.anim.slide_out_left); - } - }).start(); - - System.setCurrentTarget(System.getTargetPosition(t)); - Toast.makeText(Sniffer.this, - getString(R.string.selected_) + System.getCurrentTarget(), - Toast.LENGTH_SHORT).show(); - } - - @Override - public void onCancel() { - } - }).show(); - - - } - }); + mListView.setOnItemClickListener(this); mSniffToggleButton.setOnClickListener(new View.OnClickListener(){ @Override @@ -370,6 +336,40 @@ public void onCancel(){ }).show(); } + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + String address = mAdapter.getByPosition(position).mAddress; + final Target t = System.getTargetByAddress(address); + + if (t == null) + return; + + new ConfirmDialog(getString(R.string.mitm_ss_select_target_title), + String.format(getString(R.string.mitm_ss_select_target_prompt), address), + Sniffer.this, new ConfirmDialog.ConfirmDialogListener() { + @Override + public void onConfirm() { + System.setCurrentTarget(t); + + setStoppedState(); + + Toast.makeText(Sniffer.this, + getString(R.string.selected_) + System.getCurrentTarget(), + Toast.LENGTH_SHORT).show(); + + startActivity(new Intent(Sniffer.this, + ActionActivity.class)); + + overridePendingTransition(R.anim.slide_in_left, + R.anim.slide_out_left); + } + + @Override + public void onCancel() { + } + }).show(); + } + public synchronized int getSortType(){ return mSortType; } @@ -404,9 +404,9 @@ public void run() { mSniffToggleButton.setChecked(false); } }); - } + } - private void setSpoofErrorState(final String error){ + private void setSpoofErrorState(final String error){ Sniffer.this.runOnUiThread(new Runnable(){ @Override public void run(){ From 52fca0f8efb756a0d2ad4fc513844b11cac6aec4 Mon Sep 17 00:00:00 2001 From: tux_mind Date: Mon, 5 Oct 2015 16:12:32 +0200 Subject: [PATCH 14/49] fixed deadlock on system cleanup when a proxy is blocking network content. --- cSploit/src/org/csploit/android/core/System.java | 3 +++ cSploit/src/org/csploit/android/net/RemoteReader.java | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/cSploit/src/org/csploit/android/core/System.java b/cSploit/src/org/csploit/android/core/System.java index 75053904a7..3a0b2dd968 100644 --- a/cSploit/src/org/csploit/android/core/System.java +++ b/cSploit/src/org/csploit/android/core/System.java @@ -47,6 +47,7 @@ import org.csploit.android.net.Endpoint; import org.csploit.android.net.GitHubParser; import org.csploit.android.net.Network; +import org.csploit.android.net.RemoteReader; import org.csploit.android.net.Target; import org.csploit.android.net.Target.Exploit; import org.csploit.android.net.Target.Type; @@ -1199,6 +1200,8 @@ public static void clean(boolean releaseLocks){ mWakeLock.release(); } + RemoteReader.terminateAll(); + GitHubParser.resetAll(); synchronized (mTargets) { diff --git a/cSploit/src/org/csploit/android/net/RemoteReader.java b/cSploit/src/org/csploit/android/net/RemoteReader.java index 89adbcede0..bd2954d97f 100644 --- a/cSploit/src/org/csploit/android/net/RemoteReader.java +++ b/cSploit/src/org/csploit/android/net/RemoteReader.java @@ -323,6 +323,14 @@ public String getErrorMessage() { return res; } + public static void terminateAll() { + synchronized (readers) { + for(RemoteReader r : readers) { + r.terminate(); + } + } + } + private void addFirst(Task task) { synchronized (tasks) { ((Deque) tasks).addFirst(task); From e14d03babc6b3d4aaa5ef0a0425cc1fe60c8fb2a Mon Sep 17 00:00:00 2001 From: tux_mind Date: Mon, 5 Oct 2015 22:41:10 +0200 Subject: [PATCH 15/49] revert 4d5b3687a0906ed0e2e3ed1914379911ee1ab690 --- .../src/org/csploit/android/MainActivity.java | 2 +- .../android/services/NetworkRadar.java | 95 ++++--------------- .../receivers/NetworkRadarReceiver.java | 11 +++ 3 files changed, 31 insertions(+), 77 deletions(-) diff --git a/cSploit/src/org/csploit/android/MainActivity.java b/cSploit/src/org/csploit/android/MainActivity.java index c4b4ab6454..872701a80f 100644 --- a/cSploit/src/org/csploit/android/MainActivity.java +++ b/cSploit/src/org/csploit/android/MainActivity.java @@ -200,7 +200,7 @@ public boolean onItemLongClick(AdapterView parent, View view, int position, l mWipeReceiver.register(MainActivity.this); mMsfReceiver.register(MainActivity.this); - getNetworkRadar().setAdapter(mTargetAdapter); + mRadarReceiver.setTargetAdapter(mTargetAdapter); StartRPCServer(); diff --git a/cSploit/src/org/csploit/android/services/NetworkRadar.java b/cSploit/src/org/csploit/android/services/NetworkRadar.java index a01996de27..e8baadcdbb 100644 --- a/cSploit/src/org/csploit/android/services/NetworkRadar.java +++ b/cSploit/src/org/csploit/android/services/NetworkRadar.java @@ -1,8 +1,8 @@ package org.csploit.android.services; import android.app.Activity; +import android.content.Context; import android.view.MenuItem; -import android.widget.BaseAdapter; import org.csploit.android.R; import org.csploit.android.core.Logger; @@ -11,29 +11,20 @@ import org.csploit.android.net.Target; import java.net.InetAddress; -import java.util.LinkedList; -import java.util.List; /** * network-radar process manager */ public class NetworkRadar extends NativeService implements MenuControllableService { + public static final String NRDR_CHANGED = "NetworkRadar.action.TARGET_CHANGED"; public static final String NRDR_STOPPED = "NetworkRadar.action.STOPPED"; public static final String NRDR_STARTED = "NetworkRadar.action.STARTED"; public static final String NRDR_START_FAILED = "NetworkRadar.action.START_FAILED"; - private final List taskList = new LinkedList<>(); - private final TargetSubmitter submitter = new TargetSubmitter(); - private BaseAdapter adapter; - - public NetworkRadar(Activity context) { + public NetworkRadar(Context context) { this.context = context; } - public void setAdapter(BaseAdapter adapter) { - this.adapter = adapter; - } - public boolean start() { stop(); try { @@ -78,48 +69,41 @@ private class Receiver extends org.csploit.android.tools.NetworkRadar.HostReceiv @Override public void onHostFound(byte[] macAddress, InetAddress ipAddress, String name) { Target t; - TargetTask task = null; + boolean notify = false; t = System.getTargetByAddress(ipAddress); if(t==null) { t = new Target(ipAddress, macAddress); - t.setAlias(name); - task = new TargetTask(t, true, null, true); - } else { - boolean aliasChanged = name != null && !name.equals(t.getAlias()); + System.addOrderedTarget(t); - if(aliasChanged || !t.isConnected()) { - task = new TargetTask(t, false, (aliasChanged ? name : t.getAlias()), true); - } + notify = true; } - if(task == null) - return; + if( !t.isConnected() ) { + t.setConneced(true); + notify = true; + } - synchronized (taskList) { - taskList.add(task); + if (name != null && !name.equals(t.getAlias())) { + t.setAlias(name); + notify = true; } - ((Activity)context).runOnUiThread(submitter); + if(notify) { + sendIntent(NRDR_CHANGED); + } } @Override public void onHostLost(InetAddress ipAddress) { Target t = System.getTargetByAddress(ipAddress); - if(t == null) { - return; - } - - synchronized (taskList) { - taskList.add( - new TargetTask(t, false, t.getAlias(), false) - ); + if(t != null) { + t.setConneced(false); + sendIntent(NRDR_CHANGED); } - - ((Activity)context).runOnUiThread(submitter); } @Override @@ -136,45 +120,4 @@ public void onDeath(int signal) { sendIntent(NRDR_STOPPED); } } - - private class TargetTask { - final Target target; - final boolean add; - final String name; - final boolean connected; - - public TargetTask(Target target, boolean add, String name, boolean connected) { - this.target = target; - this.add = add; - this.name = name; - this.connected = connected; - } - } - - private class TargetSubmitter implements Runnable { - @Override - public void run() { - synchronized (taskList) { - if(!taskList.isEmpty()) { - for (TargetTask task : taskList) { - processTask(task); - } - if(adapter != null) - adapter.notifyDataSetChanged(); - } - } - } - - private void processTask(final TargetTask task) { - if(task.add) { - System.addOrderedTarget(task.target); - } else { - task.target.setConneced(task.connected); - task.target.setAlias(task.name); - } - } - - } - - } diff --git a/cSploit/src/org/csploit/android/services/receivers/NetworkRadarReceiver.java b/cSploit/src/org/csploit/android/services/receivers/NetworkRadarReceiver.java index 70fb6f64a6..95d44d2397 100644 --- a/cSploit/src/org/csploit/android/services/receivers/NetworkRadarReceiver.java +++ b/cSploit/src/org/csploit/android/services/receivers/NetworkRadarReceiver.java @@ -4,6 +4,7 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.widget.BaseAdapter; import android.widget.Toast; import org.csploit.android.R; @@ -16,6 +17,7 @@ public class NetworkRadarReceiver extends ManagedReceiver { private final IntentFilter filter; + private BaseAdapter targetAdapter; public NetworkRadarReceiver() { filter = new IntentFilter(); @@ -23,6 +25,11 @@ public NetworkRadarReceiver() { filter.addAction(NetworkRadar.NRDR_STARTED); filter.addAction(NetworkRadar.NRDR_START_FAILED); filter.addAction(NetworkRadar.NRDR_STOPPED); + filter.addAction(NetworkRadar.NRDR_CHANGED); + } + + public void setTargetAdapter(BaseAdapter targetAdapter) { + this.targetAdapter = targetAdapter; } @Override @@ -57,6 +64,10 @@ private void notifyIntent(Context context, Intent intent) { case NetworkRadar.NRDR_START_FAILED: Toast.makeText(context, R.string.net_discovery_start_failed, Toast.LENGTH_LONG).show(); break; + case NetworkRadar.NRDR_CHANGED: + if(targetAdapter != null) + targetAdapter.notifyDataSetChanged(); + break; } } } From 29c44b49b514ac6e471f3a751355cb2611758cf9 Mon Sep 17 00:00:00 2001 From: F Date: Tue, 6 Oct 2015 06:11:24 +0800 Subject: [PATCH 16/49] Update strings.xml --- cSploit/res/values-zh-rCN/strings.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cSploit/res/values-zh-rCN/strings.xml b/cSploit/res/values-zh-rCN/strings.xml index 1a7e40cfa5..24143b19ea 100644 --- a/cSploit/res/values-zh-rCN/strings.xml +++ b/cSploit/res/values-zh-rCN/strings.xml @@ -281,6 +281,7 @@ If not, see http://www.gnu.org/licenses/. 关于 选择自定义端口 + 自定义参数 正在初始化 … 正在激活 WiFi 接口 … @@ -431,6 +432,7 @@ If not, see http://www.gnu.org/licenses/. 版本信息 多操作 重点扫描 + 解析主机名 cSploit 已崩溃 发生了一个预料之外的错误,致使应用或其组件强制停止。请发送错误数据来帮助我们修复这个错误。 From 80c612503ead11f2f51007f9baede185edd9c571 Mon Sep 17 00:00:00 2001 From: tux_mind Date: Tue, 6 Oct 2015 01:56:04 +0200 Subject: [PATCH 17/49] should fix #329 --- .../org/csploit/android/ActionActivity.java | 8 +- .../src/org/csploit/android/MainActivity.java | 89 +++++++---- .../android/core/MultiAttackService.java | 5 +- .../src/org/csploit/android/core/System.java | 143 ++++++++---------- .../android/net/metasploit/Session.java | 8 +- .../receivers/NetworkRadarReceiver.java | 19 ++- 6 files changed, 138 insertions(+), 134 deletions(-) diff --git a/cSploit/src/org/csploit/android/ActionActivity.java b/cSploit/src/org/csploit/android/ActionActivity.java index 798f121f1e..360b43988c 100644 --- a/cSploit/src/org/csploit/android/ActionActivity.java +++ b/cSploit/src/org/csploit/android/ActionActivity.java @@ -38,12 +38,14 @@ import org.csploit.android.core.Plugin; import org.csploit.android.core.System; import org.csploit.android.gui.dialogs.FinishDialog; +import org.csploit.android.net.Target; import java.util.ArrayList; public class ActionActivity extends AppCompatActivity { private ArrayList mAvailable = null; private ListView theList; + private Target mTarget; @Override public void onCreate(Bundle savedInstanceState) { @@ -56,8 +58,10 @@ public void onCreate(Bundle savedInstanceState) { setTheme(R.style.AppTheme); super.onCreate(savedInstanceState); - if (System.getTargets() != null && System.getTargets().size() > 0 && System.getCurrentTarget() != null) { - setTitle("cSploit > " + System.getCurrentTarget()); + mTarget = System.getCurrentTarget(); + + if (mTarget != null) { + setTitle("cSploit > " + mTarget); setContentView(R.layout.actions_layout); getSupportActionBar().setDisplayHomeAsUpEnabled(true); theList = (ListView) findViewById(R.id.android_list); diff --git a/cSploit/src/org/csploit/android/MainActivity.java b/cSploit/src/org/csploit/android/MainActivity.java index 872701a80f..680116b833 100644 --- a/cSploit/src/org/csploit/android/MainActivity.java +++ b/cSploit/src/org/csploit/android/MainActivity.java @@ -40,7 +40,7 @@ import android.view.ViewGroup.LayoutParams; import android.widget.AdapterView; import android.widget.AdapterView.OnItemLongClickListener; -import android.widget.ArrayAdapter; +import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.RelativeLayout; @@ -91,6 +91,9 @@ import java.io.IOException; import java.net.NoRouteToHostException; import java.util.ArrayList; +import java.util.List; +import java.util.Observable; +import java.util.Observer; import static org.csploit.android.services.UpdateChecker.UPDATE_AVAILABLE; import static org.csploit.android.services.UpdateChecker.UPDATE_CHECKING; @@ -180,7 +183,7 @@ public void createOnlineLayout() { lv.setOnItemLongClickListener(new OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView parent, View view, int position, long id) { - Target t = System.getTarget(position); + Target t = (Target) mTargetAdapter.getItem(position); if (t.getType() == Target.Type.NETWORK) { if (mActionMode == null) targetAliasPrompt(t); @@ -200,7 +203,7 @@ public boolean onItemLongClick(AdapterView parent, View view, int position, l mWipeReceiver.register(MainActivity.this); mMsfReceiver.register(MainActivity.this); - mRadarReceiver.setTargetAdapter(mTargetAdapter); + mRadarReceiver.setObserver(mTargetAdapter); StartRPCServer(); @@ -317,6 +320,9 @@ public void onItemClick(AdapterView parent, View view, int position, long id) return; } + Target target = (Target) mTargetAdapter.getItem(position); + System.setCurrentTarget(target); + new Thread(new Runnable() { @Override public void run() { @@ -329,7 +335,6 @@ public void run() { } }).start(); - System.setCurrentTarget(position); Toast.makeText(MainActivity.this, getString(R.string.selected_) + System.getCurrentTarget(), Toast.LENGTH_SHORT).show(); @@ -497,9 +502,11 @@ public boolean onActionItemClicked(ActionMode mode, MenuItem item) { case R.id.multi_action: final int[] selected = mTargetAdapter.getSelectedPositions(); if (selected.length > 1) { - commonPlugins = System.getPluginsForTarget(System.getTarget(selected[0])); + Target target = (Target) mTargetAdapter.getItem(selected[0]); + commonPlugins = System.getPluginsForTarget(target); for (int i = 1; i < selected.length; i++) { - ArrayList targetPlugins = System.getPluginsForTarget(System.getTarget(selected[i])); + target = (Target) mTargetAdapter.getItem(selected[i]); + ArrayList targetPlugins = System.getPluginsForTarget(target); ArrayList removeThem = new ArrayList(); for (Plugin p : commonPlugins) { if (!targetPlugins.contains(p)) @@ -533,7 +540,7 @@ public void onChoice(int[] choices) { (new ErrorDialog(getString(R.string.error), "no common actions found", MainActivity.this)).show(); } } else { - targetAliasPrompt(System.getTarget(selected[0])); + targetAliasPrompt((Target) mTargetAdapter.getItem(selected[0])); } mode.finish(); // Action picked, so close the CAB return true; @@ -817,14 +824,24 @@ public void onDestroy() { super.onDestroy(); } - public class TargetAdapter extends ArrayAdapter { - public TargetAdapter() { - super(MainActivity.this, R.layout.target_list_item); - } + public class TargetAdapter extends BaseAdapter implements Runnable, Observer { + + private List list = System.getTargets(); + private boolean isDark = getSharedPreferences("THEME", 0).getBoolean("isDark", false); @Override public int getCount() { - return System.getTargets().size(); + return list.size(); + } + + @Override + public Object getItem(int position) { + return list.get(position); + } + + @Override + public long getItemId(int position) { + return R.layout.target_list_item; } @Override @@ -835,24 +852,21 @@ public View getView(int position, View convertView, ViewGroup parent) { if (row == null) { LayoutInflater inflater = (LayoutInflater) MainActivity.this .getSystemService(Context.LAYOUT_INFLATER_SERVICE); - row = inflater - .inflate(R.layout.target_list_item, parent, false); - if (getSharedPreferences("THEME", 0).getBoolean("isDark", false)) + row = inflater.inflate(R.layout.target_list_item, parent, false); + + if (isDark) row.setBackgroundResource(R.drawable.card_background_dark); + holder = new TargetHolder(); - holder.itemImage = (ImageView) (row != null ? row - .findViewById(R.id.itemIcon) : null); - holder.itemTitle = (TextView) (row != null ? row - .findViewById(R.id.itemTitle) : null); - holder.itemDescription = (TextView) (row != null ? row - .findViewById(R.id.itemDescription) : null); - - if (row != null) - row.setTag(holder); + holder.itemImage = (ImageView) row.findViewById(R.id.itemIcon); + holder.itemTitle = (TextView) row.findViewById(R.id.itemTitle); + holder.itemDescription = (TextView) row.findViewById(R.id.itemDescription); + + row.setTag(holder); } else holder = (TargetHolder) row.getTag(); - Target target = System.getTarget(position); + Target target = list.get(position); if (target.hasAlias()) holder.itemTitle.setText(Html.fromHtml("" @@ -864,8 +878,6 @@ public View getView(int position, View convertView, ViewGroup parent) { holder.itemTitle.setTextColor(getResources().getColor((target.isConnected() ? R.color.app_color : R.color.gray_text))); - if (row != null && (getSharedPreferences("THEME", 0).getBoolean("isDark", false))) - row.setBackgroundResource(R.drawable.card_background_dark); holder.itemTitle.setTypeface(null, Typeface.NORMAL); holder.itemImage.setImageResource(target.getDrawableResourceId()); holder.itemDescription.setText(target.getDescription()); @@ -874,7 +886,7 @@ public View getView(int position, View convertView, ViewGroup parent) { } public void clearSelection() { - for (Target t : System.getTargets()) + for (Target t : list) t.setSelected(false); notifyDataSetChanged(); if (mActionMode != null) @@ -882,7 +894,7 @@ public void clearSelection() { } public void toggleSelection(int position) { - Target t = System.getTarget(position); + Target t = list.get(position); t.setSelected(!t.isSelected()); notifyDataSetChanged(); if (mActionMode != null) { @@ -895,7 +907,7 @@ public void toggleSelection(int position) { public int getSelectedCount() { int i = 0; - for (Target t : System.getTargets()) + for (Target t : list) if (t.isSelected()) i++; return i; @@ -903,7 +915,7 @@ public int getSelectedCount() { public ArrayList getSelected() { ArrayList result = new ArrayList(); - for (Target t : System.getTargets()) + for (Target t : list) if (t.isSelected()) result.add(t); return result; @@ -913,12 +925,23 @@ public int[] getSelectedPositions() { int[] res = new int[getSelectedCount()]; int j = 0; - for (int i = 0; i < System.getTargets().size(); i++) - if (System.getTarget(i).isSelected()) + for (int i = 0; i < list.size(); i++) + if (list.get(i).isSelected()) res[j++] = i; return res; } + @Override + public void update(Observable observable, Object data) { + MainActivity.this.runOnUiThread(this); + } + + @Override + public void run() { + list = System.getTargets(); + notifyDataSetChanged(); + } + class TargetHolder { ImageView itemImage; TextView itemTitle; diff --git a/cSploit/src/org/csploit/android/core/MultiAttackService.java b/cSploit/src/org/csploit/android/core/MultiAttackService.java index e9367d9227..8956a8c6de 100644 --- a/cSploit/src/org/csploit/android/core/MultiAttackService.java +++ b/cSploit/src/org/csploit/android/core/MultiAttackService.java @@ -16,6 +16,7 @@ import org.csploit.android.net.metasploit.MsfExploit; import org.csploit.android.tools.NMap; +import java.util.List; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -264,10 +265,12 @@ protected void onHandleIntent(Intent intent) { mRunning = true; //fetch targets + // TODO: rewrite this service since target index may change + List list = System.getTargets(); Target[] targets = new Target[targetsIndex.length]; for(i =0; i< targetsIndex.length;i++) - targets[i] = System.getTarget(targetsIndex[i]); + targets[i] = list.get(targetsIndex[i]); //fetch tasks for(int stringId : actions) { diff --git a/cSploit/src/org/csploit/android/core/System.java b/cSploit/src/org/csploit/android/core/System.java index 3a0b2dd968..e30d7edf75 100644 --- a/cSploit/src/org/csploit/android/core/System.java +++ b/cSploit/src/org/csploit/android/core/System.java @@ -85,6 +85,7 @@ import java.util.Collection; import java.util.HashMap; import java.util.LinkedList; +import java.util.List; import java.util.Map; import java.util.Vector; import java.util.regex.Matcher; @@ -111,8 +112,8 @@ public class System private static WifiLock mWifiLock = null; private static WakeLock mWakeLock = null; private static Network mNetwork = null; - private static final Vector mTargets = new Vector(); - private static int mCurrentTarget = 0; + private static final List mTargets = new ArrayList<>(); + private static Target mCurrentTarget = null; private static Map mServices = null; private static Map mPorts = null; private static Map mVendors = null; @@ -360,10 +361,12 @@ public static void reloadNetworkMapping(){ gateway.setAlias(mNetwork.getSSID()); device.setAlias(android.os.Build.MODEL); - mTargets.clear(); - mTargets.add(network); - mTargets.add(gateway); - mTargets.add(device); + synchronized (mTargets) { + mTargets.clear(); + mTargets.add(network); + mTargets.add(gateway); + mTargets.add(device); + } mInitialized = true; } @@ -748,12 +751,13 @@ public static String saveSession(String sessionName) throws IOException{ builder.append(SESSION_MAGIC + "\n"); // skip the network target - builder.append(mTargets.size() - 1).append("\n"); - for(Target target : mTargets){ - if(target.getType() != Target.Type.NETWORK) - target.serialize(builder); + synchronized (mTargets) { + builder.append(mTargets.size() - 1).append("\n"); + for (Target target : mTargets) { + if (target.getType() != Target.Type.NETWORK) + target.serialize(builder); + } } - builder.append(mCurrentTarget).append("\n"); session = builder.toString(); @@ -810,16 +814,17 @@ public static void loadSession(String filename) throws Exception{ if(!hasTarget(target)){ System.addOrderedTarget(target); } else{ - for(int j = 0; j < mTargets.size(); j++){ - if(mTargets.get(j) != null && mTargets.get(j).equals(target)){ - mTargets.set(j, target); - break; + synchronized (mTargets) { + for (int j = 0; j < mTargets.size(); j++) { + if (mTargets.get(j) != null && mTargets.get(j).equals(target)) { + mTargets.set(j, target); + break; + } } } } } - mCurrentTarget = Integer.parseInt(reader.readLine()); reader.close(); } catch(Exception e){ @@ -849,10 +854,10 @@ public static void setMsfRpc(RPCClient value){ mMsfRpc = value; // refresh all exploits // NOTE: this method is usually called by the RPCServer Thread, which will not block the UI - for( Target t : getTargets()) { - for( Exploit e : t.getExploits()) { - if(e instanceof MsfExploit) { - ((MsfExploit)e).refresh(); + for (Target t : getTargets()) { // use a copy of the targets to avoid deadlocks. + for (Exploit e : t.getExploits()) { + if (e instanceof MsfExploit) { + ((MsfExploit) e).refresh(); } } } @@ -918,16 +923,18 @@ else if(name.endsWith(".tiff")) } public static void reset() throws SocketException{ - mTargets.clear(); + mCurrentTarget = null; - // local network - mTargets.add(new Target(System.getNetwork())); - // network gateway - mTargets.add(new Target(System.getNetwork().getGatewayAddress(), System.getNetwork().getGatewayHardware())); - // device network address - mTargets.add(new Target(System.getNetwork().getLocalAddress(), System.getNetwork().getLocalHardware())); + synchronized (mTargets) { + mTargets.clear(); - mCurrentTarget = 0; + // local network + mTargets.add(new Target(System.getNetwork())); + // network gateway + mTargets.add(new Target(System.getNetwork().getGatewayAddress(), System.getNetwork().getGatewayHardware())); + // device network address + mTargets.add(new Target(System.getNetwork().getLocalAddress(), System.getNetwork().getLocalHardware())); + } } public static boolean isInitialized(){ @@ -975,41 +982,14 @@ public static Network getNetwork() { return mNetwork; } - public static Vector getTargets(){ - return mTargets; - } - - public static ArrayList getTargetsByType(Target.Type type){ - ArrayList filtered = new ArrayList(); - - for(Target target : mTargets){ - if(target.getType() == type) - filtered.add(target); - } - - return filtered; - } - - public static ArrayList getNetworkEndpoints(){ - ArrayList filtered = new ArrayList(); - - for(Target target : mTargets){ - if(target.getType() == Type.ENDPOINT) - filtered.add(target.getEndpoint()); + /** + * get a copy of the current targets + * @return a copy of the target list + */ + public static List getTargets(){ + synchronized (mTargets) { + return new ArrayList<>(mTargets); } - - return filtered; - } - - public static void addTarget(int index, Target target){ - mTargets.add(index, target); - // update current target index - if(mCurrentTarget >= index) - mCurrentTarget++; - } - - public static void addTarget(Target target){ - mTargets.add(target); } /** @@ -1018,44 +998,39 @@ public static void addTarget(Target target){ * @return true if target is added, false if already present */ public static boolean addOrderedTarget(Target target){ - if(target != null && !hasTarget(target)){ - for(int i = 0; i < getTargets().size(); i++){ - if(getTarget(i).comesAfter(target)){ - addTarget(i, target); + if(target == null) + return false; + + synchronized (mTargets) { + if(mTargets.contains(target)) { + return false; + } + + for (int i = 0; i < mTargets.size(); i++) { + if (mTargets.get(i).comesAfter(target)) { + mTargets.add(i, target); return true; } } - addTarget(target); + mTargets.add(target); return true; } - - return false; - } - - public static Target getTarget(int index){ - return mTargets.get(index); } public static boolean hasTarget(Target target){ - return mTargets.contains(target); - } - - public static void setCurrentTarget(int index){ - mCurrentTarget = index; + synchronized (mTargets) { + return mTargets.contains(target); + } } public static void setCurrentTarget(Target target) { - int index = mTargets.indexOf(target); - if(index != -1) - setCurrentTarget(index); - else - Logger.error("target '" + target + "' not found"); + mCurrentTarget = target; } public static Target getCurrentTarget(){ - return getTarget(mCurrentTarget); + return mCurrentTarget; } public static Target getTargetByAddress(String address){ diff --git a/cSploit/src/org/csploit/android/net/metasploit/Session.java b/cSploit/src/org/csploit/android/net/metasploit/Session.java index cc70eb5e5c..86f1d5a292 100644 --- a/cSploit/src/org/csploit/android/net/metasploit/Session.java +++ b/cSploit/src/org/csploit/android/net/metasploit/Session.java @@ -58,13 +58,7 @@ public Session(Integer id, Map map) throws UnknownHostException { mUuid = (String)map.get("uuid"); // Search my Target - for(Target t : System.getTargets()) { - InetAddress addr = t.getAddress(); - if(addr!=null && addr.getHostAddress().equals(mTargetHost)) { - tTmp = t; - break; - } - } + tTmp = System.getTargetByAddress(mTargetHost); if(tTmp == null) throw new UnknownHostException("no target matches `"+mTargetHost+"'"); mTarget = tTmp; diff --git a/cSploit/src/org/csploit/android/services/receivers/NetworkRadarReceiver.java b/cSploit/src/org/csploit/android/services/receivers/NetworkRadarReceiver.java index 95d44d2397..29afbc9ea9 100644 --- a/cSploit/src/org/csploit/android/services/receivers/NetworkRadarReceiver.java +++ b/cSploit/src/org/csploit/android/services/receivers/NetworkRadarReceiver.java @@ -4,20 +4,24 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; -import android.widget.BaseAdapter; +import android.os.Build; +import android.widget.ArrayAdapter; import android.widget.Toast; +import org.csploit.android.MainActivity; import org.csploit.android.R; -import org.csploit.android.core.ManagedReceiver; +import org.csploit.android.core.*; import org.csploit.android.services.NetworkRadar; +import java.util.Observer; + /** * receive notifications from NetworkRadar */ public class NetworkRadarReceiver extends ManagedReceiver { private final IntentFilter filter; - private BaseAdapter targetAdapter; + private Observer changeObserver; public NetworkRadarReceiver() { filter = new IntentFilter(); @@ -28,8 +32,8 @@ public NetworkRadarReceiver() { filter.addAction(NetworkRadar.NRDR_CHANGED); } - public void setTargetAdapter(BaseAdapter targetAdapter) { - this.targetAdapter = targetAdapter; + public void setObserver(Observer changeObserver) { + this.changeObserver = changeObserver; } @Override @@ -65,8 +69,9 @@ private void notifyIntent(Context context, Intent intent) { Toast.makeText(context, R.string.net_discovery_start_failed, Toast.LENGTH_LONG).show(); break; case NetworkRadar.NRDR_CHANGED: - if(targetAdapter != null) - targetAdapter.notifyDataSetChanged(); + if(changeObserver != null) { + changeObserver.update(null, null); + } break; } } From 82c9ac77bce534499c716fb0c237b86b3ebc21d2 Mon Sep 17 00:00:00 2001 From: fattire Date: Sat, 3 Oct 2015 18:17:45 -0700 Subject: [PATCH 18/49] Replace slides with fades for more coherence (see below) Eventually will want to do complex animations, but for now, I think the dissolves make it feel more like a single program rather than multiple activities sliding in and out. Makes me less dizzy too. Also animate listview items --- cSploit/res/anim/fadein.xml | 6 + cSploit/res/anim/fadeout.xml | 6 + cSploit/res/layout/actions_layout.xml | 15 +-- cSploit/res/layout/plugin_exploit_finder.xml | 67 +++++------ cSploit/res/layout/plugin_mitm.xml | 3 +- cSploit/res/layout/plugin_mitm_hijacker.xml | 95 +++++++-------- .../layout/plugin_mitm_password_sniffer.xml | 74 ++++++------ cSploit/res/layout/plugin_mitm_sniffer.xml | 109 +++++++++--------- cSploit/res/layout/plugin_portscanner.xml | 93 +++++++-------- cSploit/res/layout/plugin_sessions_layout.xml | 47 ++++---- cSploit/res/layout/plugin_traceroute.xml | 65 ++++++----- cSploit/res/layout/target_layout.xml | 3 +- cSploit/res/layout/wifi_scanner.xml | 41 +++---- .../org/csploit/android/ActionActivity.java | 4 +- .../src/org/csploit/android/MainActivity.java | 6 +- .../org/csploit/android/SettingsActivity.java | 5 + .../csploit/android/WifiScannerActivity.java | 3 +- .../android/plugins/ExploitFinder.java | 2 +- .../csploit/android/plugins/Inspector.java | 1 + .../csploit/android/plugins/LoginCracker.java | 1 + .../csploit/android/plugins/PacketForger.java | 2 +- .../csploit/android/plugins/PortScanner.java | 1 + .../csploit/android/plugins/RouterPwn.java | 7 ++ .../org/csploit/android/plugins/Sessions.java | 12 +- .../csploit/android/plugins/Traceroute.java | 1 + .../android/plugins/mitm/DNSSpoofing.java | 2 +- .../csploit/android/plugins/mitm/MITM.java | 9 +- .../android/plugins/mitm/PasswordSniffer.java | 2 +- .../csploit/android/plugins/mitm/Sniffer.java | 2 +- .../plugins/mitm/hijacker/Hijacker.java | 2 +- .../mitm/hijacker/HijackerWebView.java | 3 +- 31 files changed, 367 insertions(+), 322 deletions(-) create mode 100644 cSploit/res/anim/fadein.xml create mode 100644 cSploit/res/anim/fadeout.xml diff --git a/cSploit/res/anim/fadein.xml b/cSploit/res/anim/fadein.xml new file mode 100644 index 0000000000..4510acb6b1 --- /dev/null +++ b/cSploit/res/anim/fadein.xml @@ -0,0 +1,6 @@ + + diff --git a/cSploit/res/anim/fadeout.xml b/cSploit/res/anim/fadeout.xml new file mode 100644 index 0000000000..4f62cbfbf0 --- /dev/null +++ b/cSploit/res/anim/fadeout.xml @@ -0,0 +1,6 @@ + + diff --git a/cSploit/res/layout/actions_layout.xml b/cSploit/res/layout/actions_layout.xml index 346df9944a..55c7aba28c 100644 --- a/cSploit/res/layout/actions_layout.xml +++ b/cSploit/res/layout/actions_layout.xml @@ -2,21 +2,21 @@ + android:paddingTop="8dp"> @@ -25,8 +25,9 @@ android:id="@+id/android_list" android:layout_width="match_parent" android:layout_height="wrap_content" - android:showDividers="none" + android:animateLayoutChanges="true" + android:divider="#00ffffff" android:dividerHeight="6dp" - android:divider="#00ffffff"/> + android:showDividers="none" /> \ No newline at end of file diff --git a/cSploit/res/layout/plugin_exploit_finder.xml b/cSploit/res/layout/plugin_exploit_finder.xml index 85c00b6648..693f03cd88 100644 --- a/cSploit/res/layout/plugin_exploit_finder.xml +++ b/cSploit/res/layout/plugin_exploit_finder.xml @@ -1,45 +1,46 @@ + android:layout_width="fill_parent" + android:layout_height="fill_parent" + android:orientation="vertical" + android:padding="10dp"> + android:id="@+id/searchToggleButton" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:fontFamily="sans-serif-condensed" + android:paddingLeft="24dp" + android:paddingRight="24dp" + android:text="@string/toggle_button" + android:textAllCaps="true" + android:textOff="Start" + android:textOn="Stop" /> + android:id="@+id/searchActivity" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentRight="true" + android:layout_alignTop="@+id/searchToggleButton" + android:visibility="invisible" /> + android:id="@+id/separator" + android:layout_width="fill_parent" + android:layout_height="1dp" + android:layout_below="@+id/searchToggleButton" + android:layout_marginBottom="8dp" + android:layout_marginTop="8dp" + android:background="@android:color/darker_gray" /> + android:id="@id/android:list" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_alignParentBottom="true" + android:layout_alignRight="@+id/searchActivity" + android:layout_below="@+id/separator" + android:animateLayoutChanges="true" /> \ No newline at end of file diff --git a/cSploit/res/layout/plugin_mitm.xml b/cSploit/res/layout/plugin_mitm.xml index ccf189e8c9..50b57f17e5 100644 --- a/cSploit/res/layout/plugin_mitm.xml +++ b/cSploit/res/layout/plugin_mitm.xml @@ -11,5 +11,6 @@ android:layout_width="match_parent" android:layout_height="fill_parent" android:dividerHeight="6dp" - android:divider="#00ffffff" /> + android:divider="#00ffffff" + android:animateLayoutChanges="true" /> \ No newline at end of file diff --git a/cSploit/res/layout/plugin_mitm_hijacker.xml b/cSploit/res/layout/plugin_mitm_hijacker.xml index dd302814dd..58ef2fb6bc 100644 --- a/cSploit/res/layout/plugin_mitm_hijacker.xml +++ b/cSploit/res/layout/plugin_mitm_hijacker.xml @@ -1,61 +1,62 @@ + android:layout_width="fill_parent" + android:layout_height="fill_parent" + android:orientation="vertical" + android:padding="8dp"> + android:id="@+id/hijackToggleButton" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:fontFamily="sans-serif-condensed" + android:paddingLeft="24dp" + android:paddingRight="24dp" + android:text="@string/toggle_button" + android:textAllCaps="true" + android:textOff="Start" + android:textOn="Stop" /> + android:id="@+id/hijackActivity" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentRight="true" + android:layout_alignTop="@+id/hijackToggleButton" + android:visibility="invisible" /> + android:id="@+id/separator" + android:layout_width="fill_parent" + android:layout_height="1dp" + android:layout_below="@+id/hijackToggleButton" + android:layout_marginBottom="8dp" + android:layout_marginTop="8dp" + android:background="@android:color/darker_gray" /> + android:id="@+id/textView" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignLeft="@+id/separator" + android:layout_alignRight="@+id/separator" + android:layout_below="@+id/separator" + android:gravity="center_horizontal" + android:padding="8dp" + android:text="@string/start_hijack" + android:textAppearance="?android:attr/textAppearanceSmall" + android:textColor="@color/gray_text" /> + android:id="@+id/listView" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_alignParentBottom="true" + android:layout_alignRight="@+id/textView" + android:layout_below="@+id/textView" + android:animateLayoutChanges="true" + android:indicatorLeft="?android:attr/expandableListPreferredItemIndicatorLeft" + android:paddingLeft="8dp" + android:paddingRight="8dp" /> \ No newline at end of file diff --git a/cSploit/res/layout/plugin_mitm_password_sniffer.xml b/cSploit/res/layout/plugin_mitm_password_sniffer.xml index 62bd957df7..a782364237 100644 --- a/cSploit/res/layout/plugin_mitm_password_sniffer.xml +++ b/cSploit/res/layout/plugin_mitm_password_sniffer.xml @@ -1,48 +1,50 @@ + android:layout_width="fill_parent" + android:layout_height="fill_parent" + android:orientation="vertical" + android:padding="8dp"> + android:id="@+id/sniffToggleButton" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:fontFamily="sans-serif-condensed" + android:paddingLeft="24dp" + android:paddingRight="24dp" + android:text="@string/toggle_button" + android:textAllCaps="true" + android:textOff="Start" + android:textOn="Stop" /> + android:id="@+id/sniffActivity" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentRight="true" + android:layout_alignTop="@+id/sniffToggleButton" + android:visibility="invisible" /> + android:id="@+id/separator" + android:layout_width="fill_parent" + android:layout_height="1dp" + android:layout_below="@+id/sniffToggleButton" + android:layout_marginBottom="8dp" + android:layout_marginTop="8dp" + android:background="@android:color/darker_gray" /> + android:id="@+id/listView" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_alignParentBottom="true" + android:layout_alignRight="@+id/sniffActivity" + android:layout_below="@+id/separator" + android:animateLayoutChanges="true" + android:indicatorLeft="?android:attr/expandableListPreferredItemIndicatorLeft" + android:paddingLeft="8dp" + + android:paddingRight="8dp" /> \ No newline at end of file diff --git a/cSploit/res/layout/plugin_mitm_sniffer.xml b/cSploit/res/layout/plugin_mitm_sniffer.xml index 26c0595d54..7a7f06fb58 100644 --- a/cSploit/res/layout/plugin_mitm_sniffer.xml +++ b/cSploit/res/layout/plugin_mitm_sniffer.xml @@ -1,70 +1,71 @@ + android:layout_width="fill_parent" + android:layout_height="fill_parent" + android:orientation="vertical" + android:padding="8dp"> + android:id="@+id/sniffToggleButton" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:fontFamily="sans-serif-condensed" + android:paddingLeft="24dp" + android:paddingRight="24dp" + android:text="@string/toggle_button" + android:textAllCaps="true" + android:textOff="@string/start" + android:textOn="@string/stop" /> + android:id="@+id/sniffActivity" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentRight="true" + android:layout_alignTop="@+id/sniffToggleButton" + android:visibility="invisible" /> + android:id="@+id/separator" + android:layout_width="fill_parent" + android:layout_height="1dp" + android:layout_below="@+id/sniffToggleButton" + android:layout_marginBottom="8dp" + android:layout_marginTop="8dp" + android:background="@android:color/darker_gray" /> + android:id="@+id/listView" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_alignParentBottom="true" + android:layout_alignRight="@+id/sniffActivity" + android:layout_below="@+id/separator" + android:animateLayoutChanges="true" + android:indicatorLeft="?android:attr/expandableListPreferredItemIndicatorLeft" + android:paddingLeft="8dp" + android:paddingRight="8dp" /> + android:id="@+id/sortSpinner" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignBottom="@+id/sniffToggleButton" + android:layout_alignTop="@+id/sniffActivity" + android:layout_toLeftOf="@+id/sniffActivity" + android:layout_toRightOf="@+id/textView1" /> + android:id="@+id/textView1" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignBottom="@+id/sniffToggleButton" + android:layout_alignTop="@+id/sortSpinner" + android:layout_toRightOf="@+id/sniffToggleButton" + android:gravity="center_vertical" + android:paddingLeft="24dp" + android:paddingRight="8dp" + android:text="@string/sort" + android:textAppearance="?android:attr/textAppearanceMedium" /> \ No newline at end of file diff --git a/cSploit/res/layout/plugin_portscanner.xml b/cSploit/res/layout/plugin_portscanner.xml index 1b118f4959..826434bf87 100644 --- a/cSploit/res/layout/plugin_portscanner.xml +++ b/cSploit/res/layout/plugin_portscanner.xml @@ -1,79 +1,80 @@ + android:layout_width="fill_parent" + android:layout_height="fill_parent" + android:orientation="vertical" + android:padding="8dp"> + android:id="@+id/scanToggleButton" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:fontFamily="sans-serif-condensed" + android:paddingLeft="24dp" + android:paddingRight="24dp" + android:text="@string/toggle_button" + android:textAllCaps="true" + android:textOff="@string/start" + android:textOn="Stop" /> + android:background="@android:color/darker_gray" /> + android:id="@+id/scanListView" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_alignParentLeft="true" + android:layout_alignParentRight="true" + android:layout_below="@+id/separator" + android:animateLayoutChanges="true" /> + android:id="@+id/scanActivity" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignRight="@+id/scanListView" + android:visibility="invisible" /> + android:visibility="gone" /> diff --git a/cSploit/res/layout/plugin_sessions_layout.xml b/cSploit/res/layout/plugin_sessions_layout.xml index 809086d01b..27e1282d9f 100644 --- a/cSploit/res/layout/plugin_sessions_layout.xml +++ b/cSploit/res/layout/plugin_sessions_layout.xml @@ -1,38 +1,37 @@ + android:id="@+id/layout" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:padding="10dp"> - - + android:id="@android:id/list" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_alignParentBottom="true" + android:layout_alignParentLeft="true" + android:layout_below="@+id/textView" + android:animateLayoutChanges="true" /> + android:layout_alignParentLeft="true" + android:background="@android:color/darker_gray" /> + android:id="@+id/textView" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentLeft="true" + android:layout_alignParentRight="true" + android:layout_alignParentTop="true" + android:padding="5dp" + android:text="@string/sessions_title" + android:textAppearance="?android:attr/textAppearanceSmall" + android:textColor="#ccc" /> \ No newline at end of file diff --git a/cSploit/res/layout/plugin_traceroute.xml b/cSploit/res/layout/plugin_traceroute.xml index 2a27bdf7a0..7deb81c44b 100644 --- a/cSploit/res/layout/plugin_traceroute.xml +++ b/cSploit/res/layout/plugin_traceroute.xml @@ -1,44 +1,45 @@ + android:layout_width="fill_parent" + android:layout_height="fill_parent" + android:orientation="vertical" + android:padding="8dp"> + android:id="@+id/traceToggleButton" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:fontFamily="sans-serif-condensed" + android:paddingLeft="24dp" + android:paddingRight="24dp" + android:text="@string/toggle_button" + android:textAllCaps="true" + android:textOff="Start" + android:textOn="Stop" /> + android:id="@+id/separator" + android:layout_width="fill_parent" + android:layout_height="1dp" + android:layout_below="@+id/traceToggleButton" + android:layout_marginBottom="8dp" + android:layout_marginTop="8dp" + android:background="@android:color/darker_gray" /> + android:id="@+id/traceListView" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_alignParentLeft="true" + android:layout_alignParentRight="true" + android:layout_below="@+id/separator" + android:animateLayoutChanges="true" /> + android:id="@+id/traceActivity" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignRight="@+id/traceListView" + android:visibility="invisible" /> \ No newline at end of file diff --git a/cSploit/res/layout/target_layout.xml b/cSploit/res/layout/target_layout.xml index acfb0543ad..0f07f7ffea 100644 --- a/cSploit/res/layout/target_layout.xml +++ b/cSploit/res/layout/target_layout.xml @@ -12,7 +12,8 @@ android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentLeft="true" - android:layout_below="@+id/textView" /> + android:layout_below="@+id/textView" + android:animateLayoutChanges="true" /> + android:id="@+id/layout" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:padding="8dp"> + android:id="@+id/android:list" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_alignParentBottom="true" + android:layout_alignParentLeft="true" + android:layout_below="@+id/scanStatusText" + android:animateLayoutChanges="true" /> + android:id="@+id/scanStatusText" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignLeft="@+id/android:list" + android:layout_alignParentTop="true" + android:layout_alignRight="@+id/android:list" + android:fontFamily="sans-serif-condensed" + android:padding="8dp" + android:text="Status" + android:textAppearance="?android:attr/textAppearanceSmall" /> \ No newline at end of file diff --git a/cSploit/src/org/csploit/android/ActionActivity.java b/cSploit/src/org/csploit/android/ActionActivity.java index 360b43988c..1fcba75a42 100644 --- a/cSploit/src/org/csploit/android/ActionActivity.java +++ b/cSploit/src/org/csploit/android/ActionActivity.java @@ -83,7 +83,7 @@ public void onItemClick(AdapterView parent, View view, int position, long id) ActionActivity.this, plugin.getClass() )); - overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_left); + overridePendingTransition(R.anim.fadeout, R.anim.fadein); } else plugin.onActionClick(getApplicationContext()); } @@ -113,7 +113,7 @@ public boolean onOptionsItemSelected(MenuItem item) { @Override public void onBackPressed() { super.onBackPressed(); - overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_left); + overridePendingTransition(R.anim.fadeout, R.anim.fadein); } public class ActionsAdapter extends ArrayAdapter { diff --git a/cSploit/src/org/csploit/android/MainActivity.java b/cSploit/src/org/csploit/android/MainActivity.java index 680116b833..1d3b3e685d 100644 --- a/cSploit/src/org/csploit/android/MainActivity.java +++ b/cSploit/src/org/csploit/android/MainActivity.java @@ -330,8 +330,8 @@ public void run() { startActivityForResult(new Intent(MainActivity.this, ActionActivity.class), WIFI_CONNECTION_REQUEST); - overridePendingTransition(R.anim.slide_in_left, - R.anim.slide_out_left); + overridePendingTransition(R.anim.fadeout, R.anim.fadein); + } }).start(); @@ -650,6 +650,7 @@ public void run() { startActivityForResult(new Intent(MainActivity.this, WifiScannerActivity.class), WIFI_CONNECTION_REQUEST); + overridePendingTransition(R.anim.fadeout, R.anim.fadein); return true; case R.id.new_session: @@ -744,6 +745,7 @@ public void onItemSelected(int index) { case R.id.settings: startActivity(new Intent(MainActivity.this, SettingsActivity.class)); + overridePendingTransition(R.anim.fadeout, R.anim.fadein); return true; case R.id.ss_monitor: diff --git a/cSploit/src/org/csploit/android/SettingsActivity.java b/cSploit/src/org/csploit/android/SettingsActivity.java index 362174d831..da0e6d81b5 100644 --- a/cSploit/src/org/csploit/android/SettingsActivity.java +++ b/cSploit/src/org/csploit/android/SettingsActivity.java @@ -575,6 +575,11 @@ public void onDestroy() { } super.onDestroy(); } + } + @Override + public void onBackPressed() { + super.onBackPressed(); + overridePendingTransition(R.anim.fadeout, R.anim.fadein); } } diff --git a/cSploit/src/org/csploit/android/WifiScannerActivity.java b/cSploit/src/org/csploit/android/WifiScannerActivity.java index 81ce8dd865..ad1fdf3195 100644 --- a/cSploit/src/org/csploit/android/WifiScannerActivity.java +++ b/cSploit/src/org/csploit/android/WifiScannerActivity.java @@ -415,7 +415,6 @@ public boolean onOptionsItemSelected(MenuItem item){ } if(item.getItemId() == android.R.id.home){ onBackPressed(); - return true; } else return super.onOptionsItemSelected(item); @@ -435,7 +434,7 @@ public void onBackPressed(){ setResult(RESULT_OK, intent); super.onBackPressed(); - overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_left); + overridePendingTransition(R.anim.fadeout, R.anim.fadein); } public class ScanAdapter extends ArrayAdapter{ diff --git a/cSploit/src/org/csploit/android/plugins/ExploitFinder.java b/cSploit/src/org/csploit/android/plugins/ExploitFinder.java index ea7440f4e8..98a5c4ea1c 100644 --- a/cSploit/src/org/csploit/android/plugins/ExploitFinder.java +++ b/cSploit/src/org/csploit/android/plugins/ExploitFinder.java @@ -384,7 +384,7 @@ public boolean onOptionsItemSelected(MenuItem item) { public void onBackPressed() { setStoppedState(); super.onBackPressed(); - overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_left); + overridePendingTransition(R.anim.fadeout, R.anim.fadein); } @Override diff --git a/cSploit/src/org/csploit/android/plugins/Inspector.java b/cSploit/src/org/csploit/android/plugins/Inspector.java index 716558cfac..c33f61f7b9 100644 --- a/cSploit/src/org/csploit/android/plugins/Inspector.java +++ b/cSploit/src/org/csploit/android/plugins/Inspector.java @@ -184,6 +184,7 @@ public void onClick(View v){ public void onBackPressed(){ setStoppedState(); super.onBackPressed(); + overridePendingTransition(R.anim.fadeout, R.anim.fadein); } @Override diff --git a/cSploit/src/org/csploit/android/plugins/LoginCracker.java b/cSploit/src/org/csploit/android/plugins/LoginCracker.java index 44fa84843d..444e37e4be 100644 --- a/cSploit/src/org/csploit/android/plugins/LoginCracker.java +++ b/cSploit/src/org/csploit/android/plugins/LoginCracker.java @@ -413,6 +413,7 @@ protected void onActivityResult(int request, int result, Intent intent) { public void onBackPressed() { setStoppedState(); super.onBackPressed(); + overridePendingTransition(R.anim.fadeout, R.anim.fadein); } public class ProtocolAdapter extends BaseAdapter implements SpinnerAdapter { diff --git a/cSploit/src/org/csploit/android/plugins/PacketForger.java b/cSploit/src/org/csploit/android/plugins/PacketForger.java index 4e4cf51bd2..8051ebc589 100644 --- a/cSploit/src/org/csploit/android/plugins/PacketForger.java +++ b/cSploit/src/org/csploit/android/plugins/PacketForger.java @@ -289,7 +289,7 @@ private void setStoppedState(String errorMessage) { @Override public void onBackPressed() { setStoppedState(null); - super.onBackPressed(); + overridePendingTransition(R.anim.fadeout, R.anim.fadein); } } diff --git a/cSploit/src/org/csploit/android/plugins/PortScanner.java b/cSploit/src/org/csploit/android/plugins/PortScanner.java index 68ede17319..79a2715e6a 100644 --- a/cSploit/src/org/csploit/android/plugins/PortScanner.java +++ b/cSploit/src/org/csploit/android/plugins/PortScanner.java @@ -352,6 +352,7 @@ public void onInputEntered(String input) { public void onBackPressed() { setStoppedState(); super.onBackPressed(); + overridePendingTransition(R.anim.fadeout, R.anim.fadein); } private class Receiver extends NMap.SynScanReceiver { diff --git a/cSploit/src/org/csploit/android/plugins/RouterPwn.java b/cSploit/src/org/csploit/android/plugins/RouterPwn.java index fb3ac41344..b4f000b3d4 100644 --- a/cSploit/src/org/csploit/android/plugins/RouterPwn.java +++ b/cSploit/src/org/csploit/android/plugins/RouterPwn.java @@ -47,6 +47,13 @@ public boolean isAllowedTarget(Target target){ return target.isRouter(); } + + @Override + public void onBackPressed() { + super.onBackPressed(); + overridePendingTransition(R.anim.fadeout, R.anim.fadein); + } + @Override public void onActionClick(Context context){ try{ diff --git a/cSploit/src/org/csploit/android/plugins/Sessions.java b/cSploit/src/org/csploit/android/plugins/Sessions.java index 8c21c3144f..584fab63ee 100644 --- a/cSploit/src/org/csploit/android/plugins/Sessions.java +++ b/cSploit/src/org/csploit/android/plugins/Sessions.java @@ -77,7 +77,7 @@ public void onChoice(int choice) { case R.string.open_shell: System.setCurrentSession(s); startActivity(new Intent(Sessions.this, Console.class)); - overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_left); + overridePendingTransition(R.anim.fadeout, R.anim.fadein); break; case R.string.show_full_description: String message = s.getDescription(); @@ -126,7 +126,7 @@ public void onItemClick(AdapterView parent, View view, int position, long id) if(s.haveShell()) { System.setCurrentSession(s); startActivity(new Intent(Sessions.this,Console.class)); - overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_left); + overridePendingTransition(R.anim.fadeout, R.anim.fadein); } else { longClickListener.onItemLongClick(parent, view, position, id); } @@ -179,7 +179,7 @@ public void run() { }).start(); } - @Override + @Override public void onRpcChange(RPCClient currentValue) { if(UIThread==null) return; @@ -188,4 +188,10 @@ public void onRpcChange(RPCClient currentValue) { else if(currentValue == null) new FinishDialog(getString(R.string.error),getString(R.string.msfrpc_disconnected),Sessions.this).show(); } + + @Override + public void onBackPressed() { + super.onBackPressed(); + overridePendingTransition(R.anim.fadeout, R.anim.fadein); + } } \ No newline at end of file diff --git a/cSploit/src/org/csploit/android/plugins/Traceroute.java b/cSploit/src/org/csploit/android/plugins/Traceroute.java index 8edf16c5dc..0ad911884f 100644 --- a/cSploit/src/org/csploit/android/plugins/Traceroute.java +++ b/cSploit/src/org/csploit/android/plugins/Traceroute.java @@ -141,6 +141,7 @@ public boolean onOptionsItemSelected(MenuItem item){ public void onBackPressed() { setStoppedState(); super.onBackPressed(); + overridePendingTransition(R.anim.fadeout, R.anim.fadein); } private class Receiver extends NMap.TraceReceiver { diff --git a/cSploit/src/org/csploit/android/plugins/mitm/DNSSpoofing.java b/cSploit/src/org/csploit/android/plugins/mitm/DNSSpoofing.java index 53ac8fc72b..cf0fc832cf 100644 --- a/cSploit/src/org/csploit/android/plugins/mitm/DNSSpoofing.java +++ b/cSploit/src/org/csploit/android/plugins/mitm/DNSSpoofing.java @@ -236,7 +236,7 @@ public void run() { public void onBackPressed() { setStoppedState(); super.onBackPressed(); - overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_left); + overridePendingTransition(R.anim.fadeout, R.anim.fadein); } } diff --git a/cSploit/src/org/csploit/android/plugins/mitm/MITM.java b/cSploit/src/org/csploit/android/plugins/mitm/MITM.java index 5773800725..8497d3cd26 100644 --- a/cSploit/src/org/csploit/android/plugins/mitm/MITM.java +++ b/cSploit/src/org/csploit/android/plugins/mitm/MITM.java @@ -440,7 +440,7 @@ public void onClick(View v) { Sniffer.class ) ); - overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_left); + overridePendingTransition(R.anim.fadeout, R.anim.fadein); } })); @@ -465,7 +465,7 @@ public void onClick(View v){ PasswordSniffer.class ) ); - overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_left); + overridePendingTransition(R.anim.fadeout, R.anim.fadein); } })); @@ -491,7 +491,7 @@ public void onClick(View v) { DNSSpoofing.class ) ); - overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_left); + overridePendingTransition(R.anim.fadeout, R.anim.fadein); } })); @@ -516,7 +516,7 @@ public void onClick(View v){ Hijacker.class ) ); - overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_left); + overridePendingTransition(R.anim.fadeout, R.anim.fadein); } })); @@ -987,5 +987,6 @@ public void onError(String error, int resId){ public void onBackPressed(){ setStoppedState(); super.onBackPressed(); + overridePendingTransition(R.anim.fadeout, R.anim.fadein); } } diff --git a/cSploit/src/org/csploit/android/plugins/mitm/PasswordSniffer.java b/cSploit/src/org/csploit/android/plugins/mitm/PasswordSniffer.java index e2b6ca7804..7fc5552553 100644 --- a/cSploit/src/org/csploit/android/plugins/mitm/PasswordSniffer.java +++ b/cSploit/src/org/csploit/android/plugins/mitm/PasswordSniffer.java @@ -352,6 +352,6 @@ public void run() { public void onBackPressed() { setStoppedState(); super.onBackPressed(); - overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_left); + overridePendingTransition(R.anim.fadeout, R.anim.fadein); } } \ No newline at end of file diff --git a/cSploit/src/org/csploit/android/plugins/mitm/Sniffer.java b/cSploit/src/org/csploit/android/plugins/mitm/Sniffer.java index 20f9f11b46..7d480e92c5 100644 --- a/cSploit/src/org/csploit/android/plugins/mitm/Sniffer.java +++ b/cSploit/src/org/csploit/android/plugins/mitm/Sniffer.java @@ -504,6 +504,6 @@ public void run() { public void onBackPressed(){ setStoppedState(); super.onBackPressed(); - overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_left); + overridePendingTransition(R.anim.fadeout, R.anim.fadein); } } \ No newline at end of file diff --git a/cSploit/src/org/csploit/android/plugins/mitm/hijacker/Hijacker.java b/cSploit/src/org/csploit/android/plugins/mitm/hijacker/Hijacker.java index 00264c37bd..26f24cc2ef 100644 --- a/cSploit/src/org/csploit/android/plugins/mitm/hijacker/Hijacker.java +++ b/cSploit/src/org/csploit/android/plugins/mitm/hijacker/Hijacker.java @@ -622,6 +622,6 @@ public void onItemSelected(int index) { public void onBackPressed() { setStoppedState(); super.onBackPressed(); - overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_left); + overridePendingTransition(R.anim.fadeout, R.anim.fadein); } } diff --git a/cSploit/src/org/csploit/android/plugins/mitm/hijacker/HijackerWebView.java b/cSploit/src/org/csploit/android/plugins/mitm/hijacker/HijackerWebView.java index d2c565ab6f..4834a14400 100644 --- a/cSploit/src/org/csploit/android/plugins/mitm/hijacker/HijackerWebView.java +++ b/cSploit/src/org/csploit/android/plugins/mitm/hijacker/HijackerWebView.java @@ -190,8 +190,7 @@ public void onBackPressed() { mWebView.stopLoading(); super.onBackPressed(); - overridePendingTransition(R.anim.slide_in_left, - R.anim.slide_out_left); + overridePendingTransition(R.anim.fadeout, R.anim.fadein); } } } From de4bcec6463c77519542768c67f6d4b968fa43d3 Mon Sep 17 00:00:00 2001 From: fattire Date: Sat, 3 Oct 2015 01:13:13 -0700 Subject: [PATCH 19/49] Squashed commits of portscan count MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The following from the show_portcount branch was refactored w a few bugs fixed. The results were then squashed into this commit, and brought up to date with develop... and a few bugs fixed and possibly new ones introduced. These changes were originally written by fattire, and tux-mind: Three known bugs: * routers not scanned * manually added hosts are not scanned * ports acquired in other activities don't appear until item is scrolled off then returns... Terrible first pass at showing port on main scanner screen (fat-tire) 58e804fa5fe7956570b5a834b9de2aac0a3ea303 alias can be set to null (tux-mind) 4594543cc2d86553c693a9c728e724dc984263d6 give an handy way to scan without custom ports (tux-mind) 20b5ce677a43ba3cc709b8697f2c8e34127a6c39 fixed some little things <3 (tux-mind) 454f31e417289d68db241df15f647bce9660653b Fixed NPE (tux-mind) 31893e96ca0932dfb8bc283911686c8d10bd0dbb Use labels/badges/whatever for portcount -- no dark theme support yet … (fat-tire) d3ea05bd09b2277d61a7c65f7a4f4c758c3f24cb --- cSploit/res/drawable/rounded_square.xml | 5 ++ cSploit/res/layout/actions_layout.xml | 1 + cSploit/res/layout/target_list_item.xml | 54 +++++++++++++-- cSploit/res/values/strings.xml | 1 + .../src/org/csploit/android/MainActivity.java | 37 +++++++--- .../android/plugins/ExploitFinder.java | 40 ++++++----- .../android/services/NetworkRadar.java | 68 +++++++++++++++---- .../src/org/csploit/android/tools/NMap.java | 4 ++ 8 files changed, 163 insertions(+), 47 deletions(-) create mode 100644 cSploit/res/drawable/rounded_square.xml diff --git a/cSploit/res/drawable/rounded_square.xml b/cSploit/res/drawable/rounded_square.xml new file mode 100644 index 0000000000..50a1009bc5 --- /dev/null +++ b/cSploit/res/drawable/rounded_square.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/cSploit/res/layout/actions_layout.xml b/cSploit/res/layout/actions_layout.xml index 55c7aba28c..0951e26046 100644 --- a/cSploit/res/layout/actions_layout.xml +++ b/cSploit/res/layout/actions_layout.xml @@ -29,5 +29,6 @@ android:divider="#00ffffff" android:dividerHeight="6dp" android:showDividers="none" /> + android:divider="#00ffffff" /> \ No newline at end of file diff --git a/cSploit/res/layout/target_list_item.xml b/cSploit/res/layout/target_list_item.xml index 6c28880202..326f459f3d 100644 --- a/cSploit/res/layout/target_list_item.xml +++ b/cSploit/res/layout/target_list_item.xml @@ -20,19 +20,65 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" + android:layout_toLeftOf="@+id/portCountLayout" android:layout_toRightOf="@id/itemIcon" - android:textColor="@color/app_color" + android:layout_toStartOf="@+id/portCountLayout" android:fontFamily="sans-serif-light" + android:textColor="@color/app_color" android:textSize="16sp" /> + + + + + + + + \ No newline at end of file diff --git a/cSploit/res/values/strings.xml b/cSploit/res/values/strings.xml index 21e3e5c0f4..35f182f7d9 100644 --- a/cSploit/res/values/strings.xml +++ b/cSploit/res/values/strings.xml @@ -9,6 +9,7 @@ Enter redirection details below: Address Port + Ports Target No information Services diff --git a/cSploit/src/org/csploit/android/MainActivity.java b/cSploit/src/org/csploit/android/MainActivity.java index 1d3b3e685d..7a13603ba5 100644 --- a/cSploit/src/org/csploit/android/MainActivity.java +++ b/cSploit/src/org/csploit/android/MainActivity.java @@ -27,6 +27,7 @@ import android.net.Uri; import android.os.Build; import android.os.Bundle; +import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.support.v7.view.ActionMode; import android.text.Html; @@ -42,6 +43,7 @@ import android.widget.AdapterView.OnItemLongClickListener; import android.widget.BaseAdapter; import android.widget.ImageView; +import android.widget.LinearLayout; import android.widget.ListView; import android.widget.RelativeLayout; import android.widget.TextView; @@ -135,6 +137,7 @@ private void createUpdateStatusText() { layout.addView(mUpdateStatus); } + private void createUpdateLayout() { lv.setVisibility(View.GONE); @@ -860,30 +863,40 @@ public View getView(int position, View convertView, ViewGroup parent) { row.setBackgroundResource(R.drawable.card_background_dark); holder = new TargetHolder(); - holder.itemImage = (ImageView) row.findViewById(R.id.itemIcon); - holder.itemTitle = (TextView) row.findViewById(R.id.itemTitle); - holder.itemDescription = (TextView) row.findViewById(R.id.itemDescription); - - row.setTag(holder); + holder.itemImage = (ImageView) (row != null ? row + .findViewById(R.id.itemIcon) : null); + holder.itemTitle = (TextView) (row != null ? row + .findViewById(R.id.itemTitle) : null); + holder.itemDescription = (TextView) (row != null ? row + .findViewById(R.id.itemDescription) : null); + holder.portCount = (TextView) (row != null ? row + .findViewById(R.id.portCount) : null); + holder.portCountLayout = (LinearLayout) (row != null ? row + .findViewById(R.id.portCountLayout) : null); + if (row != null) + row.setTag(holder); } else holder = (TargetHolder) row.getTag(); - Target target = list.get(position); + final Target target = list.get(position); - if (target.hasAlias()) + if (target.hasAlias()){ holder.itemTitle.setText(Html.fromHtml("" + target.getAlias() + " ( " + target.getDisplayAddress() + " )")); - - else + } else { holder.itemTitle.setText(target.toString()); - - holder.itemTitle.setTextColor(getResources().getColor((target.isConnected() ? R.color.app_color : R.color.gray_text))); + } + holder.itemTitle.setTextColor(ContextCompat.getColor(getApplicationContext(), (target.isConnected() ? R.color.app_color : R.color.gray_text))); holder.itemTitle.setTypeface(null, Typeface.NORMAL); holder.itemImage.setImageResource(target.getDrawableResourceId()); holder.itemDescription.setText(target.getDescription()); + int openedPorts = target.getOpenPorts().size(); + + holder.portCount.setText(String.format("%d", openedPorts)); + holder.portCountLayout.setVisibility(openedPorts < 1 ? View.GONE : View.VISIBLE); return row; } @@ -948,6 +961,8 @@ class TargetHolder { ImageView itemImage; TextView itemTitle; TextView itemDescription; + TextView portCount; + LinearLayout portCountLayout; } } diff --git a/cSploit/src/org/csploit/android/plugins/ExploitFinder.java b/cSploit/src/org/csploit/android/plugins/ExploitFinder.java index 98a5c4ea1c..63575ab949 100644 --- a/cSploit/src/org/csploit/android/plugins/ExploitFinder.java +++ b/cSploit/src/org/csploit/android/plugins/ExploitFinder.java @@ -65,25 +65,29 @@ import static org.csploit.android.net.metasploit.MsfExploit.Ranking; public class ExploitFinder extends Plugin { - private ToggleButton mSearchToggleButton = null; - private ProgressBar mSearchProgress = null; - private ListView mListView = null; - private Future job = null; - private ExploitAdapter mAdapter = null; - - private static ExploitFinder UIThread = null; - - public class ExploitAdapter extends ArrayAdapter { - class ExploitHolder { - ImageView itemImage; - TextView itemTitle; - TextView itemDescription; - TextView itemRanking; - } - public ExploitAdapter() { - super(ExploitFinder.this, R.layout.plugin_exploit_finder_item, (List) System.getCurrentExploits()); - } + private ToggleButton mSearchToggleButton = null; + private ProgressBar mSearchProgress = null; + private ListView mListView = null; + private Future job = null; + private ExploitAdapter mAdapter = null; + + private static ExploitFinder UIThread = null; + + public class ExploitAdapter extends ArrayAdapter { + + class ExploitHolder { + ImageView itemImage; + TextView itemTitle; + TextView itemDescription; + TextView itemRanking; + } + + public ExploitAdapter() { + super(ExploitFinder.this, R.layout.plugin_exploit_finder_item, (List) System.getCurrentExploits()); + } + + @Override public View getView(int position, View convertView, ViewGroup parent) { diff --git a/cSploit/src/org/csploit/android/services/NetworkRadar.java b/cSploit/src/org/csploit/android/services/NetworkRadar.java index e8baadcdbb..0a466c97bd 100644 --- a/cSploit/src/org/csploit/android/services/NetworkRadar.java +++ b/cSploit/src/org/csploit/android/services/NetworkRadar.java @@ -8,7 +8,11 @@ import org.csploit.android.core.Logger; import org.csploit.android.core.System; import org.csploit.android.core.ChildManager; +import org.csploit.android.net.Endpoint; +import org.csploit.android.net.Network; import org.csploit.android.net.Target; +import org.csploit.android.tools.NMap; +import org.csploit.android.tools.NetworkRadar.HostReceiver; import java.net.InetAddress; @@ -64,36 +68,57 @@ public void buildMenuItem(MenuItem item) { item.setEnabled(System.getTools().networkRadar.isEnabled()); } - private class Receiver extends org.csploit.android.tools.NetworkRadar.HostReceiver { + private void onNewHostFound(Target target) { + try { + System.getTools().nmap.synScan(target, new ScanReceiver(target)); + } catch (ChildManager.ChildNotStartedException e) { + System.errorLogging(e); + } + } + + private class Receiver extends HostReceiver { @Override public void onHostFound(byte[] macAddress, InetAddress ipAddress, String name) { Target t; boolean notify = false; + boolean justFound; t = System.getTargetByAddress(ipAddress); + justFound = t == null; - if(t==null) { + if(justFound) { t = new Target(ipAddress, macAddress); - - System.addOrderedTarget(t); - - notify = true; - } - - if( !t.isConnected() ) { - t.setConneced(true); - notify = true; - } - - if (name != null && !name.equals(t.getAlias())) { t.setAlias(name); + System.addOrderedTarget(t); notify = true; + } else { + if (!t.isConnected()) { + t.setConneced(true); + notify = true; + } + + if (name != null && !name.equals(t.getAlias())) { + t.setAlias(name); + notify = true; + } + + //TODO: remove me ( and imports ) + Endpoint e = new Endpoint(ipAddress, macAddress); + if(!e.equals(t.getEndpoint())) { + Logger.warning( + String.format("target '%s' changed it's mac address from '%s' to '%s'", + t.toString(), t.getEndpoint().getHardwareAsString(), e.getHardwareAsString())); + } } if(notify) { sendIntent(NRDR_CHANGED); } + + if(justFound) { + onNewHostFound(t); + } } @Override @@ -120,4 +145,19 @@ public void onDeath(int signal) { sendIntent(NRDR_STOPPED); } } + + private class ScanReceiver extends NMap.SynScanReceiver { + + private final Target target; + + public ScanReceiver(Target target) { + this.target = target; + } + + @Override + public void onPortFound(int port, String protocol) { + target.addOpenPort(port, Network.Protocol.fromString(protocol)); + sendIntent(NRDR_CHANGED); + } + } } diff --git a/cSploit/src/org/csploit/android/tools/NMap.java b/cSploit/src/org/csploit/android/tools/NMap.java index af76f4e756..2486e1af08 100644 --- a/cSploit/src/org/csploit/android/tools/NMap.java +++ b/cSploit/src/org/csploit/android/tools/NMap.java @@ -142,6 +142,10 @@ public Child synScan( Target target, SynScanReceiver receiver, String custom ) t return super.async( command, receiver ); } + public Child synScan( Target target, SynScanReceiver receiver) throws ChildManager.ChildNotStartedException { + return synScan(target, receiver, null); + } + public Child customScan( Target target, SynScanReceiver receiver, String custom ) throws ChildManager.ChildNotStartedException { String command = "-vvv "; From d12c2d558422c94b0ddafe3fcebcaeef02301fd3 Mon Sep 17 00:00:00 2001 From: fattire Date: Mon, 5 Oct 2015 21:27:34 -0700 Subject: [PATCH 20/49] Make mini-browser better - fixes for #373 * use preferred cookiemanager stuff for new non-deprecated api * fix pinch-to-zoom * add URL bar * add status/progress bar Quick and dirty. Still not 100%, but better. --- .../layout/plugin_mitm_hijacker_webview.xml | 42 ++++++-- .../mitm/hijacker/HijackerWebView.java | 101 +++++++++++++++--- 2 files changed, 121 insertions(+), 22 deletions(-) diff --git a/cSploit/res/layout/plugin_mitm_hijacker_webview.xml b/cSploit/res/layout/plugin_mitm_hijacker_webview.xml index 2c0acd2f24..fee5544226 100644 --- a/cSploit/res/layout/plugin_mitm_hijacker_webview.xml +++ b/cSploit/res/layout/plugin_mitm_hijacker_webview.xml @@ -1,14 +1,40 @@ + android:layout_width="fill_parent" + android:layout_height="fill_parent" + android:orientation="vertical"> + + + + + android:id="@+id/webView" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_alignParentEnd="true" + android:layout_alignParentBottom="true" + android:layout_alignParentRight="true" + android:layout_below="@+id/url" /> \ No newline at end of file diff --git a/cSploit/src/org/csploit/android/plugins/mitm/hijacker/HijackerWebView.java b/cSploit/src/org/csploit/android/plugins/mitm/hijacker/HijackerWebView.java index 4834a14400..863b9da859 100644 --- a/cSploit/src/org/csploit/android/plugins/mitm/hijacker/HijackerWebView.java +++ b/cSploit/src/org/csploit/android/plugins/mitm/hijacker/HijackerWebView.java @@ -18,20 +18,29 @@ */ package org.csploit.android.plugins.mitm.hijacker; +import android.content.Context; import android.content.SharedPreferences; +import android.os.Build; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Patterns; +import android.view.KeyEvent; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; +import android.view.View; import android.view.Window; +import android.view.inputmethod.EditorInfo; +import android.view.inputmethod.InputMethodManager; import android.webkit.CookieManager; import android.webkit.CookieSyncManager; import android.webkit.WebChromeClient; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; +import android.widget.EditText; +import android.widget.ProgressBar; +import android.widget.TextView; import org.csploit.android.R; import org.csploit.android.core.System; @@ -43,6 +52,8 @@ public class HijackerWebView extends AppCompatActivity { private WebSettings mSettings = null; private WebView mWebView = null; + private ProgressBar mProgressBar = null; + private EditText mURLet = null; @Override protected void onCreate(Bundle savedInstanceState) { @@ -58,42 +69,88 @@ protected void onCreate(Bundle savedInstanceState) { setTitle(System.getCurrentTarget() + " > MITM > Session Hijacker"); setContentView(R.layout.plugin_mitm_hijacker_webview); getSupportActionBar().setDisplayHomeAsUpEnabled(true); - setSupportProgressBarIndeterminateVisibility(false); mWebView = (WebView) findViewById(R.id.webView); + mWebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); + mProgressBar = (ProgressBar) findViewById(R.id.webprogress); + mURLet = (EditText) findViewById(R.id.url); + mProgressBar.setVisibility(View.GONE); + mProgressBar.setMax(100); mSettings = mWebView.getSettings(); mSettings.setJavaScriptEnabled(true); + mSettings.setJavaScriptCanOpenWindowsAutomatically(true); mSettings.setBuiltInZoomControls(true); mSettings.setAppCacheEnabled(false); mSettings.setUserAgentString(DEFAULT_USER_AGENT); + mSettings.setUseWideViewPort(true); + + mURLet.setOnEditorActionListener(new EditText.OnEditorActionListener() { + @Override + public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { + if (actionId == EditorInfo.IME_ACTION_DONE || actionId == EditorInfo.IME_ACTION_NEXT) { + mWebView.loadUrl(mURLet.getText().toString()); + InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(mWebView.getWindowToken(), 0); + mWebView.requestFocus(); + return true; + } + return false; + } + }); + + mURLet.setOnKeyListener(new EditText.OnKeyListener() { + @Override + public boolean onKey(View v, int keyCode, KeyEvent event) { + if (event.getAction() == KeyEvent.ACTION_DOWN + && event.getKeyCode() == KeyEvent.KEYCODE_ENTER) { + mWebView.loadUrl(mURLet.getText().toString()); + InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(mWebView.getWindowToken(), 0); + mWebView.requestFocus(); + return true; + } + return false; + } + }); mWebView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); + mURLet.setText(url); return true; } }); mWebView.setWebChromeClient(new WebChromeClient() { + public void onProgressChanged(WebView view, int progress) { - if (mWebView != null) + if ((mWebView != null) && (mURLet != null) && (progress == 0)); { getSupportActionBar().setSubtitle(mWebView.getUrl()); + mURLet.setText(mWebView.getUrl()); + } - setSupportProgressBarIndeterminateVisibility(true); - // Normalize our progress along the progress bar's scale - int mmprogress = (Window.PROGRESS_END - Window.PROGRESS_START) - / 100 * progress; - setProgress(mmprogress); + if (mProgressBar != null) { + mProgressBar.setVisibility(View.VISIBLE); + // Normalize our progress along the progress bar's scale - if (progress == 100) - setSupportProgressBarIndeterminateVisibility(false); + mProgressBar.setProgress(progress); + + if (progress == 100) { + mProgressBar.setVisibility(View.GONE); + } + } } }); - CookieSyncManager.createInstance(this); - CookieManager.getInstance().removeAllCookie(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + CookieManager cm = CookieManager.getInstance(); + cm.flush(); + } else { + CookieSyncManager.createInstance(this); + CookieManager.getInstance().removeAllCookie(); + } Session session = (Session) System.getCustomData(); if (session != null) { @@ -108,7 +165,12 @@ public void onProgressChanged(WebView view, int progress) { CookieManager.getInstance().setCookie(domain, rawcookie); } - CookieSyncManager.getInstance().sync(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + CookieManager cm = CookieManager.getInstance(); + cm.flush(); + } else { + CookieSyncManager.getInstance().startSync(); + } if (session.mUserAgent != null && session.mUserAgent.isEmpty() == false) @@ -122,6 +184,7 @@ public void onProgressChanged(WebView view, int progress) { url += domain; mWebView.loadUrl(url); + mWebView.requestFocus(); } } @@ -129,14 +192,24 @@ public void onProgressChanged(WebView view, int progress) { protected void onResume() { super.onResume(); - CookieSyncManager.getInstance().startSync(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + CookieManager cm = CookieManager.getInstance(); + cm.flush(); + } else { + CookieSyncManager.getInstance().startSync(); + } } @Override protected void onPause() { super.onPause(); - CookieSyncManager.getInstance().stopSync(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + CookieManager cm = CookieManager.getInstance(); + cm.flush(); + } else { + CookieSyncManager.getInstance().startSync(); + } } @Override From a048d52f0397df8e027581f40d981202e96a3016 Mon Sep 17 00:00:00 2001 From: tux_mind Date: Tue, 6 Oct 2015 10:36:47 +0200 Subject: [PATCH 21/49] partially fixes #372 --- .../csploit/android/services/UpdateService.java | 2 +- .../org/csploit/android/update/ApkUpdate.java | 16 +++++++++++++--- .../src/org/csploit/android/update/Update.java | 11 ++++++++--- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/cSploit/src/org/csploit/android/services/UpdateService.java b/cSploit/src/org/csploit/android/services/UpdateService.java index 74a9419a8b..1a24cd2e22 100644 --- a/cSploit/src/org/csploit/android/services/UpdateService.java +++ b/cSploit/src/org/csploit/android/services/UpdateService.java @@ -274,7 +274,7 @@ private void finishNotification() { Intent contentIntent; errorOccurred = mCurrentTask.errorOccurred; - contentIntent = mCurrentTask.contentIntent; + contentIntent = mCurrentTask.haveIntent() ? mCurrentTask.buildIntent() : null; if(errorOccurred || contentIntent==null){ Logger.debug("deleting notifications"); diff --git a/cSploit/src/org/csploit/android/update/ApkUpdate.java b/cSploit/src/org/csploit/android/update/ApkUpdate.java index 267dd21c03..7e20e373e0 100644 --- a/cSploit/src/org/csploit/android/update/ApkUpdate.java +++ b/cSploit/src/org/csploit/android/update/ApkUpdate.java @@ -19,9 +19,19 @@ public ApkUpdate(Context context, String url, String version) { this.version = version; name = String.format("cSploit-%s.apk", version); path = String.format("%s/%s", System.getStoragePath(), name); - contentIntent = new Intent(Intent.ACTION_VIEW); - contentIntent.setDataAndType(Uri.fromFile(new File(path)), "application/vnd.android.package-archive"); - contentIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); prompt = String.format(context.getString(R.string.new_apk_found), version); } + + @Override + public boolean haveIntent() { + return true; + } + + @Override + public Intent buildIntent() { + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setDataAndType(Uri.fromFile(new File(path)), "application/vnd.android.package-archive"); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + return intent; + } } diff --git a/cSploit/src/org/csploit/android/update/Update.java b/cSploit/src/org/csploit/android/update/Update.java index 90a6291c54..c7dcfc2049 100644 --- a/cSploit/src/org/csploit/android/update/Update.java +++ b/cSploit/src/org/csploit/android/update/Update.java @@ -21,8 +21,6 @@ public abstract class Update implements Serializable { compression; public archiveAlgorithm archiver; - public Intent - contentIntent; public boolean skipRoot, fixShebang, @@ -42,11 +40,18 @@ public void reset() { version = null; compression = null; archiver = null; - contentIntent = null; wipeOnFail = fixShebang = errorOccurred = skipRoot = false; } } + public boolean haveIntent() { + return false; + } + + public Intent buildIntent() { + return null; + } + public enum compressionAlgorithm { none, gzip, From 21187111a5d24ba4c21f9a1577edf64d110e40b0 Mon Sep 17 00:00:00 2001 From: tux_mind Date: Tue, 6 Oct 2015 11:42:17 +0200 Subject: [PATCH 22/49] fixed #372 --- cSploit/src/org/csploit/android/helpers/NetworkHelper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cSploit/src/org/csploit/android/helpers/NetworkHelper.java b/cSploit/src/org/csploit/android/helpers/NetworkHelper.java index fe2f356345..11c8ab981f 100644 --- a/cSploit/src/org/csploit/android/helpers/NetworkHelper.java +++ b/cSploit/src/org/csploit/android/helpers/NetworkHelper.java @@ -10,7 +10,7 @@ public final class NetworkHelper { * @return the OUI integer */ public static int getOUICode(byte[] macAddress) { - return (macAddress[2] << 16) & (macAddress[1] << 8) & macAddress[0]; + return (macAddress[0] << 16) | (macAddress[1] << 8) | macAddress[2]; } /** From 6b208e40483df5ed76af38f2b1965cd237f7c760 Mon Sep 17 00:00:00 2001 From: Ilya Date: Tue, 6 Oct 2015 20:01:00 +1000 Subject: [PATCH 23/49] Update strings.xml Added 3 new strings. --- cSploit/res/values-ru/strings.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cSploit/res/values-ru/strings.xml b/cSploit/res/values-ru/strings.xml index c11cb045ca..28c8dc1587 100644 --- a/cSploit/res/values-ru/strings.xml +++ b/cSploit/res/values-ru/strings.xml @@ -280,6 +280,7 @@ О программе Выбрать свои порты + Свои параметры Инициализация … Активация WiFi интерфейса … @@ -496,4 +497,6 @@ Хороший Отличный Превосходный + Выбрать цель + Выбрать %s ? From 23b7f3ffb6068df42d022cda44346d9d5eb296fe Mon Sep 17 00:00:00 2001 From: tux_mind Date: Tue, 6 Oct 2015 12:21:04 +0200 Subject: [PATCH 24/49] fixed #375 --- cSploit/src/org/csploit/android/services/NetworkRadar.java | 2 +- cSploit/src/org/csploit/android/tools/NetworkRadar.java | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/cSploit/src/org/csploit/android/services/NetworkRadar.java b/cSploit/src/org/csploit/android/services/NetworkRadar.java index e8baadcdbb..c6da053144 100644 --- a/cSploit/src/org/csploit/android/services/NetworkRadar.java +++ b/cSploit/src/org/csploit/android/services/NetworkRadar.java @@ -61,7 +61,7 @@ public void run() { @Override public void buildMenuItem(MenuItem item) { item.setTitle(isRunning() ? R.string.stop_monitor : R.string.start_monitor); - item.setEnabled(System.getTools().networkRadar.isEnabled()); + item.setEnabled(System.getTools().networkRadar.isEnabled() && System.getNetwork() != null); } private class Receiver extends org.csploit.android.tools.NetworkRadar.HostReceiver { diff --git a/cSploit/src/org/csploit/android/tools/NetworkRadar.java b/cSploit/src/org/csploit/android/tools/NetworkRadar.java index 21a31931bf..2fa4a54ef2 100644 --- a/cSploit/src/org/csploit/android/tools/NetworkRadar.java +++ b/cSploit/src/org/csploit/android/tools/NetworkRadar.java @@ -56,6 +56,10 @@ public void onEvent(Event e) { public Child start(HostReceiver receiver) throws ChildManager.ChildNotStartedException { String ifName; + if(System.getNetwork() == null) { + throw new ChildManager.ChildNotStartedException(); + } + ifName = System.getNetwork().getInterface().getDisplayName(); return async(ifName, receiver); From 5e70f942656cf8d988e2fb470735e21b583fa8f7 Mon Sep 17 00:00:00 2001 From: tux_mind Date: Tue, 6 Oct 2015 12:21:18 +0200 Subject: [PATCH 25/49] removed unused imports --- cSploit/src/org/csploit/android/core/System.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/cSploit/src/org/csploit/android/core/System.java b/cSploit/src/org/csploit/android/core/System.java index e30d7edf75..1eef87dc0f 100644 --- a/cSploit/src/org/csploit/android/core/System.java +++ b/cSploit/src/org/csploit/android/core/System.java @@ -44,13 +44,11 @@ import org.csploit.android.gui.dialogs.FatalDialog; import org.csploit.android.helpers.NetworkHelper; import org.csploit.android.helpers.ThreadHelper; -import org.csploit.android.net.Endpoint; import org.csploit.android.net.GitHubParser; import org.csploit.android.net.Network; import org.csploit.android.net.RemoteReader; import org.csploit.android.net.Target; import org.csploit.android.net.Target.Exploit; -import org.csploit.android.net.Target.Type; import org.csploit.android.net.http.proxy.HTTPSRedirector; import org.csploit.android.net.http.proxy.Proxy; import org.csploit.android.net.http.server.Server; @@ -87,7 +85,6 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; -import java.util.Vector; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.zip.GZIPInputStream; From e927980ccf4d748be2967cf0b94fc052a62f007a Mon Sep 17 00:00:00 2001 From: tux_mind Date: Tue, 6 Oct 2015 12:29:09 +0200 Subject: [PATCH 26/49] fixes #374 --- cSploit/src/org/csploit/android/SettingsActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cSploit/src/org/csploit/android/SettingsActivity.java b/cSploit/src/org/csploit/android/SettingsActivity.java index 362174d831..6cd150e197 100644 --- a/cSploit/src/org/csploit/android/SettingsActivity.java +++ b/cSploit/src/org/csploit/android/SettingsActivity.java @@ -50,7 +50,7 @@ public class SettingsActivity extends AppCompatActivity { - public static final int SETTINGS_DONE = 101285; + public static final int SETTINGS_DONE = 1285; public static final String SETTINGS_WIPE_START = "SettingsActivity.WIPE_START"; public static final String SETTINGS_WIPE_DIR = "SettingsActivity.data.WIPE_DIR"; public static final String SETTINGS_WIPE_DONE = "SettingsActivity.WIPE_DONE"; From 804c0b92c40a3fd6503d40a3c2c9b95964a841d3 Mon Sep 17 00:00:00 2001 From: tux_mind Date: Tue, 6 Oct 2015 12:35:14 +0200 Subject: [PATCH 27/49] fixed #377 --- .../org/csploit/android/net/http/RequestParser.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/cSploit/src/org/csploit/android/net/http/RequestParser.java b/cSploit/src/org/csploit/android/net/http/RequestParser.java index e3782ee7a9..f189ac0a16 100644 --- a/cSploit/src/org/csploit/android/net/http/RequestParser.java +++ b/cSploit/src/org/csploit/android/net/http/RequestParser.java @@ -20,6 +20,7 @@ import android.util.Patterns; +import org.csploit.android.core.Logger; import org.csploit.android.net.ByteBuffer; import java.net.HttpCookie; @@ -356,7 +357,14 @@ public static ArrayList parseRawCookie(String rawCookie){ String cookieName = rawCookieNameAndValue[0].trim(); String cookieValue = rawCookieNameAndValue[1].trim(); - HttpCookie cookie = new HttpCookie(cookieName, cookieValue); + HttpCookie cookie; + + try { + cookie = new HttpCookie(cookieName, cookieValue); + } catch (IllegalArgumentException e){ + Logger.error("Invalid cookie. name=" + cookieName + ":" + cookieValue); + continue; + } for(int i = 1; i < rawCookieParams.length; i++){ String rawCookieParamNameAndValue[] = rawCookieParams[i].trim().split("="); From 6fb3bbfad937a4ace2a42f192b94493684c79708 Mon Sep 17 00:00:00 2001 From: tux_mind Date: Tue, 6 Oct 2015 14:26:44 +0200 Subject: [PATCH 28/49] WiP for #365 --- cSploit/res/values-ar/strings.xml | 13 ------------- cSploit/res/values-cs/strings.xml | 13 ------------- cSploit/res/values-de/strings.xml | 3 --- cSploit/res/values-el/strings.xml | 3 --- cSploit/res/values-es/strings.xml | 13 ------------- cSploit/res/values-fi/strings.xml | 3 --- cSploit/res/values-fr/strings.xml | 3 --- cSploit/res/values-hr/strings.xml | 13 ------------- cSploit/res/values-it/strings.xml | 3 --- cSploit/res/values-nl/strings.xml | 3 --- cSploit/res/values-no/strings.xml | 13 ------------- cSploit/res/values-pl/strings.xml | 13 ------------- cSploit/res/values-pt/strings.xml | 13 ------------- cSploit/res/values-ru/strings.xml | 13 ------------- cSploit/res/values-tr/strings.xml | 13 ------------- cSploit/res/values-zh-rCN/strings.xml | 13 ------------- cSploit/res/values/strings.xml | 12 +++++++----- cSploit/src/org/csploit/android/MainActivity.java | 4 +++- 18 files changed, 10 insertions(+), 154 deletions(-) diff --git a/cSploit/res/values-ar/strings.xml b/cSploit/res/values-ar/strings.xml index 4268e9dec2..91c93812ba 100644 --- a/cSploit/res/values-ar/strings.xml +++ b/cSploit/res/values-ar/strings.xml @@ -1,5 +1,4 @@ - cSploit إعدادات cSploit وهناك مشكلة حدثت، بإرسال السجل لمطور التطبيق @@ -22,7 +21,6 @@ بروتوكول cSploit - جناح اختراق شبكة الروبوت. Copyleft of Simone Margaritelli aka evilsocket. - http://www.csploit.org/ Disclaimer @@ -80,7 +78,6 @@ اضغط مرة أخرى لإغلاق هذا التطبيق. Selected  - https://github.com/cSploit/android/issues/new أي ملف الجلسة الاطلاع على بطاقة الذاكرة الرقمية المؤمنة. تحديد ملف الجلسة من بطاقة الذاكرة الرقمية المؤمنة: حدد الدورة @@ -364,22 +361,12 @@ CVE both CVE and OSVDB - - OSVDB - CVE - BOTH - Search exploits MSF compatible only on exploitdb only from both exploitdb and MSF - - MSF - EXDB - BOTH - wide host scan scan for hosts outside the network mask Advanced diff --git a/cSploit/res/values-cs/strings.xml b/cSploit/res/values-cs/strings.xml index c56ca7b05f..00ae9776c3 100644 --- a/cSploit/res/values-cs/strings.xml +++ b/cSploit/res/values-cs/strings.xml @@ -1,5 +1,4 @@ - cSploit Nastavení cSploit Ooooops! Něco je špatně, ale zpráva bude odeslána mému vývojáři pro opravu chyby:) @@ -24,7 +23,6 @@ Protokol cSploit - An Android network penetration suite. Copyleft of Simone Margaritelli aka evilsocket. - http://www.csploit.org/ Záruka @@ -82,7 +80,6 @@ Pro ukončení aplikace stiskněte znovu ZPĚT Vybráno  - https://github.com/cSploit/android/issues/new Na SD kartě nebyl nalezen žádný spoubor ze sezení Vyberte soubor ze sezení na SD kartě : Vyberte sezení @@ -362,22 +359,12 @@ CVE oboje - CVE i OSVDB - - OSVDB - CVE - BOTH - Hledání exploitů MSF jenom kompatibilní jen na exploitdb z obou exploitdb i MSF - - MSF - EXDB - BOTH - široký sken hostitelů hledovat hostitele i mimo zvolenou síťovou masku Advanced diff --git a/cSploit/res/values-de/strings.xml b/cSploit/res/values-de/strings.xml index 0a3dc5c786..543db16216 100644 --- a/cSploit/res/values-de/strings.xml +++ b/cSploit/res/values-de/strings.xml @@ -1,5 +1,4 @@ - cSploit Einstellungen cSploit Uppps! Ich bin abgestürzt, aber ein Fehlerbericht wird an meinen Entwickler geschickt um bei der Behebung des Problems zu helfen :) @@ -22,7 +21,6 @@ Protokoll cSploit - An Android network penetration suite. Copyleft von Simone Margaritelli aka evilsocket. - http://www.csploit.org/ Haftungsausschluss @@ -69,7 +67,6 @@ cSploit wird sich beenden. Wirklich fortfahren? Nochmal auf Zurück drücken um die Anwendung zu beenden. Ausgewählt   - https://github.com/cSploit/android/issues/new Keine Sitzungsdatei auf der SD-Karte gefunden. Wähle eine Sitzungsdatei von der SD-Karte: Wähle Sitzung diff --git a/cSploit/res/values-el/strings.xml b/cSploit/res/values-el/strings.xml index 84c1fc25ef..f20037f6c1 100644 --- a/cSploit/res/values-el/strings.xml +++ b/cSploit/res/values-el/strings.xml @@ -1,5 +1,4 @@ - cSploit Ρυθμίσεις cSploit Όπα, πρόβλημα, θα σταλεί email στον προγραματιστή για να @@ -27,7 +26,6 @@ cSploit - Μία σουίτα δικτυακής διείσδυσης για Android. Copyleft του Simone Margaritelli άλλος evilsocket. - http://www.csploit.org/ Αποποίηση ευθύνης @@ -79,7 +77,6 @@ Κλείσιμο του cSploit, είσαστε σίγουροι; Πατήστε ξανά το κουμπί επιστροφής για να κλείσετε το app. Επιλογή  - https://github.com/cSploit/android/issues/new Δεν βρέθηκε αρχείο συνεδρίας στο sd card. Επιλέξτε αρχείο συνεδρίας απο το sd card : Επιλέξτε συνεδρία diff --git a/cSploit/res/values-es/strings.xml b/cSploit/res/values-es/strings.xml index 9aab8ea8a4..349c77753c 100644 --- a/cSploit/res/values-es/strings.xml +++ b/cSploit/res/values-es/strings.xml @@ -1,5 +1,4 @@ - cSploit Configuración cSploit ¡Ooooops! Algo ha ido mal, pero un informe va a ser enviado a mi desarrollador para ayudar a solucionar el problema :) @@ -22,7 +21,6 @@ Protocolo cSploit - Suite de penetración de red para Android. Copyleft de Simone Margaritelli alias evilsocket. - http://www.csploit.org/ Renuncia Licencia @@ -75,7 +73,6 @@ Esto cerrará cSploit, ¿seguro que desea continuar? Pulse de nuevo para cerrar la aplicación. Seleccionado  - https://github.com/cSploit/android/issues/new No se ha encontrado ningún archivo de sesión en la tarjeta SD. Seleccione un archivo de sesión de la tarjeta SD: Seleccionar sesión @@ -311,22 +308,12 @@ CVE tanto CVE como OSVDB - - OSVDB - CVE - AMBOS - Buscar exploits solo compatibles con MSF solo en exploitdb tanto exploitdb como MSF - - MSF - EXDB - AMBOS - El directorio no existe. no tiene permiso de escritura. diff --git a/cSploit/res/values-fi/strings.xml b/cSploit/res/values-fi/strings.xml index 011a620ce2..6e382d494c 100644 --- a/cSploit/res/values-fi/strings.xml +++ b/cSploit/res/values-fi/strings.xml @@ -1,5 +1,4 @@ - cSploit Asetukset cSploit No hupsista. Kaaduin, mutta raportti lähetetään kehittäjälleni @@ -26,7 +25,6 @@ Protokolla cSploit - Verkkotestaus sovellus Androidille. Copyleft: Simone Margaritelli, eli evilsocket. - http://www.csploit.org/ Käyttöehdot @@ -83,7 +81,6 @@ Paina takaisin-näppäintä vielä kerran poistuaksesi. Valittu  - https://github.com/cSploit/android/issues/new Tilanteita ei löydetty SD-kortilta. Valitse Tilanne-tiedosto SD-kortilta : Valitse Tilanne diff --git a/cSploit/res/values-fr/strings.xml b/cSploit/res/values-fr/strings.xml index 597c68d839..4a0d0c1e11 100644 --- a/cSploit/res/values-fr/strings.xml +++ b/cSploit/res/values-fr/strings.xml @@ -1,6 +1,5 @@ - cSploit Paramètres cSploit Ooooops ! Un crash est survenu, mais le bug va être signalé au @@ -28,7 +27,6 @@ cSploit - Une suite de pénétration réseau pour Android. Copyleft de Simone Margaritelli aka evilsocket. - http://www.csploit.org/ Conditions d\'utilisation @@ -82,7 +80,6 @@ Ceci arrêtera cSploit, voulez-vous vraiment continuer ? Appuyez sur retour à nouveau pour quitter l\'application. Selectionné  - https://github.com/cSploit/android/issues/new Aucune session trouvée sur la carte SD. Choisir un fichier de session depuis la carte SD: Choisir Session diff --git a/cSploit/res/values-hr/strings.xml b/cSploit/res/values-hr/strings.xml index 5b7938d7cc..aee4065079 100644 --- a/cSploit/res/values-hr/strings.xml +++ b/cSploit/res/values-hr/strings.xml @@ -1,5 +1,4 @@  - cSploit Postavke cSploit Ooooops! Srušio sam se, ali izvješće će se poslati mojem @@ -25,7 +24,6 @@ Protokol cSploit - Android paket za testiranje mreže Copyleft of Simone Margaritelli aka evilsocket. - http://www.csploit.org/ Disclaimer @@ -83,7 +81,6 @@ Pritisnite opet tipku nazad za izlaz. Izabrano  - https://github.com/cSploit/android/issues/new Nije pronađena sesija na SD kartici. Odaberi sesiju sa SD kartice : Izabrana Sesija @@ -357,22 +354,12 @@ CVE OSVDB i CVE - - OSVDB - CVE - OSVDB i CVE - Traži exploite samo koje podržava MSF samo sa exploitdb sa MSF i exploitdb - - MSF - EXDB - MSF i EXDB - Opsežna potraga za izvorima Potraga za izvorima izvan mrežne maske Napredno diff --git a/cSploit/res/values-it/strings.xml b/cSploit/res/values-it/strings.xml index de9d4ba98f..cb07f63da3 100644 --- a/cSploit/res/values-it/strings.xml +++ b/cSploit/res/values-it/strings.xml @@ -1,5 +1,4 @@ - cSploit Impostazioni cSploit Ooooops! Sono crashato, ma un report verrà inviato al mio @@ -28,7 +27,6 @@ cSploit - An Android network penetration suite. Copyleft of Simone Margaritelli aka evilsocket. - http://www.csploit.org/ Disclaimer Premi nuovamente il tasto indietro per chiudere l\'app. Selezionato  - https://github.com/cSploit/android/issues/new Nessun file di sessione trovato sulla sd card. Seleziona un file di sessione dalla sd card : Seleziona Sessione diff --git a/cSploit/res/values-nl/strings.xml b/cSploit/res/values-nl/strings.xml index 819c901a1c..367cc8480c 100644 --- a/cSploit/res/values-nl/strings.xml +++ b/cSploit/res/values-nl/strings.xml @@ -1,5 +1,4 @@ - cSploit Karaterset De JNI bibliotheek is eerder gecrashed, De omstandigheden rapporteren om de oorzaak te achterhalen zou gewaardeerd worden. Over cSploit @@ -51,7 +50,6 @@ Deze applicatie mag alleen maar gebruikt worden om zijn functies te tonen, alleen op netwerken waarvan je toestemming heb gekregen om acties met deze applicatie uit te voeren. De ontwikkelaars van deze applicatie zijn voor niks aansprakelijk. Andere woorden: Doe geen domme dingen en stuur geen bozen mensen naar ons Voeg een WiFi sleutel in of probeer het te kraken Voeg de port lijst in - http://www.csploit.org/ Aangepaste karakterset Java code Aangepaste filter @@ -115,7 +113,6 @@ Van (Jouw netwerk router) Sleutels aan het genereren… - https://github.com/cSploit/android/issues/new Dit programma is vrije software: je kunt het herdistribueren en / of onder de voorwaarden van de GNU General Public License zoals gepubliceerd door de Free Software Foundation, ofwel versie 3 van de Licentie, of (naar keuze) een latere versie. Dit programma wordt verspreid in de hoop dat het nuttig zal zijn, maar ZONDER ENIGE GARANTIE; zonder zelfs de impliciete garantie van verkoopbaarheid of geschiktheid voor een bepaald doel. Zie de GNU General Public License voor meer details. U moet een kopie van de GNU General Public License hebben ontvangen samen met dit programma. Zo niet, zie http://www.gnu.org/licenses/. Heart aanval Heart aanval is opgedoken, de applicatie zou nu gaan kijken voor updates.#STATUS# diff --git a/cSploit/res/values-no/strings.xml b/cSploit/res/values-no/strings.xml index dbc2fe6ea4..1e4a03caea 100644 --- a/cSploit/res/values-no/strings.xml +++ b/cSploit/res/values-no/strings.xml @@ -1,5 +1,4 @@ - cSploit Innstillinger cSploit Ooooops! Jeg krasjet, men en rapport kommer til å bli sendt til min @@ -25,7 +24,6 @@ Protokoll cSploit - An Android network penetration suite. Copyleft of Simone Margaritelli aka evilsocket. - http://www.csploit.org/ ansvarsfraskrivelse @@ -83,7 +81,6 @@ trykk igjen for å avslutte. Valgt  - https://github.com/cSploit/android/issues/new Ingen økt funnet på SD kort. Velg en økt fil fra SD kortet : Velg økt @@ -373,22 +370,12 @@ CVE both CVE and OSVDB - - OSVDB - CVE - BOTH - Search exploits MSF compatible only on exploitdb only from both exploitdb and MSF - - MSF - EXDB - BOTH - bred host søk søk for hosts utenfor network mask Avansert diff --git a/cSploit/res/values-pl/strings.xml b/cSploit/res/values-pl/strings.xml index 46f5484d3c..8948d05cf8 100644 --- a/cSploit/res/values-pl/strings.xml +++ b/cSploit/res/values-pl/strings.xml @@ -1,5 +1,4 @@ - cSploit Ustawienia cSploit Ooooops! Wywaliłem się, ale zamierzam wysłać raport do mojego twórcy @@ -25,7 +24,6 @@ Protokół cSploit - Zestaw penetracyjny dla systemu Android. Copyleft of Simone Margaritelli aka evilsocket. - http://www.csploit.org/ Wyłączenie odpowiedzialności @@ -82,7 +80,6 @@ Naciśnij wstecz jeszcze raz by opuścić aplikację. Wybrano  - https://github.com/cSploit/android/issues/new Nie znaleziono pliku sesji na karcie sd. Wybierz plik sesji ze swojej karty sd : Wybierz sesję @@ -339,21 +336,11 @@ CVE both CVE and OSVDB - - OSVDB - CVE - BOTH - Wyszukiwanie exploitów Tylko z MSF Tylko z exploit-db Z exploit-db i MSF - - - MSF - EXDB - BOTH wide host scan scan for hosts outside the network mask. diff --git a/cSploit/res/values-pt/strings.xml b/cSploit/res/values-pt/strings.xml index 4cdafa665e..16e9a3bac0 100644 --- a/cSploit/res/values-pt/strings.xml +++ b/cSploit/res/values-pt/strings.xml @@ -1,6 +1,5 @@ - cSploit Configurações cSploit Oooops! houve um erro , mas um relatório será enviado para o meu desenvolvedor para ajudar a corrigir o problema :) @@ -23,7 +22,6 @@ Protocolo cSploit - Uma suíte android de penetração de rede. Copyleft of Simone Margaritelli aka evilsocket. - http://www.csploit.org/ Termo de responsabilidade @@ -71,7 +69,6 @@ Pressione voltar novamente para fechar este aplicativo. Selecionado - https://github.com/cSploit/android/issues/new Nenhum arquivo de sessão encontrado no cartão SD. Selecione um arquivo de sessão a partir do cartão SD : Selecionar Sessão @@ -342,22 +339,12 @@ CVE Ambos - - OSVDB - CVE - Ambos - Busca de exploits MSF compatível apenas apenas exploitdb Ambos - - MSF - EXDB - Ambos - Grande Varredura do Host Procurar por Hosts Fora Da Máscara de Rede diff --git a/cSploit/res/values-ru/strings.xml b/cSploit/res/values-ru/strings.xml index c11cb045ca..871a59c605 100644 --- a/cSploit/res/values-ru/strings.xml +++ b/cSploit/res/values-ru/strings.xml @@ -1,6 +1,5 @@ - cSploit Настройки cSploit Ой! Я вынужден завершить работу, но отправка отчета об ошибке моему разработчику поможет исправить проблему :) @@ -25,7 +24,6 @@ Протокол cSploit - набор инструментов для проникновения в сеть под Android. Копилефт Simone Margaritelli aka evilsocket. - http://www.csploit.org/ Предупреждение @@ -76,7 +74,6 @@ Нажмите назад ещё раз, чтобы закрыть приложение. Выбрано  - https://github.com/cSploit/android/issues/new Не найдено файлов сессии на карте памяти. Выберите файл сессии с карты памяти: Выбор сессии @@ -348,22 +345,12 @@ CVE CVE и OSVDB - - OSVDB - CVE - BOTH - Поиск эксплойтов Только совместимые с MSF Толко на exploitdb Использовать exploitdb и MSF - - MSF - EXDB - BOTH - Широкий поиск хостов Поиск хостов вне текущей маски сети Дополнительно diff --git a/cSploit/res/values-tr/strings.xml b/cSploit/res/values-tr/strings.xml index 4094d07802..0d094e70c5 100644 --- a/cSploit/res/values-tr/strings.xml +++ b/cSploit/res/values-tr/strings.xml @@ -1,5 +1,4 @@ - cSploit Ayarlar cSploit Ooooops! Bir hata oluştu. Üzülmeyin bunu geliştiricime haber ettim :) @@ -23,7 +22,6 @@ Protokol cSploit - An Android network penetration suite. Copyleft of Simone Margaritelli aka evilsocket. - http://www.csploit.org/ Yasal Uyarı @@ -81,7 +79,6 @@ Tekrar geri tuşuna basın ve uygulamayı kapatın. Seçildi  - https://github.com/cSploit/android/issues/new SD Kartınız da oturum dosyası bulunamadı. SD Kartınızdan oturum dosyası seçin : Oturum Seç @@ -355,22 +352,12 @@ CVE both CVE and OSVDB - - OSVDB - CVE - BOTH - Exploit arama MSF compatible only on exploitdb only from both exploitdb and MSF - - MSF - EXDB - BOTH - yatay sunucu arama ağ maskesi dışında sunucu arama Gelişmiş diff --git a/cSploit/res/values-zh-rCN/strings.xml b/cSploit/res/values-zh-rCN/strings.xml index 24143b19ea..f530a16d5e 100644 --- a/cSploit/res/values-zh-rCN/strings.xml +++ b/cSploit/res/values-zh-rCN/strings.xml @@ -1,5 +1,4 @@ - cSploit 设置 cSploit 额!崩溃了...不过我将给我的开发者发送报告来帮助解决这个问题。 @@ -22,7 +21,6 @@ 协议 cSploit - 安卓上的网络渗透套装。 非版权保护 来自 Simone Margaritelli 又名 evilsocket。 - http://www.csploit.org/ 免责声明 @@ -76,7 +74,6 @@ If not, see http://www.gnu.org/licenses/. 将关闭 cSploit,您确定继续么? 再摁一次返回退出。 已选择  - https://github.com/cSploit/android/issues/new 没在在SD卡上找到会话文件。 请从SD卡中选择会话文件: 选择会话 @@ -334,22 +331,12 @@ If not, see http://www.gnu.org/licenses/. CVE CVE 和 OSVDB 同时 - - OSVDB - CVE - BOTH - 搜索攻击方案 仅MSF兼容 仅exploitdb 同时来自exploitdb 与 MSF - - MSF - EXDB - BOTH - 文件夹 并不存在。 不可写。 diff --git a/cSploit/res/values/strings.xml b/cSploit/res/values/strings.xml index 21e3e5c0f4..af1321cc82 100644 --- a/cSploit/res/values/strings.xml +++ b/cSploit/res/values/strings.xml @@ -1,5 +1,5 @@ - cSploit + cSploit Settings cSploit Ooooops! I crashed, but a report is going to be sent to my @@ -25,7 +25,7 @@ Protocol cSploit - An Android network penetration suite. Copyleft of Simone Margaritelli aka evilsocket. - http://www.csploit.org/ + http://www.csploit.org/ Disclaimer @@ -84,7 +84,7 @@ Press back again to close this app. Selected:   - https://github.com/cSploit/android/issues/new + https://github.com/cSploit/android/issues/new No session file found on sd card. Select a session file from the sd card : Select Session @@ -376,7 +376,7 @@ CVE both CVE and OSVDB - + OSVDB CVE BOTH @@ -387,7 +387,7 @@ on exploitdb only from both exploitdb and MSF - + MSF EXDB BOTH @@ -524,4 +524,6 @@ Excellent Select target Select %s ? + https://github.com/cSploit/android/issues + Before opening a new issue, please, take the time to read the already open issues, probably it\' s already open. If it\' s not open we\'ll need as much information as you can get, so please, read this guide in order to know how to report a bug properly.

]]>
diff --git a/cSploit/src/org/csploit/android/MainActivity.java b/cSploit/src/org/csploit/android/MainActivity.java index 680116b833..5dc4897b16 100644 --- a/cSploit/src/org/csploit/android/MainActivity.java +++ b/cSploit/src/org/csploit/android/MainActivity.java @@ -765,9 +765,11 @@ public void run() { return true; case R.id.submit_issue: - String uri = getString(R.string.github_issues); + String uri = getString(R.string.github_new_issue_url); Intent browser = new Intent(Intent.ACTION_VIEW, Uri.parse(uri)); startActivity(browser); + // for fat-tire: + // String.format(getString(R.string.issue_message), getString(R.string.github_issues_url), getString(R.string.github_new_issue_url)); return true; case R.id.about: From c573ba8a5e206751c83b317be5c465768a315be5 Mon Sep 17 00:00:00 2001 From: tux-mind Date: Tue, 6 Oct 2015 22:36:42 +0200 Subject: [PATCH 29/49] centralize services singletons --- .../csploit/android/CSploitApplication.java | 2 ++ .../src/org/csploit/android/MainActivity.java | 35 ++++++------------- .../csploit/android/services/Services.java | 30 ++++++++++++++++ 3 files changed, 42 insertions(+), 25 deletions(-) create mode 100644 cSploit/src/org/csploit/android/services/Services.java diff --git a/cSploit/src/org/csploit/android/CSploitApplication.java b/cSploit/src/org/csploit/android/CSploitApplication.java index c6b5daedcd..f356a7256d 100644 --- a/cSploit/src/org/csploit/android/CSploitApplication.java +++ b/cSploit/src/org/csploit/android/CSploitApplication.java @@ -35,6 +35,7 @@ import org.csploit.android.plugins.Sessions; import org.csploit.android.plugins.Traceroute; import org.csploit.android.plugins.mitm.MITM; +import org.csploit.android.services.Services; import java.net.NoRouteToHostException; @@ -63,6 +64,7 @@ public void onCreate() { super.onCreate(); ACRA.init(this); + Services.init(this); // initialize the system try { diff --git a/cSploit/src/org/csploit/android/MainActivity.java b/cSploit/src/org/csploit/android/MainActivity.java index 7a13603ba5..e1a0033b15 100644 --- a/cSploit/src/org/csploit/android/MainActivity.java +++ b/cSploit/src/org/csploit/android/MainActivity.java @@ -79,8 +79,7 @@ import org.csploit.android.plugins.Sessions; import org.csploit.android.plugins.Traceroute; import org.csploit.android.plugins.mitm.MITM; -import org.csploit.android.services.MsfRpcdService; -import org.csploit.android.services.NetworkRadar; +import org.csploit.android.services.Services; import org.csploit.android.services.UpdateChecker; import org.csploit.android.services.UpdateService; import org.csploit.android.services.receivers.MsfRpcdServiceReceiver; @@ -107,8 +106,6 @@ public class MainActivity extends AppCompatActivity { private static final int WIFI_CONNECTION_REQUEST = 1012; private boolean isWifiAvailable = false; private TargetAdapter mTargetAdapter = null; - private NetworkRadar mNetworkRadar = null; - private MsfRpcdService mMsfRpcdService = null; private NetworkRadarReceiver mRadarReceiver = new NetworkRadarReceiver(); private UpdateReceiver mUpdateReceiver = new UpdateReceiver(); private WipeReceiver mWipeReceiver = new WipeReceiver(); @@ -440,27 +437,15 @@ public boolean onCreateOptionsMenu(Menu menu) { return super.onCreateOptionsMenu(menu); } - private MsfRpcdService getMsfRpcdService() { - if(mMsfRpcdService == null) - mMsfRpcdService = new MsfRpcdService(this); - return mMsfRpcdService; - } - - private NetworkRadar getNetworkRadar() { - if(mNetworkRadar == null) - mNetworkRadar = new NetworkRadar(this); - return mNetworkRadar; - } - @Override public boolean onPrepareOptionsMenu(Menu menu) { MenuItem item = menu.findItem(R.id.ss_monitor); - getNetworkRadar().buildMenuItem(item); + Services.getNetworkRadar().buildMenuItem(item); item = menu.findItem(R.id.ss_msfrpcd); - getMsfRpcdService().buildMenuItem(item); + Services.getMsfRpcdService().buildMenuItem(item); mMenu = menu; @@ -571,7 +556,7 @@ public void startNetworkRadar() { new Thread(new Runnable() { @Override public void run() { - getNetworkRadar().start(); + Services.getNetworkRadar().start(); } }).start(); } @@ -580,7 +565,7 @@ public void stopNetworkRadar() { new Thread(new Runnable() { @Override public void run() { - getNetworkRadar().stop(); + Services.getNetworkRadar().stop(); } }).start(); } @@ -592,8 +577,8 @@ public void StartRPCServer() { new Thread(new Runnable() { @Override public void run() { - if(getMsfRpcdService().isAvailable()) - getMsfRpcdService().start(); + if(Services.getMsfRpcdService().isAvailable()) + Services.getMsfRpcdService().start(); } }).start(); } @@ -605,7 +590,7 @@ public void StopRPCServer() { new Thread(new Runnable() { @Override public void run() { - getMsfRpcdService().stop(); + Services.getMsfRpcdService().stop(); } }).start(); } @@ -755,7 +740,7 @@ public void onItemSelected(int index) { new Thread(new Runnable() { @Override public void run() { - getNetworkRadar().onMenuClick(MainActivity.this, item); + Services.getNetworkRadar().onMenuClick(MainActivity.this, item); } }).start(); return true; @@ -764,7 +749,7 @@ public void run() { new Thread(new Runnable() { @Override public void run() { - getMsfRpcdService().onMenuClick(MainActivity.this, item); + Services.getMsfRpcdService().onMenuClick(MainActivity.this, item); } }).start(); return true; diff --git a/cSploit/src/org/csploit/android/services/Services.java b/cSploit/src/org/csploit/android/services/Services.java new file mode 100644 index 0000000000..77424bbd6d --- /dev/null +++ b/cSploit/src/org/csploit/android/services/Services.java @@ -0,0 +1,30 @@ +package org.csploit.android.services; + +import android.content.Context; + +/** + * Services provider + */ +public final class Services { + private static Context context; + private static NetworkRadar networkRadar; + private static MsfRpcdService msfRpcdService; + + public static void init(Context context) { + Services.context = context; + } + + public synchronized static NetworkRadar getNetworkRadar() { + if(networkRadar == null) { + networkRadar = new NetworkRadar(context); + } + return networkRadar; + } + + public synchronized static MsfRpcdService getMsfRpcdService() { + if(msfRpcdService == null) { + msfRpcdService = new MsfRpcdService(context); + } + return msfRpcdService; + } +} From d9eaf6a06511a75da66c2b99cb2d98aa954f380f Mon Sep 17 00:00:00 2001 From: tux-mind Date: Tue, 6 Oct 2015 22:36:57 +0200 Subject: [PATCH 30/49] cleanup --- cSploit/src/org/csploit/android/core/System.java | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/cSploit/src/org/csploit/android/core/System.java b/cSploit/src/org/csploit/android/core/System.java index e30d7edf75..0e2bdc1b8c 100644 --- a/cSploit/src/org/csploit/android/core/System.java +++ b/cSploit/src/org/csploit/android/core/System.java @@ -44,13 +44,11 @@ import org.csploit.android.gui.dialogs.FatalDialog; import org.csploit.android.helpers.NetworkHelper; import org.csploit.android.helpers.ThreadHelper; -import org.csploit.android.net.Endpoint; import org.csploit.android.net.GitHubParser; import org.csploit.android.net.Network; import org.csploit.android.net.RemoteReader; import org.csploit.android.net.Target; import org.csploit.android.net.Target.Exploit; -import org.csploit.android.net.Target.Type; import org.csploit.android.net.http.proxy.HTTPSRedirector; import org.csploit.android.net.http.proxy.Proxy; import org.csploit.android.net.http.server.Server; @@ -87,7 +85,6 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; -import java.util.Vector; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.zip.GZIPInputStream; @@ -836,12 +833,10 @@ public static void loadSession(String filename) throws Exception{ throw new Exception(filename + " does not exists or is empty."); } - public static ToolBox getTools() { - synchronized (System.class) { - if(mTools == null) - mTools = new ToolBox(); - return mTools; - } + public synchronized static ToolBox getTools() { + if(mTools == null) + mTools = new ToolBox(); + return mTools; } public static RPCClient getMsfRpc() { From 7425363b6384fd086d1e461ff56b47b7a7e3f7fb Mon Sep 17 00:00:00 2001 From: tux-mind Date: Tue, 6 Oct 2015 23:04:50 +0200 Subject: [PATCH 31/49] move duplicate code into reset() call NetworkRadar#onNewTargetFound for 3 initial targets call NetworkRadar#onNewTargetFound for each added target --- .../src/org/csploit/android/core/System.java | 68 ++++++++----------- .../android/services/NetworkRadar.java | 25 ++++--- 2 files changed, 43 insertions(+), 50 deletions(-) diff --git a/cSploit/src/org/csploit/android/core/System.java b/cSploit/src/org/csploit/android/core/System.java index 0e2bdc1b8c..7d2088727b 100644 --- a/cSploit/src/org/csploit/android/core/System.java +++ b/cSploit/src/org/csploit/android/core/System.java @@ -56,6 +56,7 @@ import org.csploit.android.net.metasploit.Payload; import org.csploit.android.net.metasploit.RPCClient; import org.csploit.android.net.metasploit.Session; +import org.csploit.android.services.Services; import org.csploit.android.tools.ToolBox; import java.io.BufferedReader; @@ -189,21 +190,7 @@ public static void init(Context context) throws Exception{ MSF_RPC_PORT = 55553; } - // initialize network data at the end - mNetwork = new Network(mContext); - - Target network = new Target(mNetwork), - gateway = new Target(mNetwork.getGatewayAddress(), mNetwork.getGatewayHardware()), - device = new Target(mNetwork.getLocalAddress(), mNetwork.getLocalHardware()); - - gateway.setAlias(mNetwork.getSSID()); - device.setAlias(android.os.Build.MODEL); - - mTargets.add(network); - mTargets.add(gateway); - mTargets.add(device); - - mInitialized = true; + uncaughtReloadNetworkMapping(); ThreadHelper.getSharedExecutor().execute(new Runnable() { @Override @@ -349,23 +336,7 @@ public static void initCore() throws DaemonException, SuException { public static void reloadNetworkMapping(){ try{ - mNetwork = new Network(mContext); - - Target network = new Target(mNetwork), - gateway = new Target(mNetwork.getGatewayAddress(), mNetwork.getGatewayHardware()), - device = new Target(mNetwork.getLocalAddress(), mNetwork.getLocalHardware()); - - gateway.setAlias(mNetwork.getSSID()); - device.setAlias(android.os.Build.MODEL); - - synchronized (mTargets) { - mTargets.clear(); - mTargets.add(network); - mTargets.add(gateway); - mTargets.add(device); - } - - mInitialized = true; + uncaughtReloadNetworkMapping(); } catch(NoRouteToHostException nrthe){ // swallow bitch @@ -375,6 +346,14 @@ public static void reloadNetworkMapping(){ } } + private static void uncaughtReloadNetworkMapping() throws UnknownHostException, SocketException { + mNetwork = new Network(mContext); + + reset(); + + mInitialized = true; + } + public static boolean checkNetworking(final Activity current){ if(!Network.isWifiConnected(mContext)){ @@ -917,18 +896,26 @@ else if(name.endsWith(".tiff")) return type; } - public static void reset() throws SocketException{ + public static void reset() { mCurrentTarget = null; synchronized (mTargets) { mTargets.clear(); - // local network - mTargets.add(new Target(System.getNetwork())); - // network gateway - mTargets.add(new Target(System.getNetwork().getGatewayAddress(), System.getNetwork().getGatewayHardware())); - // device network address - mTargets.add(new Target(System.getNetwork().getLocalAddress(), System.getNetwork().getLocalHardware())); + Target network = new Target(mNetwork), + gateway = new Target(mNetwork.getGatewayAddress(), mNetwork.getGatewayHardware()), + device = new Target(mNetwork.getLocalAddress(), mNetwork.getLocalHardware()); + + gateway.setAlias(mNetwork.getSSID()); + device.setAlias(android.os.Build.MODEL); + + mTargets.add(network); + mTargets.add(gateway); + mTargets.add(device); + + for(Target t : mTargets) { + Services.getNetworkRadar().onNewTargetFound(t); + } } } @@ -1004,12 +991,13 @@ public static boolean addOrderedTarget(Target target){ for (int i = 0; i < mTargets.size(); i++) { if (mTargets.get(i).comesAfter(target)) { mTargets.add(i, target); + Services.getNetworkRadar().onNewTargetFound(target); return true; } } mTargets.add(target); - + Services.getNetworkRadar().onNewTargetFound(target); return true; } } diff --git a/cSploit/src/org/csploit/android/services/NetworkRadar.java b/cSploit/src/org/csploit/android/services/NetworkRadar.java index 0a466c97bd..dcc23f1d7a 100644 --- a/cSploit/src/org/csploit/android/services/NetworkRadar.java +++ b/cSploit/src/org/csploit/android/services/NetworkRadar.java @@ -8,6 +8,7 @@ import org.csploit.android.core.Logger; import org.csploit.android.core.System; import org.csploit.android.core.ChildManager; +import org.csploit.android.helpers.ThreadHelper; import org.csploit.android.net.Endpoint; import org.csploit.android.net.Network; import org.csploit.android.net.Target; @@ -68,12 +69,20 @@ public void buildMenuItem(MenuItem item) { item.setEnabled(System.getTools().networkRadar.isEnabled()); } - private void onNewHostFound(Target target) { - try { - System.getTools().nmap.synScan(target, new ScanReceiver(target)); - } catch (ChildManager.ChildNotStartedException e) { - System.errorLogging(e); - } + public void onNewTargetFound(final Target target) { + if(target.getType() == Target.Type.NETWORK) + return; + + ThreadHelper.getSharedExecutor().execute(new Runnable() { + @Override + public void run() { + try { + System.getTools().nmap.synScan(target, new ScanReceiver(target)); + } catch (ChildManager.ChildNotStartedException e) { + System.errorLogging(e); + } + } + }); } private class Receiver extends HostReceiver { @@ -115,10 +124,6 @@ public void onHostFound(byte[] macAddress, InetAddress ipAddress, String name) { if(notify) { sendIntent(NRDR_CHANGED); } - - if(justFound) { - onNewHostFound(t); - } } @Override From 28e8ecc8eefee260708aebdbd59fa04dabc9bd78 Mon Sep 17 00:00:00 2001 From: tux-mind Date: Tue, 6 Oct 2015 23:12:22 +0200 Subject: [PATCH 32/49] sort add from background thread, then notify the adapter when finished. --- cSploit/src/org/csploit/android/MainActivity.java | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/cSploit/src/org/csploit/android/MainActivity.java b/cSploit/src/org/csploit/android/MainActivity.java index e1a0033b15..6f6cfd0b5e 100644 --- a/cSploit/src/org/csploit/android/MainActivity.java +++ b/cSploit/src/org/csploit/android/MainActivity.java @@ -68,6 +68,7 @@ import org.csploit.android.gui.dialogs.MultipleChoiceDialog; import org.csploit.android.gui.dialogs.SpinnerDialog; import org.csploit.android.gui.dialogs.SpinnerDialog.SpinnerDialogListener; +import org.csploit.android.helpers.ThreadHelper; import org.csploit.android.net.Network; import org.csploit.android.net.Target; import org.csploit.android.plugins.ExploitFinder; @@ -607,15 +608,11 @@ public boolean onOptionsItemSelected(final MenuItem item) { public void onInputEntered(String input) { final Target target = Target.getFromString(input); if (target != null) { - // refresh the target listview - MainActivity.this.runOnUiThread(new Runnable() { + ThreadHelper.getSharedExecutor().execute(new Runnable() { @Override public void run() { - if (System.addOrderedTarget(target) - && mTargetAdapter != null) { - mTargetAdapter - .notifyDataSetChanged(); - } + System.addOrderedTarget(target); + mTargetAdapter.update(null, null); } }); } else From 098a6cb029423518f3631464f26f158649640ef2 Mon Sep 17 00:00:00 2001 From: tux-mind Date: Tue, 6 Oct 2015 23:52:39 +0200 Subject: [PATCH 33/49] TargetList notification system re-implemented. do not use intents, use Observer. notify on every interesting event ( target {port , name, connected} changed, target list changed ) --- .../src/org/csploit/android/MainActivity.java | 27 +++++++++++++++-- .../src/org/csploit/android/core/System.java | 30 +++++++++++++++++++ .../src/org/csploit/android/net/Target.java | 4 +++ .../android/services/NetworkRadar.java | 15 ++++++---- .../receivers/NetworkRadarReceiver.java | 16 ---------- 5 files changed, 68 insertions(+), 24 deletions(-) diff --git a/cSploit/src/org/csploit/android/MainActivity.java b/cSploit/src/org/csploit/android/MainActivity.java index 6f6cfd0b5e..16b18c36bf 100644 --- a/cSploit/src/org/csploit/android/MainActivity.java +++ b/cSploit/src/org/csploit/android/MainActivity.java @@ -204,7 +204,7 @@ public boolean onItemLongClick(AdapterView parent, View view, int position, l mWipeReceiver.register(MainActivity.this); mMsfReceiver.register(MainActivity.this); - mRadarReceiver.setObserver(mTargetAdapter); + System.setTargetListObserver(mTargetAdapter); StartRPCServer(); @@ -930,7 +930,30 @@ public int[] getSelectedPositions() { @Override public void update(Observable observable, Object data) { - MainActivity.this.runOnUiThread(this); + final Target target = (Target) data; + + if(target == null) { + // update the whole list + MainActivity.this.runOnUiThread(this); + return; + } + + // update only a row, if it's displayed + MainActivity.this.runOnUiThread(new Runnable() { + @Override + public void run() { + if(lv == null) + return; + int start = lv.getFirstVisiblePosition(); + for(int i=start, j=lv.getLastVisiblePosition();i<=j;i++) + if(target==list.get(i)){ + View view = lv.getChildAt(i-start); + getView(i, view, lv); + break; + } + } + }); + } @Override diff --git a/cSploit/src/org/csploit/android/core/System.java b/cSploit/src/org/csploit/android/core/System.java index 7d2088727b..7b90ba4fb2 100644 --- a/cSploit/src/org/csploit/android/core/System.java +++ b/cSploit/src/org/csploit/android/core/System.java @@ -86,6 +86,7 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Observer; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.zip.GZIPInputStream; @@ -143,6 +144,8 @@ public class System private static KnownIssues mKnownIssues = null; + private static Observer targetListObserver = null; + private final static LinkedList mSettingReceivers = new LinkedList(); public static void init(Context context) throws Exception{ @@ -372,6 +375,33 @@ public static boolean checkNetworking(final Activity current){ return true; } + public synchronized static void setTargetListObserver(Observer targetListObserver) { + System.targetListObserver = targetListObserver; + } + + /** + * notify that a specific target of the list has been changed + * @param target the changed target + */ + public static void notifyTargetListChanged(Target target) { + Observer o; + synchronized (System.class) { + o = targetListObserver; + } + + if(o==null) + return; + + o.update(null, target); + } + + /** + * notify that the targets list has been changed + */ + public static void notifyTargetListChanged() { + notifyTargetListChanged(null); + } + public static void setLastError(String error){ mLastError = error; } diff --git a/cSploit/src/org/csploit/android/net/Target.java b/cSploit/src/org/csploit/android/net/Target.java index a5873d781f..5712d510e6 100644 --- a/cSploit/src/org/csploit/android/net/Target.java +++ b/cSploit/src/org/csploit/android/net/Target.java @@ -655,6 +655,7 @@ public String getHostname(){ } public void addOpenPort(Port port){ + boolean notifyList = false; synchronized (mPorts) { Port existing = null; for(Port p : mPorts) { @@ -668,8 +669,11 @@ public void addOpenPort(Port port){ port.mergeTo(existing); } else { mPorts.add(port); + notifyList = true; } } + if(notifyList) + System.notifyTargetListChanged(this); } public void addOpenPort(int port, Protocol protocol){ diff --git a/cSploit/src/org/csploit/android/services/NetworkRadar.java b/cSploit/src/org/csploit/android/services/NetworkRadar.java index dcc23f1d7a..7c0c827846 100644 --- a/cSploit/src/org/csploit/android/services/NetworkRadar.java +++ b/cSploit/src/org/csploit/android/services/NetworkRadar.java @@ -21,7 +21,6 @@ * network-radar process manager */ public class NetworkRadar extends NativeService implements MenuControllableService { - public static final String NRDR_CHANGED = "NetworkRadar.action.TARGET_CHANGED"; public static final String NRDR_STOPPED = "NetworkRadar.action.STOPPED"; public static final String NRDR_STARTED = "NetworkRadar.action.STARTED"; public static final String NRDR_START_FAILED = "NetworkRadar.action.START_FAILED"; @@ -121,8 +120,13 @@ public void onHostFound(byte[] macAddress, InetAddress ipAddress, String name) { } } - if(notify) { - sendIntent(NRDR_CHANGED); + if(!notify) + return; + + if(justFound) { + System.notifyTargetListChanged(); + } else { + System.notifyTargetListChanged(t); } } @@ -130,9 +134,9 @@ public void onHostFound(byte[] macAddress, InetAddress ipAddress, String name) { public void onHostLost(InetAddress ipAddress) { Target t = System.getTargetByAddress(ipAddress); - if(t != null) { + if(t != null && t.isConnected()) { t.setConneced(false); - sendIntent(NRDR_CHANGED); + System.notifyTargetListChanged(t); } } @@ -162,7 +166,6 @@ public ScanReceiver(Target target) { @Override public void onPortFound(int port, String protocol) { target.addOpenPort(port, Network.Protocol.fromString(protocol)); - sendIntent(NRDR_CHANGED); } } } diff --git a/cSploit/src/org/csploit/android/services/receivers/NetworkRadarReceiver.java b/cSploit/src/org/csploit/android/services/receivers/NetworkRadarReceiver.java index 29afbc9ea9..8918370c6d 100644 --- a/cSploit/src/org/csploit/android/services/receivers/NetworkRadarReceiver.java +++ b/cSploit/src/org/csploit/android/services/receivers/NetworkRadarReceiver.java @@ -4,24 +4,18 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; -import android.os.Build; -import android.widget.ArrayAdapter; import android.widget.Toast; -import org.csploit.android.MainActivity; import org.csploit.android.R; import org.csploit.android.core.*; import org.csploit.android.services.NetworkRadar; -import java.util.Observer; - /** * receive notifications from NetworkRadar */ public class NetworkRadarReceiver extends ManagedReceiver { private final IntentFilter filter; - private Observer changeObserver; public NetworkRadarReceiver() { filter = new IntentFilter(); @@ -29,11 +23,6 @@ public NetworkRadarReceiver() { filter.addAction(NetworkRadar.NRDR_STARTED); filter.addAction(NetworkRadar.NRDR_START_FAILED); filter.addAction(NetworkRadar.NRDR_STOPPED); - filter.addAction(NetworkRadar.NRDR_CHANGED); - } - - public void setObserver(Observer changeObserver) { - this.changeObserver = changeObserver; } @Override @@ -68,11 +57,6 @@ private void notifyIntent(Context context, Intent intent) { case NetworkRadar.NRDR_START_FAILED: Toast.makeText(context, R.string.net_discovery_start_failed, Toast.LENGTH_LONG).show(); break; - case NetworkRadar.NRDR_CHANGED: - if(changeObserver != null) { - changeObserver.update(null, null); - } - break; } } } From 9b365143436691065416417c5691dc9cac2e32a6 Mon Sep 17 00:00:00 2001 From: tux-mind Date: Wed, 7 Oct 2015 00:34:02 +0200 Subject: [PATCH 34/49] nmap is not available until we connect to the core. make network-radar trigger a scan of the current hosts when it startup. --- cSploit/src/org/csploit/android/core/System.java | 9 +++++++++ .../src/org/csploit/android/services/NetworkRadar.java | 5 +++++ 2 files changed, 14 insertions(+) diff --git a/cSploit/src/org/csploit/android/core/System.java b/cSploit/src/org/csploit/android/core/System.java index 7b90ba4fb2..450f589062 100644 --- a/cSploit/src/org/csploit/android/core/System.java +++ b/cSploit/src/org/csploit/android/core/System.java @@ -943,6 +943,15 @@ public static void reset() { mTargets.add(gateway); mTargets.add(device); + scanThemAll(); + } + } + + public static void scanThemAll() { + if(!mCoreInitialized) { + return; + } + synchronized (mTargets) { for(Target t : mTargets) { Services.getNetworkRadar().onNewTargetFound(t); } diff --git a/cSploit/src/org/csploit/android/services/NetworkRadar.java b/cSploit/src/org/csploit/android/services/NetworkRadar.java index 7c0c827846..2f80f5d00e 100644 --- a/cSploit/src/org/csploit/android/services/NetworkRadar.java +++ b/cSploit/src/org/csploit/android/services/NetworkRadar.java @@ -72,6 +72,10 @@ public void onNewTargetFound(final Target target) { if(target.getType() == Target.Type.NETWORK) return; + if(!System.isCoreInitialized()) { + return; + } + ThreadHelper.getSharedExecutor().execute(new Runnable() { @Override public void run() { @@ -143,6 +147,7 @@ public void onHostLost(InetAddress ipAddress) { @Override public void onStart(String cmd) { sendIntent(NRDR_STARTED); + System.scanThemAll(); } public void onEnd(int exitValue) { From 17caa2dea7c2d3383c9ac7c69b9e47989a9be5d1 Mon Sep 17 00:00:00 2001 From: fattire Date: Tue, 6 Oct 2015 20:08:37 -0700 Subject: [PATCH 35/49] Add "Auto port-scan" preference to Settings. This allows you to disable the default behavior, which is to do a port scan for each discovered host. --- cSploit/res/values/strings.xml | 2 + cSploit/res/xml/preferences.xml | 48 +++++++++++-------- .../android/services/NetworkRadar.java | 29 ++++++----- 3 files changed, 45 insertions(+), 34 deletions(-) diff --git a/cSploit/res/values/strings.xml b/cSploit/res/values/strings.xml index 4db836441f..0ce171ce12 100644 --- a/cSploit/res/values/strings.xml +++ b/cSploit/res/values/strings.xml @@ -415,6 +415,8 @@ Buffer size must be between 1024 and 104857600. persistent network monitor keep network monitor watching the network + Auto port-scan + Always SYN scan for open ports when new host is discovered Exploit Finder Search for exploit that matches found vulnerabilities. diff --git a/cSploit/res/xml/preferences.xml b/cSploit/res/xml/preferences.xml index d0fc3c9c6b..3d3e039ead 100644 --- a/cSploit/res/xml/preferences.xml +++ b/cSploit/res/xml/preferences.xml @@ -1,9 +1,9 @@ + android:layout_height="wrap_content"> - + + + + - + - + - + + android:title="@string/pref_performance_widescan" /> - + + android:summary="@string/pref_msf_enable_desc" + android:title="@string/pref_msf_enable" /> + android:summary="@string/pref_msf_notifications_desc" + android:title="@string/pref_msf_notifications" /> @@ -224,8 +230,8 @@ + android:summary="@string/pref_msf_delete_desc" + android:title="@string/pref_msf_delete" /> diff --git a/cSploit/src/org/csploit/android/services/NetworkRadar.java b/cSploit/src/org/csploit/android/services/NetworkRadar.java index ed6394ca84..3001195ca1 100644 --- a/cSploit/src/org/csploit/android/services/NetworkRadar.java +++ b/cSploit/src/org/csploit/android/services/NetworkRadar.java @@ -2,12 +2,13 @@ import android.app.Activity; import android.content.Context; +import android.content.SharedPreferences; import android.view.MenuItem; import org.csploit.android.R; +import org.csploit.android.core.ChildManager; import org.csploit.android.core.Logger; import org.csploit.android.core.System; -import org.csploit.android.core.ChildManager; import org.csploit.android.helpers.ThreadHelper; import org.csploit.android.net.Endpoint; import org.csploit.android.net.Network; @@ -69,23 +70,25 @@ public void buildMenuItem(MenuItem item) { } public void onNewTargetFound(final Target target) { - if(target.getType() == Target.Type.NETWORK) + if (target.getType() == Target.Type.NETWORK) return; - if(!System.isCoreInitialized()) { + if (!System.isCoreInitialized()) { return; } - - ThreadHelper.getSharedExecutor().execute(new Runnable() { - @Override - public void run() { - try { - System.getTools().nmap.synScan(target, new ScanReceiver(target)); - } catch (ChildManager.ChildNotStartedException e) { - System.errorLogging(e); + SharedPreferences prefs = System.getSettings(); + if (prefs.getBoolean("PREF_AUTO_PORTSCAN", true)) { + ThreadHelper.getSharedExecutor().execute(new Runnable() { + @Override + public void run() { + try { + System.getTools().nmap.synScan(target, new ScanReceiver(target)); + } catch (ChildManager.ChildNotStartedException e) { + System.errorLogging(e); + } } - } - }); + }); + } } private class Receiver extends HostReceiver { From cd8cb8c826b5b36c3fe83fcaf9114bf3d312af80 Mon Sep 17 00:00:00 2001 From: fattire Date: Tue, 6 Oct 2015 20:27:45 -0700 Subject: [PATCH 36/49] Fix capitalization for strings.xml per Google style guidelines See here: https://www.google.com/design/spec/style/writing.html#writing-tone --- cSploit/res/values/strings.xml | 124 ++++++++++++++++----------------- 1 file changed, 62 insertions(+), 62 deletions(-) diff --git a/cSploit/res/values/strings.xml b/cSploit/res/values/strings.xml index 0ce171ce12..d03780c5c9 100644 --- a/cSploit/res/values/strings.xml +++ b/cSploit/res/values/strings.xml @@ -76,8 +76,8 @@ Enter an URL, host name or IP address below: Network discovery stopped. Network discovery started. - Start Network Monitor - Stop Network Monitor + Start network monitor + Stop network monitor Start Metasploit RPCD Stop Metasploit RPCD Exit @@ -88,10 +88,10 @@ https://github.com/cSploit/android/issues/new No session file found on sd card. Select a session file from the sd card : - Select Session + Select session Invalid session name. Session saved to   - Save Session + Save session Enter the name of the session file : New session started Warning @@ -185,18 +185,18 @@ Search for known vulnerabilities for target running services upon National Vulnerability Database. - Service Inspector + Service inspector Perform target operating system and services deep detection (slower than port scanner, but more accurate). - Login Cracker + Login cracker A very fast network logon cracker which support many different services. - Packet Forger + Packet forger Craft and send a custom TCP or UDP packet to the target. - Port Scanner + Port scanner Perform a SYN port scanning on target. Router PWN Launch the http://routerpwn.com/ service to pwn your router. @@ -246,14 +246,14 @@ Metasploit RPCD does not respond - Simple Sniff + Simple sniff Redirect target\'s traffic through this device and show some stats while dumping it to a pcap file. - Password Sniffer + Password sniffer Sniff passwords of many protocols such as http, ftp, imap, imaps, irc, msn, etc from the target. Users/pass fields - Session Hijacker + Session hijacker Listen for cookies on the network and hijack sessions. - Kill Connections + Kill connections Kill connections preventing the target to reach any website or server. Connection killer can be used only against single endpoints. Redirect @@ -261,7 +261,7 @@ Redirection Port out of range. Invalid address and/or port specified. - Replace Images + Replace images Replace all images on webpages with the specified one. Choose a source: Local Images @@ -269,42 +269,42 @@ Image Enter the url of the image : Invalid image url. - Replace Videos + Replace videos Replace all youtube videos on webpages with the specified one. Video Enter the url of the video : Invalid youtube video. - Script Injection - Inject a javascript in every visited webpage. + Script injection + Inject a Javascript in every visited web page. Choose a method: Choose a branch: Local files - Custom Code - Seems like you have no file manager capable of browsing files, please install one. - Enter the js code to inject : + Custom code + Seems like you have no file manager capable of browsing files. Please install one. + Enter the Javascript code to inject : enclosing tags.]]> - Custom Filter + Custom filter Replace custom text on webpages with the specified one. - Custom Filter + Custom filter Invalid regular expression - File Output - Do you want to save sniffed traffic to a pcap file? + File output + Do you want to save sniffed traffic to a PCAP file? Dumping traffic to Unable to create the proxy, please check your connection and port availability. Unable to create the HTTPS redirector, please check your connection and port availability. Unable to create the resource server, please check your connection and port availability. - Load From File - User Wordlist - Password Wordlist + Load from file + User word list + Password word list - New Session - Save Session - Restore Session - Stop Network Monitor - Submit Issue - About + New session + Save session + Restore session + Stop network monitor + Submit issue + About cSploit Select Custom Ports Custom parameters @@ -319,27 +319,27 @@ Could not generate keys. Scanning finished. - DNS Spoofing + DNS spoofing Redirect domains to a different web/IP Saved General Modules - Metasploit Framework + Metasploit framework Performance - Check for Updates - Wake Lock - Save Path - Debug Error Logging - Code Profiler - Sniffer Sample Time - HTTP Proxy Port - HTTP Server Port - SSL Stripping - HTTPS Redirector Port - HTTP Max Buffer Size - Password Sniffer File + Check for updates + Wake lock + Save path + Debug error logging + Code profiler + Sniffer sample time + HTTP proxy port + HTTP server port + SSL stripping + HTTPS redirector port + HTTP max buffer size + Password sniffer file Check for updates every time the application is started. Prevents the device going in sleep mode while the application is running. Global save path to put every log file. @@ -418,7 +418,7 @@ Auto port-scan Always SYN scan for open ports when new host is discovered - Exploit Finder + Exploit finder Search for exploit that matches found vulnerabilities. Launch all Sessions @@ -435,10 +435,10 @@ Add Scan - WiFi Scan + WiFi scan Stop MSFRPCD - Dark Theme + Dark theme Enable the dark theme, which is easier on the eyes The new theme will not be applied until you restart the app Evasion @@ -487,19 +487,19 @@ Core version %s is available, do you want to upgrade ? Updates App - check for App updates + Check for app updates Core - check for Core updates + Check for core updates Ruby - check for Ruby updates + Check for Ruby updates MSF - check for MSF updates + Check for MSF updates RubyGems - check for RubyGems updates + Check for RubyGems updates Custom manifest - custom MSF manifest URL - Build Info - Multi Action + Custom MSF manifest URL + Build info + Multi action focused scan resolve hostnames @@ -509,13 +509,13 @@ The JNI library has crashed previously. Reporting the circumstances leading to the crash would be appreciated. Update cancelled Cannot start process - MSF RPC Daemon killed - MSF RPC Daemon failed to start - Connection to the MSF RPC Daemon FAILED! + MSF RPC daemon killed + MSF RPC daemon failed to start + Connection to the MSF RPC daemon FAILED! Network discovery FAILED to start! App version %s is available, do you want to upgrade ? - A new version for ruby is available, do you want to upgrade ? - A new msf version is available, do you want to upgrade ? + A new version of Ruby is available, do you want to upgrade ? + A new MSF version is available, do you want to upgrade ? Metasploit Status Ranking: %s Manual From ebb4accce4c431856e63e7a40e580200928b4613 Mon Sep 17 00:00:00 2001 From: fattire Date: Tue, 6 Oct 2015 21:05:17 -0700 Subject: [PATCH 37/49] aesthetic webview changes -- don't spellcheck URL + more --- .../res/layout/plugin_mitm_hijacker_webview.xml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/cSploit/res/layout/plugin_mitm_hijacker_webview.xml b/cSploit/res/layout/plugin_mitm_hijacker_webview.xml index fee5544226..f764be926f 100644 --- a/cSploit/res/layout/plugin_mitm_hijacker_webview.xml +++ b/cSploit/res/layout/plugin_mitm_hijacker_webview.xml @@ -11,9 +11,9 @@ android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignParentTop="true" + android:layout_marginTop="-7dp" android:maxHeight="4dp" - android:visibility="visible" - android:layout_marginTop="-6dp"/> + android:visibility="visible" /> + android:translationZ="-6dp" /> From a28bd01014bc6974f0c5b1c9eb180df852562fa5 Mon Sep 17 00:00:00 2001 From: tux_mind Date: Wed, 7 Oct 2015 13:21:12 +0200 Subject: [PATCH 38/49] change autoScan state only when needed, do not check on every host found --- .../org/csploit/android/SettingsActivity.java | 3 ++ .../src/org/csploit/android/core/System.java | 5 ++- .../android/services/NetworkRadar.java | 38 ++++++++++--------- 3 files changed, 28 insertions(+), 18 deletions(-) diff --git a/cSploit/src/org/csploit/android/SettingsActivity.java b/cSploit/src/org/csploit/android/SettingsActivity.java index aeafbb69b5..4a64f9787a 100644 --- a/cSploit/src/org/csploit/android/SettingsActivity.java +++ b/cSploit/src/org/csploit/android/SettingsActivity.java @@ -41,6 +41,7 @@ import org.csploit.android.gui.dialogs.ChoiceDialog; import org.csploit.android.gui.dialogs.ConfirmDialog; import org.csploit.android.net.GitHubParser; +import org.csploit.android.services.Services; import org.csploit.android.tools.Raw; import org.json.JSONException; @@ -376,6 +377,8 @@ public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, Strin } else if (key.equals("MSF_ENABLED")) { if (mMsfEnabled.isChecked()) onMsfEnabled(); + } else if (key.equals("PREF_AUTO_PORTSCAN")) { + Services.getNetworkRadar().onAutoScanChanged(); } if (message != null) diff --git a/cSploit/src/org/csploit/android/core/System.java b/cSploit/src/org/csploit/android/core/System.java index 450f589062..bb84779006 100644 --- a/cSploit/src/org/csploit/android/core/System.java +++ b/cSploit/src/org/csploit/android/core/System.java @@ -305,6 +305,7 @@ public static void shutdownCoreDaemon(){ Client.Disconnect(); mCoreInitialized = false; + Services.getNetworkRadar().onAutoScanChanged(); } public static void initCore() throws DaemonException, SuException { @@ -335,6 +336,7 @@ public static void initCore() throws DaemonException, SuException { reloadTools(); mCoreInitialized = true; + Services.getNetworkRadar().onAutoScanChanged(); } public static void reloadNetworkMapping(){ @@ -948,7 +950,7 @@ public static void reset() { } public static void scanThemAll() { - if(!mCoreInitialized) { + if(!Services.getNetworkRadar().isAutoScanEnabled()) { return; } synchronized (mTargets) { @@ -1212,6 +1214,7 @@ public static void clean(boolean releaseLocks){ Client.Disconnect(); mCoreInitialized = false; + Services.getNetworkRadar().onAutoScanChanged(); } catch(Exception e){ errorLogging(e); diff --git a/cSploit/src/org/csploit/android/services/NetworkRadar.java b/cSploit/src/org/csploit/android/services/NetworkRadar.java index 3001195ca1..9a81cd5a08 100644 --- a/cSploit/src/org/csploit/android/services/NetworkRadar.java +++ b/cSploit/src/org/csploit/android/services/NetworkRadar.java @@ -26,6 +26,8 @@ public class NetworkRadar extends NativeService implements MenuControllableServi public static final String NRDR_STARTED = "NetworkRadar.action.STARTED"; public static final String NRDR_START_FAILED = "NetworkRadar.action.START_FAILED"; + private boolean autoScan = true; + public NetworkRadar(Context context) { this.context = context; } @@ -69,26 +71,28 @@ public void buildMenuItem(MenuItem item) { item.setEnabled(System.getTools().networkRadar.isEnabled() && System.getNetwork() != null); } - public void onNewTargetFound(final Target target) { - if (target.getType() == Target.Type.NETWORK) - return; + public void onAutoScanChanged() { + autoScan = System.isCoreInitialized() && System.getSettings().getBoolean("PREF_AUTO_PORTSCAN", true); + Logger.info("autoScan has been set to " + autoScan); + } - if (!System.isCoreInitialized()) { + public boolean isAutoScanEnabled() { + return autoScan; + } + + public void onNewTargetFound(final Target target) { + if(!autoScan || target.getType() == Target.Type.NETWORK) return; - } - SharedPreferences prefs = System.getSettings(); - if (prefs.getBoolean("PREF_AUTO_PORTSCAN", true)) { - ThreadHelper.getSharedExecutor().execute(new Runnable() { - @Override - public void run() { - try { - System.getTools().nmap.synScan(target, new ScanReceiver(target)); - } catch (ChildManager.ChildNotStartedException e) { - System.errorLogging(e); - } + ThreadHelper.getSharedExecutor().execute(new Runnable() { + @Override + public void run() { + try { + System.getTools().nmap.synScan(target, new ScanReceiver(target)); + } catch (ChildManager.ChildNotStartedException e) { + System.errorLogging(e); } - }); - } + } + }); } private class Receiver extends HostReceiver { From 3ae622c337aaa45389d06c3fc120dd2de0e15d10 Mon Sep 17 00:00:00 2001 From: Rubenoo Date: Wed, 7 Oct 2015 18:45:27 +0200 Subject: [PATCH 39/49] Updated dutch translation It doesn't break anything :) --- cSploit/res/values-nl/strings.xml | 65 +++++++++++++++++++------------ 1 file changed, 40 insertions(+), 25 deletions(-) diff --git a/cSploit/res/values-nl/strings.xml b/cSploit/res/values-nl/strings.xml index 367cc8480c..14c3b62c0f 100644 --- a/cSploit/res/values-nl/strings.xml +++ b/cSploit/res/values-nl/strings.xml @@ -29,8 +29,8 @@ Dit zal cSploit afsluiten, weet je het zeker? Opdracht Verbind - Verbinden met MetaSploit - Verbonden met MetaSploit + Verbinden met Metasploit + Verbonden met Metasploit ]]> met sleutel ]]> !]]> @@ -58,7 +58,7 @@ Verwijder vorige locatie? Apparaat Type: Vrijwaring - Verbinding met MetaSploit verbroken + Verbinding met Metasploit verbroken Update aan het downloaden… Dump verkeer naar Legen port lijst @@ -159,7 +159,7 @@ Raporteer een fout WiFi Scan Minimale lengte - de Core is niet geinstalleerd, de applicatie zal nu kijken voor updates #STATUS# + de Core is niet geinstalleerd, de applicatie zal nu kijken voor updates. #STATUS# MITM Verbreek Connecties Dit zal het doelwit weerhouden om alle sites te bereiken. @@ -187,7 +187,7 @@ Vervang Videos Vervang alle YouTube video\'s op een website met één specifieke video. Verbinding met MSF RPC Daemon maken GEFAALD! - MetaSploit Status + Metasploit Status MSF RPC Daemon heeft gefaald om het te starten MSF RPC heeft de verbinding verbroken MSF RPC Daemon afgesloten @@ -200,7 +200,7 @@ Core versie %s is beschikbaar, wil je updaten? Een update voor ruby gems Een nieuwe MSF versie is beschikbaar, wil je updaten? - Een MetaSploitFramework update + Een MetasploitFramework update Een nieuwe versie van Ruby is beschikbaar, wil je updaten? Een update voor Ruby is beschikbaar Nieuwe sessie is gestart @@ -267,22 +267,22 @@ HTTPS herleider Port MITM https herleidings server port om naar te luisteren Modules - MetaSploit Framework - De MetaSploit Framework branch om te gebruiken + Metasploit Framework + De Metasploit Framework branch om te gebruiken MSF Branch Kijk voor MSF updates Check voor MSF updates elke keer als de applicatie opstart Verwijder MSF - Verwijder de MetaSploit Framework van je apparaat + Verwijder de Metasploit Framework van je apparaat Activeer MSF - Activeer de MetaSploit Framework + Activeer de Metasploit Framework Aangepaste manifest aangepaste MSF manifest URL MSF status notificaties Kijk naar de MSF RPC connectie status MSF map - In deze map zit de MetaSploit Framework. - Wil je echt de MetaSploit Framework verwijderen? + In deze map zit de Metasploit Framework. + Wil je echt de Metasploit Framework verwijderen? Ongeveer %d MB zal verwijderd worden Wachtwoord Sniffer Bestand Naam van het bestand om de wachtwoord en cookies te loggen. @@ -295,15 +295,15 @@ persistent network monitor Zorgt ervoor de de netwerk monitor het netwerk blijft monitoren RPC host - Host waar de MetaSploit RPC server is in + Host waar de Metasploit RPC server is in RPC port - Port waarmee je verbind met MetaSploit RPCD + Port waarmee je verbind met Metasploit RPCD RPC wachtwoord - Wachtwoord om te verbinden met MetaSploit RPCD + Wachtwoord om te verbinden met Metasploit RPCD RPC gebruikt SSL - Specifikeer of MetaSploit RPC SLL gebruikt + Specifikeer of Metasploit RPC SLL gebruikt RPC gebruikersnaam - Gebruikersnaam om te verbinden met MetaSploit RPCD. + Gebruikersnaam om te verbinden met Metasploit RPCD. Ruby map Map waarin de ruby interpreters inzitten. Sla pad op @@ -335,11 +335,11 @@ Herstel het orginele pad Router PWN Activeer de http://routerpwn.com/ service op je router. - MetaSploit RPCD is al gestart - MetaSploit RPCD gestart - MetaSploit RPCD wordt gestart. Geduld… - MetaSploit RPCD is gestopt - MetaSploit RPCD reageert niet + Metasploit RPCD is al gestart + Metasploit RPCD gestart + Metasploit RPCD wordt gestart. Geduld… + Metasploit RPCD is gestopt + Metasploit RPCD reageert niet Uitvoeren Opslaan Sla Sessie op @@ -375,11 +375,11 @@ Stoppen met sniffen en beginnen met sessie hijacking? Beginnen met sessie hijacken? Start Netwerk Monitor - Start MetaSploit RPCD + Start Metasploit RPCD Opstarten … Stop Stop Netwerk Monitor - Stop MetaSploit RPCD + Stop Metasploit RPCD Gestopt… Gestopt … Klik opniew om te stoppen @@ -422,4 +422,19 @@ WiFi connectie ging weg. Met sleutel Ja -
\ No newline at end of file + Voordat je een problem reporteerd, lees alstublieft Raporteerd een probleem, Waarschijnlijk is het probleem al raporteerd, als dat niet zo is reporteer het dan met zo veel mogelijk informatie. Leesdit artikel Om te weten hoe je een probleem zo goed mogelijk te raporteren.

]]>
+ Selecteer %s ? + Selecteer doelwit + Beoordeling: %s + Normaal + Uitstekend + Goed + Erg Goed + Slecht + Handmatig + Normaal + Ports + Automatische poort-scan + Scan altijd een doelwit met SYNC scanner als een doelwit gevonden word + Aangepaste parameters +
From b3ad6b700b2ae4b47cac3e3bd854b205505d99f2 Mon Sep 17 00:00:00 2001 From: tux_mind Date: Thu, 8 Oct 2015 17:10:21 +0200 Subject: [PATCH 40/49] fixes #392 --- cSploit/src/org/csploit/android/net/datasource/CVEDetails.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cSploit/src/org/csploit/android/net/datasource/CVEDetails.java b/cSploit/src/org/csploit/android/net/datasource/CVEDetails.java index 82df4b806e..c85a9f79fd 100644 --- a/cSploit/src/org/csploit/android/net/datasource/CVEDetails.java +++ b/cSploit/src/org/csploit/android/net/datasource/CVEDetails.java @@ -58,7 +58,7 @@ private void checkCompatibility(String html) { target = exploit.getParent(); - if(!target.hasOpenPorts()) { + if(target == null || !target.hasOpenPorts()) { return; } From cc7dc50ee020d10342c41feec9f7757fbe640a65 Mon Sep 17 00:00:00 2001 From: Ilya Date: Fri, 9 Oct 2015 00:11:01 +0900 Subject: [PATCH 41/49] Updated russian translation Added 5 strings (about: opening issue, port scanning). Fixed missing space after "Selected" string --- cSploit/res/values-ru/strings.xml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/cSploit/res/values-ru/strings.xml b/cSploit/res/values-ru/strings.xml index 47718bd5a5..0218ed8b8e 100644 --- a/cSploit/res/values-ru/strings.xml +++ b/cSploit/res/values-ru/strings.xml @@ -8,6 +8,7 @@ Введите параметры переадресации ниже: Адрес Порт + Порты Цель Неизвестно Сервисы @@ -73,7 +74,7 @@ Приложение cSploit будет закрыто, вы уверены, что хотите продолжить? Нажмите назад ещё раз, чтобы закрыть приложение. - Выбрано  + Выбрано Не найдено файлов сессии на карте памяти. Выберите файл сессии с карты памяти: Выбор сессии @@ -373,6 +374,8 @@ Размер буфера может быть от 1024 до 104857600. Постоянный мониторинг сети Постоянно продолжать мониторинг сети + Автоматическое сканирование портов + Всегда проводить SYN сканирование портов когда найден новый хост Выберите ветку: Настройки поиска Недопустимо создание исполняемого контента @@ -486,4 +489,5 @@ Превосходный Выбрать цель Выбрать %s ? + Перед открытием новой проблемы поищите посмотрите список в открытых проблем, возможно она уже открыта. Если нету сообщения о проблеме нам нужны как можно больше данных, так что пожайлуста прочитайте это руководство, чтобы знать как правильно сообщить о баге.

]]>
From 05608cbff6db5d4f29b4f746ef52b5961bd50b31 Mon Sep 17 00:00:00 2001 From: tux_mind Date: Thu, 8 Oct 2015 17:15:54 +0200 Subject: [PATCH 42/49] fixes #393 --- cSploit/src/org/csploit/android/net/Target.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cSploit/src/org/csploit/android/net/Target.java b/cSploit/src/org/csploit/android/net/Target.java index 5712d510e6..6b20888b38 100644 --- a/cSploit/src/org/csploit/android/net/Target.java +++ b/cSploit/src/org/csploit/android/net/Target.java @@ -230,7 +230,10 @@ public int getDrawableResourceId() { } public boolean equals(Object o) { - return !(o == null || o.getClass() != this.getClass()) && ((Exploit) o).getId().equals(getId()); + if(o == null || o.getClass() != this.getClass()) + return false; + Exploit other = (Exploit) o; + return id == null ? other.id == null : id.equals(other.id); } public void addReference(Reference ref) { From 598eb77cfb60eaf4fcf88f1cf8f88d5011ffd0df Mon Sep 17 00:00:00 2001 From: fattire Date: Sat, 10 Oct 2015 00:53:34 -0700 Subject: [PATCH 43/49] update gradle plugin from 1.4.0b3->b6 --- build.gradle | 2 +- cSploit/build.gradle | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 596a216230..c0bd27756b 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:1.3.1' + classpath 'com.android.tools.build:gradle:1.4.0-beta6' } } diff --git a/cSploit/build.gradle b/cSploit/build.gradle index 3471e20f3f..83d05c94fa 100644 --- a/cSploit/build.gradle +++ b/cSploit/build.gradle @@ -4,7 +4,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:1.4.0-beta3' + classpath 'com.android.tools.build:gradle:1.4.0-beta6' } } @@ -87,6 +87,7 @@ android { debuggable true jniDebuggable true zipAlignEnabled true + multiDexEnabled true } release { buildConfigField "java.util.Date", "BUILD_TIME", "new java.util.Date(" + getDate() + "L)" @@ -94,6 +95,7 @@ android { if (System.getenv("KEYSTORE_FILE") != null) { signingConfig signingConfigs.release } + multiDexEnabled true return true } } @@ -102,7 +104,6 @@ android { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] - resources.srcDirs = ['src'] aidl.srcDirs = ['src'] renderscript.srcDirs = ['src'] res.srcDirs = ['res'] From 2f20205b97269c8813e30331cd7df6046275a845 Mon Sep 17 00:00:00 2001 From: fattire Date: Mon, 12 Oct 2015 01:58:43 -0700 Subject: [PATCH 44/49] Rubenoo's New portcount design(small changes) squished + 1 change --- cSploit/res/drawable/rounded_square.xml | 2 +- cSploit/res/drawable/rounded_square_grey.xml | 6 ++++++ cSploit/res/layout/target_list_item.xml | 2 +- cSploit/src/org/csploit/android/MainActivity.java | 2 ++ 4 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 cSploit/res/drawable/rounded_square_grey.xml diff --git a/cSploit/res/drawable/rounded_square.xml b/cSploit/res/drawable/rounded_square.xml index 50a1009bc5..739b0338ec 100644 --- a/cSploit/res/drawable/rounded_square.xml +++ b/cSploit/res/drawable/rounded_square.xml @@ -1,5 +1,5 @@ - + diff --git a/cSploit/res/drawable/rounded_square_grey.xml b/cSploit/res/drawable/rounded_square_grey.xml new file mode 100644 index 0000000000..5ca9b73ab4 --- /dev/null +++ b/cSploit/res/drawable/rounded_square_grey.xml @@ -0,0 +1,6 @@ + + + + + diff --git a/cSploit/res/layout/target_list_item.xml b/cSploit/res/layout/target_list_item.xml index 326f459f3d..654731850e 100644 --- a/cSploit/res/layout/target_list_item.xml +++ b/cSploit/res/layout/target_list_item.xml @@ -64,7 +64,7 @@ android:layout_row="0" android:gravity="top|center_horizontal" android:text="@string/ports" - android:textColor="@color/selectable_blue" + android:textColor="@color/primary_material_light" android:textSize="12dp" android:textStyle="bold" /> diff --git a/cSploit/src/org/csploit/android/MainActivity.java b/cSploit/src/org/csploit/android/MainActivity.java index ce2337e7b1..157d8ad230 100644 --- a/cSploit/src/org/csploit/android/MainActivity.java +++ b/cSploit/src/org/csploit/android/MainActivity.java @@ -857,6 +857,8 @@ public View getView(int position, View convertView, ViewGroup parent) { .findViewById(R.id.portCount) : null); holder.portCountLayout = (LinearLayout) (row != null ? row .findViewById(R.id.portCountLayout) : null); + if (isDark) + holder.portCountLayout.setBackgroundResource(R.drawable.rounded_square_grey); if (row != null) row.setTag(holder); } else From 7bbd294ce1ee988d9cf37db300366fbebf203be1 Mon Sep 17 00:00:00 2001 From: fattire Date: Mon, 12 Oct 2015 00:31:28 -0700 Subject: [PATCH 45/49] Quick (not by any means final) materialization of buttons w/fabs/colors. Not everything here is done as well as it could be, but it's meant only as a step in the right direction. It's possible some stuff was inadvertantly broken. Could use animation and stuff, and probably shouldn't hard-code in so much color and the like. A few buttons and such may have been missed, but I think it's by-and-large better than the plain grey buttons that were there before. --- cSploit/res/drawable/ic_play_arrow_24dp.xml | 9 ++ cSploit/res/drawable/ic_stop_24dp.xml | 9 ++ cSploit/res/layout/dirpicker_chooser_list.xml | 30 +++---- cSploit/res/layout/file_edit.xml | 4 +- cSploit/res/layout/plugin_exploit_finder.xml | 39 ++++----- cSploit/res/layout/plugin_inspector.xml | 68 ++++++++------- cSploit/res/layout/plugin_login_cracker.xml | 24 +++--- .../res/layout/plugin_mitm_dns_spoofing.xml | 83 ++++++++++--------- cSploit/res/layout/plugin_mitm_hijacker.xml | 2 + .../layout/plugin_mitm_password_sniffer.xml | 4 +- cSploit/res/layout/plugin_mitm_sniffer.xml | 4 +- cSploit/res/layout/plugin_packet_forger.xml | 12 ++- cSploit/res/layout/plugin_portscanner.xml | 39 ++++----- cSploit/res/layout/plugin_traceroute.xml | 26 ++---- .../android/plugins/ExploitFinder.java | 22 +++-- .../csploit/android/plugins/Inspector.java | 11 ++- .../csploit/android/plugins/LoginCracker.java | 12 +-- .../csploit/android/plugins/PortScanner.java | 12 +-- .../csploit/android/plugins/Traceroute.java | 12 +-- 19 files changed, 225 insertions(+), 197 deletions(-) create mode 100644 cSploit/res/drawable/ic_play_arrow_24dp.xml create mode 100644 cSploit/res/drawable/ic_stop_24dp.xml diff --git a/cSploit/res/drawable/ic_play_arrow_24dp.xml b/cSploit/res/drawable/ic_play_arrow_24dp.xml new file mode 100644 index 0000000000..81a8f74f6e --- /dev/null +++ b/cSploit/res/drawable/ic_play_arrow_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/cSploit/res/drawable/ic_stop_24dp.xml b/cSploit/res/drawable/ic_stop_24dp.xml new file mode 100644 index 0000000000..c5b211a777 --- /dev/null +++ b/cSploit/res/drawable/ic_stop_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/cSploit/res/layout/dirpicker_chooser_list.xml b/cSploit/res/layout/dirpicker_chooser_list.xml index 2b73ec087a..e777df513a 100644 --- a/cSploit/res/layout/dirpicker_chooser_list.xml +++ b/cSploit/res/layout/dirpicker_chooser_list.xml @@ -1,22 +1,24 @@ + android:layout_width="fill_parent" + android:layout_height="fill_parent" + android:orientation="vertical" + android:padding="8dp"> + android:id="@android:id/list" + android:layout_width="fill_parent" + android:layout_height="0dp" + android:layout_weight="1" />