前言:
受专栏小天才手表逆向研究的启发,我打开了XTC pojie 的新思路,感谢nu11plex。
正文
本次逆向分析针对的是开发者选项中切换访问服务器环境。
一、通过adb指令 adb logcat | find "START" 获取到上图密码输入框的Activity名叫 "com.xtc.i3launcher/.develop.config.view.ConfigActivity"。
(资料图片仅供参考)
二、提取包"com.xtc.i3launcher"的apk
三、用dex2jar将apk反编译为jar文件
四、用jd-gui打开jar文件
五、以Activity名中的关键词"ConfigActivity"进行搜索
六、阅读ConfigActivity.class的反编译代码,从中找到了有关密码校验的部分代码:
可以注意到,这段代码调用了另一个函数"int i = bqg.a(str);"来给变量i赋值,然后校验i的值,如果为零就校验通过
七、追踪到bgp.a()函数的定义代码位置
我对上面代码进行了修复和简化,得到以下代码:
通过分析,我大概明白了校验密码的原理
原理:软件取出密码第七位到最后一位的字串,并转换成长整数与"System.currentTimeMillis() / 1000L / 60L / 60L"进行比较,当前一个数较大时,进入下一步校验。
然后,软件取出密码前两位和第七位开始到最后一位的字串,并与一个固定字串拼接,将所得结果用a6()函数进行哈希值计算,最后将得到的哈希值与密码第三位到第七位的字串进行不计大小写的判断,如果相等就判定密码合法。
八、计算密码
根据第一步校验,设密码第七位往后的字串为"999999"
然后设前两个字符为"xm"
经过哈希值计算,得到第三道第五位为"3cbb3"
最后拼接密码,得到"xm3cbb3999999"
尝试密码,顺利通过。
总结
这次的逆向分析十分顺利,本以为XTC会用网络校验,没想到只是本地校验。
感谢你看到了这里,如果喜欢请点个赞,如果有问题欢迎在评论区讨论
标签: