Skip to content

Commit 3e6304c

Browse files
authored
Merge pull request #50 from xianglin1998/master
SimpleConsoleView test work finally
2 parents 9a0eef2 + 6b43799 commit 3e6304c

40 files changed

+969
-160
lines changed

.gitmodules

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
[submodule "pm3rdv4rrg/src/main/cpp/proxmark3"]
2+
path = pm3rdv4rrg/src/main/cpp/proxmark3
3+
url = https://github.com/xianglin1998/proxmark3.git
4+
[submodule "pm3rdv4rrg/src/main/cpp/bzip2"]
5+
path = pm3rdv4rrg/src/main/cpp/bzip2
6+
url = http://sourceware.org/git/bzip2.git

README.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,19 @@ Download and flash [Compiled FW 12 August](https://www.dropbox.com/s/416lsrqpr2l
6363
- CMAKE: 3.10
6464
- NDK: 20.0.5594570
6565

66+
## How to build?
67+
The RFIDTools have some gitsubmodule
68+
69+
Get the source from GitHub:
70+
71+
git clone https://github.com/xianglin1998/RFIDtools RFIDtools
72+
cd RFIDtools
73+
git submodule init
74+
git submodule update
75+
76+
77+
After clone and init submodule, you can use your AndroidStudio open this project.
78+
6679
## App core implementation
6780

6881
Comunication: LocalSocket & LocalServerSocket(Android)

app_main/build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ android {
88
minSdkVersion 24
99
targetSdkVersion 28
1010
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
11-
versionCode 24
12-
versionName "1.4.6 Termux"
11+
versionCode 25
12+
versionName "1.4.7 Termux and SimpleView"
1313
}
1414
buildTypes {
1515
release {
@@ -66,8 +66,8 @@ dependencies {
6666
implementation project(':chameleon')
6767
implementation project(':communication')
6868

69-
testImplementation 'junit:junit:4.12'
7069
implementation project(path: ':pm3flasher')
70+
implementation project(':pm3rdv4rrg')
7171
implementation project(path: ':xmodem')
7272

7373
// The dep from TERMUX(A FullTerminal implements.)

app_main/src/main/AndroidManifest.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,8 @@
7777
<activity android:name=".activities.tools.KeyFileListActivity" />
7878
<activity android:name=".activities.main.PM3FlasherMainActivity" />
7979
<activity android:name=".activities.tools.Proxmark3FirmwareActivity" />
80-
<activity android:name=".activities.tools.Proxmark3NewTerminalInitActivity" />
80+
<activity android:name=".activities.proxmark3.rdv4_rrg.Proxmark3NewTerminalInitActivity" />
81+
<activity android:name=".activities.proxmark3.rdv4_rrg.Proxmark3Rdv4RRGRedTeamConsoleActivity" />
8182

8283
</application>
8384

app_main/src/main/assets/cmd.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@
1313
{"name": "Mifare 1k Dump", "cmd": "hf mf dump"},
1414
{"name": "Read iclass", "cmd": "hf iclass reader"},
1515
{"name": "Dump iclass legacy", "cmd": "hf iclass dump k afa785a7dab33378"},
16-
{"name": "Hardware Test", "cmd": "hw tune"}
16+
{"name": "Hardware Test", "cmd": "hw tune"},
17+
{"name": "Hardware Version", "cmd": "hw version"},
1718
],
1819
[
1920
{"name" : "High Frequency"},

app_main/src/main/java/cn/rrg/rdv/activities/connect/Proxmark3Rdv4RRGConnectActivity.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import cn.rrg.rdv.R;
1313
import cn.rrg.rdv.activities.main.PM3FlasherMainActivity;
1414
import cn.rrg.rdv.activities.tools.DeviceConnectActivity;
15-
import cn.rrg.rdv.activities.tools.Proxmark3NewTerminalInitActivity;
15+
import cn.rrg.rdv.activities.proxmark3.rdv4_rrg.Proxmark3NewTerminalInitActivity;
1616
import cn.rrg.rdv.callback.ConnectFailedCtxCallback;
1717
import cn.rrg.rdv.models.AbstractDeviceModel;
1818
import cn.rrg.rdv.models.Proxmark3Rdv4SppModel;
@@ -53,7 +53,7 @@ public Class getTarget() {
5353

5454
@Override
5555
public String getConnectingMsg() {
56-
return getString(R.string.tips_view_use_termux);
56+
return getString(R.string.tips_plz_wait);
5757
}
5858

5959
@Override

app_main/src/main/java/cn/rrg/rdv/activities/main/AppMain.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package cn.rrg.rdv.activities.main;
22

33
import android.app.AlertDialog;
4-
import android.content.Intent;
54
import android.os.Bundle;
65
import android.view.MenuItem;
76

app_main/src/main/java/cn/rrg/rdv/activities/main/BaseActivity.java

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,23 +12,19 @@
1212
import androidx.appcompat.app.AppCompatDelegate;
1313

1414
import android.util.Log;
15-
import android.view.MotionEvent;
1615
import android.view.View;
1716
import android.view.ViewGroup;
1817

19-
import java.util.ArrayList;
20-
21-
import cn.dxl.common.interfaces.OnTouchListener;
2218
import cn.dxl.common.util.DisplayUtil;
2319
import cn.dxl.common.util.HexUtil;
2420
import cn.dxl.common.util.LanguageUtil;
21+
import cn.dxl.common.util.LogUtils;
2522
import cn.dxl.common.util.StatusBarUtil;
2623
import cn.dxl.common.widget.ToastUtil;
2724
import cn.dxl.common.util.VibratorUtils;
2825
import cn.dxl.mifare.NfcTagListenUtils;
2926
import cn.dxl.mifare.StdMifareIntent;
3027
import cn.rrg.rdv.R;
31-
import cn.rrg.rdv.application.Properties;
3228
import cn.rrg.rdv.util.Commons;
3329

3430
/**
@@ -95,20 +91,16 @@ protected void onStart() {
9591
protected void onPause() {
9692
Log.d(LOG_TAG, "Act is pause");
9793
super.onPause();
98-
/*
99-
* 在这里解注册各大前台事件!
100-
* */
10194
mStdMfUtil.disableForegroundDispatch(this);
10295
}
10396

10497
@Override
10598
protected void attachBaseContext(Context newBase) {
10699
String language = Commons.getLanguage();
107100
if (language.equals("auto")) {
108-
//如果value = auto,则设置为跟随系统!
109101
super.attachBaseContext(newBase);
110102
} else {
111-
//否则国际化!
103+
LogUtils.d("New app language: " + language);
112104
super.attachBaseContext(LanguageUtil.setAppLanguage(newBase, language));
113105
}
114106
}
@@ -125,16 +117,12 @@ protected void onResume() {
125117

126118
@Override
127119
protected void onNewIntent(Intent intent) {
128-
//有新的意图时会启动
129120
Bundle data = intent.getExtras();
130121
if (data != null) {
131122
Tag tag = data.getParcelable(NfcAdapter.EXTRA_TAG);
132123
if (tag != null) {
133-
//存入全局操作域!
134124
NfcTagListenUtils.setTag(tag);
135-
//显示 UID!
136125
ToastUtil.show(this, getString(R.string.tips_uid) + HexUtil.toHexString(tag.getId()), true);
137-
//震动一下!
138126
VibratorUtils.runOneAsDelay(context, 1000);
139127
NfcTagListenUtils.notifyOnNewTag(tag);
140128
}
Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
1+
package cn.rrg.rdv.activities.proxmark3.rdv4_rrg;
2+
3+
import android.os.Bundle;
4+
import android.util.Log;
5+
import android.view.View;
6+
import android.widget.CompoundButton;
7+
8+
import androidx.annotation.Nullable;
9+
10+
import java.io.File;
11+
12+
import cn.dxl.common.util.FileUtils;
13+
import cn.rrg.console.define.ICommandTools;
14+
import cn.rrg.console.define.ICommandType;
15+
import cn.rrg.freo.IORedirector;
16+
import cn.rrg.rdv.R;
17+
import cn.rrg.rdv.activities.tools.BaseConsoleActivity;
18+
import cn.rrg.rdv.implement.EntryICommandType;
19+
import cn.rrg.rdv.util.Paths;
20+
21+
public abstract class Proxmark3ConsoleActivity
22+
extends BaseConsoleActivity
23+
implements View.OnClickListener,
24+
CompoundButton.OnCheckedChangeListener {
25+
26+
//滞留一个视图实例,可用如GUI,子控件实现!
27+
protected View guiView = null;
28+
29+
@Override
30+
protected void onCreate(@Nullable Bundle savedInstanceState) {
31+
new Thread(new Runnable() {
32+
@Override
33+
public void run() {
34+
//重定向!
35+
IORedirector.setStdEO(Paths.PM3_FORWARD_O, IORedirector.STD_OUT);
36+
IORedirector.setStdEO(Paths.PM3_FORWARD_E, IORedirector.STD_ERR);
37+
IORedirector.setStdIN(Paths.COMMON_FORWARD_I);
38+
}
39+
}).start();
40+
41+
//父类先初初始化!
42+
super.onCreate(savedInstanceState);
43+
44+
//默认关闭错误消息输出区域(用不上...)
45+
ckBoxOpenOutputError.setChecked(false);
46+
//覆盖父类的停止按钮点击实例
47+
btnStop.setOnClickListener(this);
48+
}
49+
50+
@Override
51+
public void onClick(View v) {
52+
if (v.getId() == R.id.btnStop) {//判断当前是否有客户端可终止的任务在执行,是的话则终止!
53+
new Thread(new Runnable() {
54+
@Override
55+
public void run() {
56+
//TODO 此处进行IO,模拟键盘输入!
57+
stopPM3Client4KeyBorad();
58+
}
59+
}).start();
60+
}
61+
}
62+
63+
//通过键盘输入结束任务!
64+
protected void stopPM3Client4KeyBorad() {
65+
FileUtils.writeString(new File(Paths.COMMON_FORWARD_I), "\n", true);
66+
}
67+
68+
@Override
69+
protected void onDestroy() {
70+
//非常有必要进行相关的结束操作!
71+
stopPM3Client4KeyBorad();
72+
mCMD.stopExecute();
73+
super.onDestroy();
74+
}
75+
76+
/*
77+
* 重写视图实例寻找,方便进行控制!
78+
* */
79+
@Override
80+
public <T extends View> T findViewById(int id) {
81+
T view = super.findViewById(id);
82+
return view != null ? view : guiView != null ? guiView.findViewById(id) : null;
83+
}
84+
85+
@Override
86+
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
87+
//don't need process!!!
88+
}
89+
90+
@Override
91+
protected View getCommandGUI() {
92+
return guiView;
93+
}
94+
95+
@Override
96+
protected File initOutTarget() {
97+
return new File(Paths.PM3_FORWARD_O);
98+
}
99+
100+
@Override
101+
protected File initErrTarget() {
102+
return new File(Paths.PM3_FORWARD_E);
103+
}
104+
105+
@Override
106+
protected int startTest(ICommandTools cmd) {
107+
mDefaultCMD = "help";
108+
if (edtInputCmd.getText().toString().length() > 0) {
109+
mDefaultCMD = edtInputCmd.getText().toString();
110+
}
111+
//此处做出多行执行优化!
112+
int ret = -2;
113+
//优化,如果是多行命令的操作!
114+
if (mDefaultCMD.contains("\n")) {
115+
//包含换行,则当作多行处理!
116+
String[] cmds = mDefaultCMD.split("\n");
117+
Log.d(LOG_TAG, "警告,当前执行的是多行处理操作!");
118+
for (String c : cmds) {
119+
Log.d(LOG_TAG, "当前执行的命令: " + c);
120+
mCMD.startExecute(c);
121+
}
122+
return ret;
123+
} else {
124+
//直接执行命令并且在执行命令完成后进行回调!
125+
ret = cmd.startExecute(mDefaultCMD);
126+
}
127+
return ret;
128+
}
129+
130+
@Override
131+
protected void onNewOutLine(String line) {
132+
}
133+
134+
@Override
135+
protected void onNewErrLine(String line) {
136+
}
137+
138+
@Override
139+
protected ICommandType initType() {
140+
return new EntryICommandType();
141+
}
142+
143+
@Override
144+
protected void onTestEnd() {
145+
}
146+
147+
@Override
148+
protected boolean isTesting() {
149+
return super.isTesting();
150+
}
151+
152+
@Override
153+
protected void stopTest() {
154+
//super.stopTest();
155+
//TODO 无必要停止PM3的底层线程!
156+
}
157+
}

0 commit comments

Comments
 (0)