Skip to content

Commit 1109c9c

Browse files
committed
代码优化,添加README.md
1 parent f28de41 commit 1109c9c

File tree

11 files changed

+120
-94
lines changed

11 files changed

+120
-94
lines changed

README.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# CPWechatXposed
2+
3+
4+
5+
## 项目简介
6+
7+
<br>
8+
Hook微信的Xposed模块,主要是研究逆向技术,**不会做适配**,<br>
9+
模块只保证在笔者的手机上是可以正常运行的!要适配自行修改,<br>
10+
代码都是开源的,有问题欢迎提issues,教程会同步到掘金上:<br>
11+
12+
- [抱歉,Xposed真的可以为所欲为——1.基础知识储备](https://juejin.im/post/5ad9886df265da0b776f3dcb)
13+
- [抱歉,Xposed真的可以为所欲为——2.改为OV机型流畅玩耍高帧率王者农药](https://juejin.im/post/5adafc1ef265da0b83365204)
14+
- [抱歉,Xposed真的可以为所欲为——3.微信运动占领封面出售广告位](https://juejin.im/post/5adf1d846fb9a07abb234015)
15+
- [抱歉,Xposed真的可以为所欲为——4.猜拳投骰子你能赢算我输](https://juejin.im/post/5ae1fe0e518825672a02a248)
16+
17+
**运行截图**
18+
19+
![](http://static.zybuluo.com/coder-pig/ojstsomk0gtxgi3rxegm0f6u/2.png)

app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
android:name="xposedminversion"
2222
android:value="82" />
2323

24-
<activity android:name=".SettingActivity">
24+
<activity android:name=".ui.SettingActivity">
2525
<intent-filter>
2626
<action android:name="android.intent.action.MAIN" />
2727

app/src/main/java/com/coderpig/cpwechatxposed/App.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import com.orhanobut.hawk.Hawk
55
import kotlin.properties.Delegates
66

77
/**
8-
* 描述:
8+
* 描述:应用的APP类
99
*
1010
* @author CoderPig on 2018/04/24 15:22.
1111
*/
@@ -17,6 +17,5 @@ class App : Application() {
1717
override fun onCreate() {
1818
super.onCreate()
1919
instance = this
20-
Hawk.init(this).build()
2120
}
2221
}
Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
package com.coderpig.cpwechatxposed
22

33
/**
4-
* 描述:
4+
* 描述:相关常量
55
*
66
* @author CoderPig on 2018/04/24 15:11.
77
*/
88
class Constants {
99
companion object {
10-
val IS_STEP_OPEN = "is_step_open"
11-
val CUR_STEP_MULT = "cur_step_multiple"
12-
val IS_CQ_OPEN = "is_cq_open"
13-
val IS_TZ_OPEN = "is_tz_open"
14-
val CUR_CQ_NUM = "cur_cq_num"
15-
val CUR_TZ_NUM = "cur_cq_num"
10+
val IS_STEP_OPEN = "is_step_open" //是否打开步数助手
11+
val CUR_STEP_MULT = "cur_step_multiple" //步数助手的倍数
12+
val IS_CQ_OPEN = "is_cq_open" //是否打开猜拳助手
13+
val IS_TZ_OPEN = "is_tz_open" //是够打开投骰子助手
14+
val CUR_CQ_NUM = "cur_cq_num" //猜拳数字0,1,2对应剪刀石头布
15+
val CUR_TZ_NUM = "cur_tz_num" //骰子数字0-5,对应1-6点
1616
}
1717
}

app/src/main/java/com/coderpig/cpwechatxposed/XPreferenceUtils.kt

Lines changed: 0 additions & 29 deletions
This file was deleted.

app/src/main/java/com/coderpig/cpwechatxposed/XposedInit.kt

Lines changed: 14 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
package com.coderpig.cpwechatxposed
22

3-
import android.annotation.SuppressLint
4-
import de.robv.android.xposed.*
3+
import com.coderpig.cpwechatxposed.hook.EmojiGameHook
4+
import com.coderpig.cpwechatxposed.hook.StepHook
5+
import de.robv.android.xposed.IXposedHookLoadPackage
6+
import de.robv.android.xposed.XC_MethodReplacement
7+
import de.robv.android.xposed.XSharedPreferences
8+
import de.robv.android.xposed.XposedHelpers
59
import de.robv.android.xposed.callbacks.XC_LoadPackage
610
import kotlin.properties.Delegates
711

812
/**
9-
* 描述:
13+
* 描述:Xposed 处理类
1014
*
1115
* @author CoderPig on 2018/04/24 16:03.
1216
*/
@@ -20,48 +24,18 @@ class XposedInit : IXposedHookLoadPackage {
2024
xsp.makeWorldReadable()
2125
}
2226

23-
@SuppressLint("PrivateApi")
27+
@Throws(Throwable::class)
2428
override fun handleLoadPackage(lpparam: XC_LoadPackage.LoadPackageParam) {
2529
when (lpparam.packageName) {
2630
"com.tencent.mm" -> {
27-
val c1 = Class.forName("android.hardware.SystemSensorManager\$SensorEventQueue")
28-
XposedBridge.hookAllMethods(c1, "dispatchSensorEvent", object : XC_MethodHook() {
29-
override fun beforeHookedMethod(param: MethodHookParam) {
30-
xsp.reload()
31-
if (xsp.getBoolean(Constants.IS_STEP_OPEN, false)) {
32-
val muti = xsp.getString(Constants.CUR_STEP_MULT, "1").toInt()
33-
(param.args[1] as FloatArray)[0] = (param.args[1] as FloatArray)[0] * muti
34-
}
35-
super.beforeHookedMethod(param)
36-
}
37-
})
38-
val c2 = XposedHelpers.findClass("com.tencent.mm.sdk.platformtools.bh",lpparam.classLoader)
39-
XposedHelpers.findAndHookMethod(c2, "eE", Int::class.java, Int::class.java, object : XC_MethodHook() {
40-
@Throws
41-
override fun afterHookedMethod(param: MethodHookParam) {
42-
xsp.reload()
43-
when(param.args[0]) {
44-
2 -> {
45-
if(xsp.getBoolean(Constants.IS_CQ_OPEN, false)) {
46-
val cq = xsp.getInt(Constants.CUR_CQ_NUM, 0)
47-
param.result = cq
48-
}
49-
}
50-
5 -> {
51-
if(xsp.getBoolean(Constants.IS_TZ_OPEN, false)) {
52-
val tz = xsp.getInt(Constants.CUR_TZ_NUM, 0)
53-
param.result = tz
54-
}
55-
}
56-
}
57-
super.afterHookedMethod(param)
58-
}
59-
})
31+
xsp.reload()
32+
StepHook.hook() //步数助手
33+
EmojiGameHook.hook(lpparam) //猜拳和投骰子助手
6034
}
61-
//Hook掉模块验证方法返回true
35+
//Hook掉模块验证方法返回true,验证模块是否生效
6236
"com.coderpig.cpwechatxposed" -> {
63-
XposedHelpers.findAndHookMethod("com.coderpig.cpwechatxposed.SettingActivity",
64-
lpparam.classLoader, "isModuleActive",XC_MethodReplacement.returnConstant(true))
37+
XposedHelpers.findAndHookMethod("com.coderpig.cpwechatxposed.ui.SettingActivity",
38+
lpparam.classLoader, "isModuleActive", XC_MethodReplacement.returnConstant(true))
6539
}
6640
}
6741
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.coderpig.cpwechatxposed.hook
2+
3+
import com.coderpig.cpwechatxposed.Constants
4+
import com.coderpig.cpwechatxposed.XposedInit.Companion.xsp
5+
import de.robv.android.xposed.XC_MethodHook
6+
import de.robv.android.xposed.XposedHelpers
7+
import de.robv.android.xposed.callbacks.XC_LoadPackage
8+
9+
/**
10+
* 描述:猜拳和投骰子Hook
11+
*
12+
* @author jay on 2018/4/28 15:42
13+
*/
14+
object EmojiGameHook {
15+
fun hook(lpparam: XC_LoadPackage.LoadPackageParam) {
16+
val clazz = XposedHelpers.findClass("com.tencent.mm.sdk.platformtools.bh", lpparam.classLoader)
17+
XposedHelpers.findAndHookMethod(clazz, "eE", Int::class.java, Int::class.java, object : XC_MethodHook() {
18+
override fun afterHookedMethod(param: MethodHookParam) {
19+
xsp.reload()
20+
if (param.args[0] == 2 && xsp.getBoolean(Constants.IS_CQ_OPEN, false))
21+
param.result = xsp.getInt(Constants.CUR_CQ_NUM, 0)
22+
else if (param.args[0] == 5 && xsp.getBoolean(Constants.IS_TZ_OPEN, false))
23+
param.result = xsp.getInt(Constants.CUR_TZ_NUM, 0)
24+
super.afterHookedMethod(param)
25+
}
26+
})
27+
}
28+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.coderpig.cpwechatxposed.hook
2+
3+
import android.annotation.SuppressLint
4+
import com.coderpig.cpwechatxposed.Constants
5+
import com.coderpig.cpwechatxposed.XposedInit
6+
import com.coderpig.cpwechatxposed.XposedInit.Companion.xsp
7+
import de.robv.android.xposed.XC_MethodHook
8+
import de.robv.android.xposed.XposedBridge
9+
10+
/**
11+
* 描述:步数Hook
12+
*
13+
* @author jay on 2018/4/28 12:28
14+
*/
15+
object StepHook {
16+
@SuppressLint("PrivateApi")
17+
fun hook() {
18+
val c1 = Class.forName("android.hardware.SystemSensorManager\$SensorEventQueue")
19+
XposedBridge.hookAllMethods(c1, "dispatchSensorEvent", object : XC_MethodHook() {
20+
override fun beforeHookedMethod(param: MethodHookParam) {
21+
xsp.reload()
22+
if (XposedInit.xsp.getBoolean(Constants.IS_STEP_OPEN, false)) {
23+
(param.args[1] as FloatArray)[0] = (param.args[1] as FloatArray)[0] * (xsp.getString(Constants.CUR_STEP_MULT, "1").toInt())
24+
}
25+
super.beforeHookedMethod(param)
26+
}
27+
})
28+
}
29+
}

app/src/main/java/com/coderpig/cpwechatxposed/SettingActivity.kt renamed to app/src/main/java/com/coderpig/cpwechatxposed/ui/SettingActivity.kt

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
1-
package com.coderpig.cpwechatxposed
1+
package com.coderpig.cpwechatxposed.ui
22

33
import android.annotation.SuppressLint
44
import android.os.Bundle
55
import android.support.v7.app.AppCompatActivity
66
import android.widget.SeekBar
7+
import com.coderpig.cpwechatxposed.Constants
8+
import com.coderpig.cpwechatxposed.R
9+
import com.coderpig.cpwechatxposed.utils.SharedPreferenceUtils
10+
import com.coderpig.cpwechatxposed.utils.shortToast
711
import kotlinx.android.synthetic.main.activity_setting.*
812

913
/**
10-
* 描述:
14+
* 描述:Xposed设置页
1115
*
1216
* @author CoderPig on 2018/04/24 14:45.
1317
*/
@@ -24,13 +28,13 @@ class SettingActivity : AppCompatActivity() {
2428
private fun initView() {
2529
// 步数助手
2630
tv_mutiple.text = ((resources.getString(R.string.cur_multiple) +
27-
(SharedPreferenceUtils.getSP(App.instance, Constants.CUR_STEP_MULT, "0").toString().toInt() + 1)))
28-
cb_step_switch.isChecked = SharedPreferenceUtils.getSP(App.instance, Constants.IS_STEP_OPEN, false) as Boolean
31+
(SharedPreferenceUtils.getSP(Constants.CUR_STEP_MULT, "0").toString().toInt() + 1)))
32+
cb_step_switch.isChecked = SharedPreferenceUtils.getSP(Constants.IS_STEP_OPEN, false) as Boolean
2933

3034
cb_step_switch.setOnCheckedChangeListener({ _, isChecked ->
3135
SharedPreferenceUtils.putSP(Constants.IS_STEP_OPEN, isChecked)
3236
})
33-
sb_multiple.progress = SharedPreferenceUtils.getSP(App.instance, Constants.CUR_STEP_MULT, "1").toString().toInt() + 1
37+
sb_multiple.progress = SharedPreferenceUtils.getSP(Constants.CUR_STEP_MULT, "1").toString().toInt() + 1
3438
sb_multiple.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
3539
override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
3640
tv_mutiple.text = resources.getString(R.string.cur_multiple) + (progress + 1)
@@ -43,8 +47,8 @@ class SettingActivity : AppCompatActivity() {
4347
}
4448
})
4549
//猜拳助手
46-
cb_cq.isChecked = SharedPreferenceUtils.getSP(App.instance, Constants.IS_CQ_OPEN, false) as Boolean
47-
when (SharedPreferenceUtils.getSP(App.instance, Constants.CUR_CQ_NUM, 0)) {
50+
cb_cq.isChecked = SharedPreferenceUtils.getSP(Constants.IS_CQ_OPEN, false) as Boolean
51+
when (SharedPreferenceUtils.getSP(Constants.CUR_CQ_NUM, 0)) {
4852
0 -> rb_jd.isChecked = true
4953
1 -> rb_st.isChecked = true
5054
2 -> rb_b.isChecked = true
@@ -62,8 +66,8 @@ class SettingActivity : AppCompatActivity() {
6266

6367

6468
//骰子助手
65-
cb_tz.isChecked = SharedPreferenceUtils.getSP(App.instance, Constants.IS_TZ_OPEN, false) as Boolean
66-
when (SharedPreferenceUtils.getSP(App.instance, Constants.CUR_TZ_NUM, 0)) {
69+
cb_tz.isChecked = SharedPreferenceUtils.getSP(Constants.IS_TZ_OPEN, false) as Boolean
70+
when (SharedPreferenceUtils.getSP(Constants.CUR_TZ_NUM, 0)) {
6771
0 -> rb_tz_1.isChecked = true
6872
1 -> rb_tz_2.isChecked = true
6973
2 -> rb_tz_3.isChecked = true

app/src/main/java/com/coderpig/cpwechatxposed/SharedPreferenceUtils.kt renamed to app/src/main/java/com/coderpig/cpwechatxposed/utils/SharedPreferenceUtils.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
package com.coderpig.cpwechatxposed
1+
package com.coderpig.cpwechatxposed.utils
22

33
import android.annotation.SuppressLint
44
import android.content.Context
5+
import com.coderpig.cpwechatxposed.App
56

67

78
/**
8-
* 描述:
9+
* 描述:SharedPreference工具类
910
*
1011
* @author CoderPig on 2018/04/24 17:00.
1112
*/
@@ -20,13 +21,13 @@ class SharedPreferenceUtils {
2021
"Integer" -> editor.putInt(key, value as Int)
2122
"Boolean" -> editor.putBoolean(key, value as Boolean)
2223
"String" -> editor.putString(key, value as String)
23-
"Float" -> editor.putFloat(key, value as Float)
24+
"ADloat" -> editor.putFloat(key, value as Float)
2425
"Long" -> editor.putLong(key, value as Long)
2526
}
2627
editor.apply()
2728
}
2829

29-
fun getSP(context: Context, key: String, defValue: Any): Any? {
30+
fun getSP(key: String, defValue: Any): Any? {
3031
val type = defValue.javaClass.simpleName
3132
val sharedPreferences = App.instance.getSharedPreferences("config",Context.MODE_WORLD_READABLE)
3233
return when (type) {

app/src/main/java/com/coderpig/cpwechatxposed/Utils.kt renamed to app/src/main/java/com/coderpig/cpwechatxposed/utils/Utils.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
package com.coderpig.cpwechatxposed
1+
package com.coderpig.cpwechatxposed.utils
22

33
import android.widget.Toast
4+
import com.coderpig.cpwechatxposed.App
45

56
/**
6-
* 描述:
7+
* 描述:工具方法扩展文件
78
*
89
* @author CoderPig on 2018/04/27 12:26.
910
*/

0 commit comments

Comments
 (0)