楼主: yangtaott|查看: 160|回复: 1
发表于 2020-5-2 09:31:53
第一部分:Hook指定app入口函数变量参数值
/ J) k, X  H) |2 L5 X" }1.添加环境变量,不懂的请看第一课
5 ?7 i; o, g& j+ x/ P+ Y
! [) L/ b" [' E/ ?2.开始运行jadx-gui反编译工具
1 b- `+ [! g" p- L. G& M
8 [" A/ d( Z5 T0 H6 j将apk文件拖动到jadx-gui内6 a/ ^* J3 d0 `1 x. B

' n- y# P9 C+ m- G) z8 I
' q. ?  A: p9 e! o3 R# S解压工程文件:TestXP  用Android Studio 打开9 T- z7 L+ \$ O: y
在Hello.java内 代码:8 w9 Z) {! j3 T& ?; I
if (lpparam.packageName.equals("com.qqxieyi.xposeddemo")){
" m* M' c' g4 v4 G- v9 k注释:表示只注入当前包名com.qqxieyi.xposeddemo的钩子,过滤其他app
9 H% G. g: d6 \" |
% I, J6 q1 x9 ?- ^' rXposedHelpers.setStaticIntField(clazz, "staticInt", 10000);; m8 W6 a0 r  X$ `
设置字段名字:staticInt   设置字段值:10000  字段类型:int3 V( v8 Q2 _. y
% g# n- f5 W5 C: @2 t1 a
XposedHelpers.setStaticObjectField(clazz, "Tag", "qqxieyi.cn");" Y5 k/ C/ Y5 s% n2 g

/ L0 [  M% j( r6 o同上,意思为过滤标签7 _. L# t. a3 R% l3 I4 ~( x$ b2 A
6 r, L4 B3 d+ K3 e4 w
怎么看?在jadx-gui内
& M  V: ^8 a* y6 \" Z+ M% h- Q+ W
* b! s4 T2 k9 ?& |! U" `5 A. W* G, I' B2 R/ j' V$ g5 N& |2 w
第二部分,Hook普通方法与构造函数返回调用参数的方法
3 f: V6 r3 T  U# H, Y- A- a. l* `# n+ [" X+ ~7 F: a2 L
* V0 Y6 K2 B( C# E* W
Android Studio 内的 java层; u0 n& u) p  \$ v
hook公用函数普通方法
4 s/ c7 s( y6 {3 w) q2 i
8 w- O: W0 N" G+ o8 r8 b/ w
XposedHelpers.findAndHookMethod(clazz,
  Q% M" K  W& R/ x+ A% X        "publicFunc",
6 W  b# i" \: W7 H& }. d        String.class,8 x8 ?1 J; r" u. A. S. U9 Q7 R
        new XC_MethodHook() {; C) x( N, z7 Z) B
    /* access modifiers changed from: protected */9 v3 D! m7 C9 ~  ?; c
public void beforeHookedMethod(MethodHookParam param) throws Throwable {
* ]6 g6 x. i7 C7 e+ ~        Log.d("qqxieyi", "" + param.args[0]);3 h/ Q. }0 @/ U$ E% b1 z" O: G
% {6 C" x8 v6 \" x
        Log.d("qqxieyi", "publicFunc is hooked before");
1 i* S# V& b' m/ S" V  K    }
6 ~9 j2 r- q  V7 ?( ?$ r7 ?. ^- c; D3 R; [" t4 r
    /* access modifiers changed from: protected */
+ w1 P: j* Q0 E6 P
public void afterHookedMethod(MethodHookParam param) throws Throwable {3 `3 V- W( y/ u) C* ?  ]
        Log.d("qqxieyi", "" + param.getResult());
. f- A! N- P! @5 n3 L        Log.d("qqxieyi", "publicFunc is hooked after");5 j  |$ F! [+ m5 z* i/ R. \7 r
    }8 s, f( _! M! d# c7 ?, Z
});

1 t7 P0 n$ Z1 y% z9 L上面代码的解释
$ ~/ W! b2 b# J. i
Log.d("qqxieyi", "" + param.args[0]); 这个部分可以输出也可以不输出,不需要就注释掉,读取第一次所有的参数# D2 [% F& ~( _8 h* S* K
Log.d 逻辑型  需要加字符串"" 如果 param.args[0] 如果列表为空,返回为no 会出现报错现象,所以需要加字符串6 W7 g- L4 c- V. [
名:"qqxieyi"   param.args[0]  获取第[0]个列表
# H: x& O, }6 a3 Z6 `, x& M$ C# o; l

: m( R9 K7 q4 q& v; W2 uLog.d("qqxieyi", "" + param.getResult());  获取返回值

; y4 w5 h$ W8 j! Thook构造函数: s% H# j) G( _4 |6 s1 s
XposedHelpers.findAndHookConstructor(clazz, new XC_MethodHook() {
9 x! o1 f# s' ~: W/ [    /* access modifiers changed from: protected */
0 D7 x" C; |% E6 T6 M: D
public void beforeHookedMethod(MethodHookParam param) throws Throwable {
, g1 A# ~9 U' c/ {( Z0 T8 `        Log.d("qqxieyi", "这是无参构造函数前");
7 j7 B. z" k8 D. `( p( E5 v    }9 c) B. S0 H- I2 Q' l; I5 m4 C  Q
* R0 U& f* O* h. H
    /* access modifiers changed from: protected */
& g6 K! W' o0 a% ]- s+ K7 h' q
public void afterHookedMethod(MethodHookParam param) throws Throwable {, J& X- Q. Z  b' ^
        Log.d("qqxieyi", "这是无参构造函数后");: {" o8 e- T5 A- y
    }
% d% ]. l5 w& o, j9 P' k});
2 ]$ ~0 j/ Q. C8 U: ]) P8 [$ e; H( ^+ E4 x( ~
7 R; e. e- d/ s, j- K/ V& d
XposedHelpers.findAndHookConstructor(clazz, String.class, new XC_MethodHook() {6 Z) ?, i7 S1 M) x5 x8 @& ^. U7 @
    /* access modifiers changed from: protected */
$ G, m# C) i4 ?
public void beforeHookedMethod(MethodHookParam param) throws Throwable {
5 h0 \' n7 H4 u! a% C: ]: y        param.args[0] = "qqxieyi";, `" y8 a/ k2 |0 M: d! r, p; Y
    }
( \, z9 F2 _' V
. F2 G0 Y) S( J! {' Q4 t    /* access modifiers changed from: protected */+ K# r2 e; Q" Z0 U3 y( d
public void afterHookedMethod(MethodHookParam param) throws Throwable {/ l7 j  Z2 [' o
        Log.d("qqxieyi", "这是有参构造函数后");
8 K' q" k" l3 M    }' D0 j- ?: @6 Z3 d6 A8 N
});
: y6 U! i5 A" ?8 k
类名:Demo 9 `+ c% G% K, Y4 i% \) G

- [8 w3 ?, r% R+ \9 H2 A构造函数:
/ ~2 Q# Z' a3 n# x, g3 e
    public Demo() {
# Q8 N+ d; L4 L3 |# X  t2 ^* O: ]        this("qqxieyi");
9 M1 f4 p' x* f. L% E6 E, B        Log.d(Tag, "this is Demo() log");
, H. A: |3 p& _" w/ t$ B! R$ ^/ @& E    }# t- O7 j5 i+ `; F  P: m3 @
2 m! o, @. ?" L$ {7 r; s3 H" c! L# c
    private Demo(String str) {
- }& h6 O  e; Q. i% Q  k6 h        this.publicInt = 200;. ^2 y5 w( c5 p- v" |  O
        this.privateInt = 300;2 l2 ]9 P/ E8 {) P  a$ S$ q
        this.reflect = "fanshe";
9 G/ T3 p9 V  R) Q        String str2 = Tag;3 ?3 r, J8 `" F* @2 @6 n4 z9 L
        StringBuilder sb = new StringBuilder();
) C! H* S- ^% l* \        sb.append("this is Demo(String) log || ");
  x% B  w# `" B( Y5 v3 ~        sb.append(str);% ?# ^( W6 q  E6 P! J3 T6 c2 @
        Log.d(str2, sb.toString());
0 O5 k5 M! Q/ r7 z9 o0 I( ^    }无返回值
+ I+ ~: e9 t5 Q3 A/ N* d
文件保存好,然后编译后安装模拟器,打上勾,然后重启模拟器
5 J7 X) K2 o$ Z7 d) U
' j9 i% S- W) V6 b+ p# @( `' e6 }; ~
# _5 q) @, c+ b6 S9 R4 k

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 尽量使你的回复能够对他人有所帮助

QQ批量查冻结|QQ协议社区|乾坤QQ机器人|网站地图|

qqxieyi.cn

沪ICP备20008183号-1

快速回复 返回顶部 返回列表