前言
先祝大家国庆快乐 哈哈
在(一)中已经说过会有第二节,今天它来了。在第一节中已经分析出了每层锁的密码算法,今天来分析一下每层锁的原理
准备工具
1.mt管理器
2.灵活的小手
3.聪明的脑瓜
开始分析
回到我们之前分析的地方如图
我们之前已经分析了access L1000003方法的内容。今天来分析access$1000024方法的内容,如图
同样的,我们跳转过去然后转Java分析即可,如图找到其调用并跳转
转Java后进行分析,如图
如图所示,access$1000024方法又调用了名为c的方法并返回,那么我们就顺势而为,跳转到c方法分析,如图
转Java后可以得到
如图所示,该方法使用了switch case语句并以cL1的值进行case跳转。那么我们重点就应该放在这几个跳转上,如图
如图所示,L6与L7为关键跳转,那么为什么呢?大家莫虑,且看此图
由于代码一般是按照从上往下的顺序执行,那么L6对应的就是:e方法-k方法-j方法,而最后的这个j方法正好对应的是第二层锁,而k方法是我们之前说过的输出密码的方法,并且这个密码(pW)由b变量通过计算得来,然后e方法就正好是在给b变量赋值。那么如此执行下来就是:先通过e方法输出b变量的值,然后由k方法通过对b变量的计算对pW赋值而得到解锁密码,最后由j方法来加载第二层锁的相关提示等等。再通过对图示字符串的分析,应该可以得到结论:b变量就是所谓的序列号。L7的分析也是一样的,这里就不作分析了。
如图所示,e与k相辅相成,b与pW环环相扣。总的分析下来的话我们可以知道,在进入每层锁之前那些所谓的序列号啊,解锁密码啊,其实都已经生成好了。
最后再说一下序列号的问题,这种锁每层的序列号肯定都是随机的,而b变量正好就是由随机数(random)得来,所以说b变量就是所谓的序列号。
结语
OK啊,也是都分析完了。还是那句话,我的能力有限,而且语文不好,有些地方行文措辞不太好,望海涵。
再次祝大家国庆快乐!更祝大家永远也不会被锁
标签:分析,变量,密码,机软件,跳转,序列号,方法,如图 From: https://blog.csdn.net/m0_73594321/article/details/142669496