安卓逆向初体验
2023-10-15 10:28:19 Author: mp.weixin.qq.com(查看原文) 阅读量:6 收藏

背景

最近在捣鼓安卓yuzu模拟器,发现一个问题:JoyCon通过蓝牙连接手机后,两个手柄无法识别为一个设备。电脑上可以用betterjoy解决,安卓上搜了一下据说Joy-Con Enabler这个app可以解决。下载下来发现需要付费才能开启,就研究了一下安卓逆向。

过程

打开app,提示需要升级到PRO版,搜一下关键字

dump出apk,拖到jadx里定位到关键点,还好apk没有加壳,其实也就是看Java代码。可以看到第一个点是会判断hVar.f1655b是否为joyconenablerpro这个字符串安卓逆向不能直接修改Java,需要修改smali字节码,随便搜一个语法教程:https://zhuanlan.zhihu.com/p/580962131,把if-eqz改成if-nez,反转一下逻辑即可绕过。修改smali有很多种办法,mt管理器比较方便,但是需要买会员,所以后来选了个破解的np管理器,修改后自动签名,安装。装上后发现不行,提示License校验失败,继续搜索关键字发现这里jadx报错了,有一个小坑,需要改一下jadx的配置:文件 - 首选项 - 反编译 里面的显示不一致代码 选中 保存退出然后就可以正常反编译了发现有一个这样的逻辑:

  1. public void a(Context context) {

  2. try {

  3. if (!context.getPackageManager().getPackageInfo(context.getPackageName(), 64).signatures[0].toCharsString().contentEquals(getResources().getString(R.string.sin))) {

  4. this.f502f = false;

  5. }

  6. } catch (PackageManager.NameNotFoundException unused) {

  7. this.f502f = false;

  8. }

  9. R = true;

  10. }

问问GPT,发现是检验包签名,如果发现被篡改就把this.f502f设置为false

搜一下this.f502f这个变量在哪儿被赋值过都给他强行赋值为true,这里有个坑:f502f是重命名后的结果,f502f的原名称是f,为了防止跟包名冲突了

最后

破解完终于可以正常启动了,可惜的是最后他这个软件还是无法使用。。。看了下评论都是在喷他不能用的,还好没有花钱买pro。。。

看了下代码,大概的原理是模拟了一个输入法,通过获取不同的蓝牙指令映射为不同的key。这个apk大概是5-6年前的,猜测可能是随着版本迭代key已经更新,也许更新一下最新的映射或许还能用?这部分就等后面有空了再研究吧。


文章来源: https://mp.weixin.qq.com/s?__biz=Mzg2MTc1NDAxMA==&mid=2247483988&idx=1&sn=acf3c4611475af79a9eb200679de35f9&chksm=ce1305a1f9648cb7a5829d7b4be14676905eb1bd22a59a545848193e44ddd6b28578ea2857c5&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh