前言:昨天在逆向一个项目的时候,发现使用了Java1.8特效Lambda表达式,如果没用过Lambda表达式确实对逆向查看代码造成了一定难度,如下图所示。

1.查看一个Activity

可以看到当前页面添加了点击事件,但是使用Lambda表达式之后就有点看不清楚逻辑了,首先我们点击第一个AgentActivity$$Lambda$1类,

如图所示在点击OnClick点击事件里面又回调了AgentActivity.lambda$addListner$0这个方法

然后点击查看下面AgentActivity.lambda$addListner$0的方法

然后就能判断出这个就是 tvAgent.setOnClickListener点击事件执行的方法了,而且目前发现了一个规律就是
Lambda$1.lambdaFactory$对应的就是 lambda$addListner$0
lambdaFactory是从1开始的,addListner是从0开始的,所以当反编译查看代码的时候碰到
Lambda$1.lambdaFactory$就可以直接找到当前页面lambda$addListner$0来查看点击事件做了什么操作
Lambda$1.lambdaFactory >>> lambda$addListner$0
Lambda$2.lambdaFactory >>> lambda$addListner$1
Lambda$3.lambdaFactory >>> lambda$addListner$2
Lambda$4.lambdaFactory >>> lambda$addListner$3
就可以知道其他的点击事件那就全部都是对应的,分析完毕,可以开始逆向工程了。

网友评论