Skip to content

Commit 80c6125

Browse files
committed
should fix #329
1 parent e14d03b commit 80c6125

6 files changed

Lines changed: 138 additions & 134 deletions

File tree

cSploit/src/org/csploit/android/ActionActivity.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,14 @@
3838
import org.csploit.android.core.Plugin;
3939
import org.csploit.android.core.System;
4040
import org.csploit.android.gui.dialogs.FinishDialog;
41+
import org.csploit.android.net.Target;
4142

4243
import java.util.ArrayList;
4344

4445
public class ActionActivity extends AppCompatActivity {
4546
private ArrayList<Plugin> mAvailable = null;
4647
private ListView theList;
48+
private Target mTarget;
4749

4850
@Override
4951
public void onCreate(Bundle savedInstanceState) {
@@ -56,8 +58,10 @@ public void onCreate(Bundle savedInstanceState) {
5658
setTheme(R.style.AppTheme);
5759
super.onCreate(savedInstanceState);
5860

59-
if (System.getTargets() != null && System.getTargets().size() > 0 && System.getCurrentTarget() != null) {
60-
setTitle("cSploit > " + System.getCurrentTarget());
61+
mTarget = System.getCurrentTarget();
62+
63+
if (mTarget != null) {
64+
setTitle("cSploit > " + mTarget);
6165
setContentView(R.layout.actions_layout);
6266
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
6367
theList = (ListView) findViewById(R.id.android_list);

cSploit/src/org/csploit/android/MainActivity.java

Lines changed: 56 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
import android.view.ViewGroup.LayoutParams;
4141
import android.widget.AdapterView;
4242
import android.widget.AdapterView.OnItemLongClickListener;
43-
import android.widget.ArrayAdapter;
43+
import android.widget.BaseAdapter;
4444
import android.widget.ImageView;
4545
import android.widget.ListView;
4646
import android.widget.RelativeLayout;
@@ -91,6 +91,9 @@
9191
import java.io.IOException;
9292
import java.net.NoRouteToHostException;
9393
import java.util.ArrayList;
94+
import java.util.List;
95+
import java.util.Observable;
96+
import java.util.Observer;
9497

9598
import static org.csploit.android.services.UpdateChecker.UPDATE_AVAILABLE;
9699
import static org.csploit.android.services.UpdateChecker.UPDATE_CHECKING;
@@ -180,7 +183,7 @@ public void createOnlineLayout() {
180183
lv.setOnItemLongClickListener(new OnItemLongClickListener() {
181184
@Override
182185
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
183-
Target t = System.getTarget(position);
186+
Target t = (Target) mTargetAdapter.getItem(position);
184187
if (t.getType() == Target.Type.NETWORK) {
185188
if (mActionMode == null)
186189
targetAliasPrompt(t);
@@ -200,7 +203,7 @@ public boolean onItemLongClick(AdapterView<?> parent, View view, int position, l
200203
mWipeReceiver.register(MainActivity.this);
201204
mMsfReceiver.register(MainActivity.this);
202205

203-
mRadarReceiver.setTargetAdapter(mTargetAdapter);
206+
mRadarReceiver.setObserver(mTargetAdapter);
204207

205208
StartRPCServer();
206209

@@ -317,6 +320,9 @@ public void onItemClick(AdapterView<?> parent, View view, int position, long id)
317320
return;
318321
}
319322

323+
Target target = (Target) mTargetAdapter.getItem(position);
324+
System.setCurrentTarget(target);
325+
320326
new Thread(new Runnable() {
321327
@Override
322328
public void run() {
@@ -329,7 +335,6 @@ public void run() {
329335
}
330336
}).start();
331337

332-
System.setCurrentTarget(position);
333338
Toast.makeText(MainActivity.this,
334339
getString(R.string.selected_) + System.getCurrentTarget(),
335340
Toast.LENGTH_SHORT).show();
@@ -497,9 +502,11 @@ public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
497502
case R.id.multi_action:
498503
final int[] selected = mTargetAdapter.getSelectedPositions();
499504
if (selected.length > 1) {
500-
commonPlugins = System.getPluginsForTarget(System.getTarget(selected[0]));
505+
Target target = (Target) mTargetAdapter.getItem(selected[0]);
506+
commonPlugins = System.getPluginsForTarget(target);
501507
for (int i = 1; i < selected.length; i++) {
502-
ArrayList<Plugin> targetPlugins = System.getPluginsForTarget(System.getTarget(selected[i]));
508+
target = (Target) mTargetAdapter.getItem(selected[i]);
509+
ArrayList<Plugin> targetPlugins = System.getPluginsForTarget(target);
503510
ArrayList<Plugin> removeThem = new ArrayList<Plugin>();
504511
for (Plugin p : commonPlugins) {
505512
if (!targetPlugins.contains(p))
@@ -533,7 +540,7 @@ public void onChoice(int[] choices) {
533540
(new ErrorDialog(getString(R.string.error), "no common actions found", MainActivity.this)).show();
534541
}
535542
} else {
536-
targetAliasPrompt(System.getTarget(selected[0]));
543+
targetAliasPrompt((Target) mTargetAdapter.getItem(selected[0]));
537544
}
538545
mode.finish(); // Action picked, so close the CAB
539546
return true;
@@ -817,14 +824,24 @@ public void onDestroy() {
817824
super.onDestroy();
818825
}
819826

820-
public class TargetAdapter extends ArrayAdapter<Target> {
821-
public TargetAdapter() {
822-
super(MainActivity.this, R.layout.target_list_item);
823-
}
827+
public class TargetAdapter extends BaseAdapter implements Runnable, Observer {
828+
829+
private List<Target> list = System.getTargets();
830+
private boolean isDark = getSharedPreferences("THEME", 0).getBoolean("isDark", false);
824831

825832
@Override
826833
public int getCount() {
827-
return System.getTargets().size();
834+
return list.size();
835+
}
836+
837+
@Override
838+
public Object getItem(int position) {
839+
return list.get(position);
840+
}
841+
842+
@Override
843+
public long getItemId(int position) {
844+
return R.layout.target_list_item;
828845
}
829846

830847
@Override
@@ -835,24 +852,21 @@ public View getView(int position, View convertView, ViewGroup parent) {
835852
if (row == null) {
836853
LayoutInflater inflater = (LayoutInflater) MainActivity.this
837854
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
838-
row = inflater
839-
.inflate(R.layout.target_list_item, parent, false);
840-
if (getSharedPreferences("THEME", 0).getBoolean("isDark", false))
855+
row = inflater.inflate(R.layout.target_list_item, parent, false);
856+
857+
if (isDark)
841858
row.setBackgroundResource(R.drawable.card_background_dark);
859+
842860
holder = new TargetHolder();
843-
holder.itemImage = (ImageView) (row != null ? row
844-
.findViewById(R.id.itemIcon) : null);
845-
holder.itemTitle = (TextView) (row != null ? row
846-
.findViewById(R.id.itemTitle) : null);
847-
holder.itemDescription = (TextView) (row != null ? row
848-
.findViewById(R.id.itemDescription) : null);
849-
850-
if (row != null)
851-
row.setTag(holder);
861+
holder.itemImage = (ImageView) row.findViewById(R.id.itemIcon);
862+
holder.itemTitle = (TextView) row.findViewById(R.id.itemTitle);
863+
holder.itemDescription = (TextView) row.findViewById(R.id.itemDescription);
864+
865+
row.setTag(holder);
852866
} else
853867
holder = (TargetHolder) row.getTag();
854868

855-
Target target = System.getTarget(position);
869+
Target target = list.get(position);
856870

857871
if (target.hasAlias())
858872
holder.itemTitle.setText(Html.fromHtml("<b>"
@@ -864,8 +878,6 @@ public View getView(int position, View convertView, ViewGroup parent) {
864878

865879
holder.itemTitle.setTextColor(getResources().getColor((target.isConnected() ? R.color.app_color : R.color.gray_text)));
866880

867-
if (row != null && (getSharedPreferences("THEME", 0).getBoolean("isDark", false)))
868-
row.setBackgroundResource(R.drawable.card_background_dark);
869881
holder.itemTitle.setTypeface(null, Typeface.NORMAL);
870882
holder.itemImage.setImageResource(target.getDrawableResourceId());
871883
holder.itemDescription.setText(target.getDescription());
@@ -874,15 +886,15 @@ public View getView(int position, View convertView, ViewGroup parent) {
874886
}
875887

876888
public void clearSelection() {
877-
for (Target t : System.getTargets())
889+
for (Target t : list)
878890
t.setSelected(false);
879891
notifyDataSetChanged();
880892
if (mActionMode != null)
881893
mActionMode.finish();
882894
}
883895

884896
public void toggleSelection(int position) {
885-
Target t = System.getTarget(position);
897+
Target t = list.get(position);
886898
t.setSelected(!t.isSelected());
887899
notifyDataSetChanged();
888900
if (mActionMode != null) {
@@ -895,15 +907,15 @@ public void toggleSelection(int position) {
895907

896908
public int getSelectedCount() {
897909
int i = 0;
898-
for (Target t : System.getTargets())
910+
for (Target t : list)
899911
if (t.isSelected())
900912
i++;
901913
return i;
902914
}
903915

904916
public ArrayList<Target> getSelected() {
905917
ArrayList<Target> result = new ArrayList<Target>();
906-
for (Target t : System.getTargets())
918+
for (Target t : list)
907919
if (t.isSelected())
908920
result.add(t);
909921
return result;
@@ -913,12 +925,23 @@ public int[] getSelectedPositions() {
913925
int[] res = new int[getSelectedCount()];
914926
int j = 0;
915927

916-
for (int i = 0; i < System.getTargets().size(); i++)
917-
if (System.getTarget(i).isSelected())
928+
for (int i = 0; i < list.size(); i++)
929+
if (list.get(i).isSelected())
918930
res[j++] = i;
919931
return res;
920932
}
921933

934+
@Override
935+
public void update(Observable observable, Object data) {
936+
MainActivity.this.runOnUiThread(this);
937+
}
938+
939+
@Override
940+
public void run() {
941+
list = System.getTargets();
942+
notifyDataSetChanged();
943+
}
944+
922945
class TargetHolder {
923946
ImageView itemImage;
924947
TextView itemTitle;

cSploit/src/org/csploit/android/core/MultiAttackService.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import org.csploit.android.net.metasploit.MsfExploit;
1717
import org.csploit.android.tools.NMap;
1818

19+
import java.util.List;
1920
import java.util.concurrent.ExecutionException;
2021
import java.util.concurrent.ExecutorService;
2122
import java.util.concurrent.Executors;
@@ -264,10 +265,12 @@ protected void onHandleIntent(Intent intent) {
264265
mRunning = true;
265266

266267
//fetch targets
268+
// TODO: rewrite this service since target index may change
269+
List<Target> list = System.getTargets();
267270
Target[] targets = new Target[targetsIndex.length];
268271

269272
for(i =0; i< targetsIndex.length;i++)
270-
targets[i] = System.getTarget(targetsIndex[i]);
273+
targets[i] = list.get(targetsIndex[i]);
271274

272275
//fetch tasks
273276
for(int stringId : actions) {

0 commit comments

Comments
 (0)