简单分析全局负一屏解锁高级版功能
> 这是一个可以在任何应用界面打开的负一屏工具,你可以添加常用的应用,快捷方式,网址,图片,联系人以及小工具,当然你也可以从你的系统小部件中选择你想要的任何部件添加上去,只需轻轻一滑,一切尽在眼前
---
前段时间上论坛发现我的帖子和头像都不见了,当时也没太在意,最近看到说头像不见了是因为一级用户不允许上传头像,升级又需要积分,只好发俩帖子来混混积分了
---
### 0、用到的工具:
androidKiller
jadx-gui
DDMS
ida
如果本篇帖子中有什么错误、不足、需要指正的、或者遗漏的地方,热烈欢迎大家,在评论区留言
---
先把软件签名打开看看有没有什么问题,发现启动后负一屏界面不显示东西,也添加不了东西
### 1、过签名
在dex搜索`signatures`,获取签名但没有任何判断,猜测可能在so文件中做校验
IDA加载`libbase.so`文件,`shift+f12`打开字符串窗口,搜索`signatures`
双击进入查看引用函数
`f5`查看伪代码,但这伪代码看的有些许难受
我们找到函数第一个形参,按`y`,把数据类型修改为`JNIEnv*`,这样看起来就舒服多了
简单看了一下,发现函数最终返回一个`bool`型变量`v40`,`v40`在函数开头和判断完赋值,我们可以把开头的`v40`赋值为1,然后不让他判断了
`ctrl+alt+k`打开`keypatch`修改汇编保存;
当然也可以简单的修改为
```
MOV.W R0, #1
BX LR
```
---
把so文件塞回apk,测试可用
点击付费,提示:`您还没有激活高级版,请到【关于】中点击获取`
### 2、解锁付费功能
那我们到`Androidkiller`中所搜这个字符串,什么都没有,字符串似乎被加密或者放在so中了,用DDMS分析一下,toast是`Oo00O0oo.onClick`调用`O0oOOo0o.Oo0O00Oo`弹出的
进入`Oo00O0oo.onClick`,这个弹窗是根据`this.Ooo00OOO`判断的,按住`ctrl`跟进去,发现`this.Ooo00OOO`是由`Ooo00OO0.Ooo000Oo()`的值确定的,再次跟进去,把这个函数的返回值改为返回`true`
再次打包,其他的都能使用了,但还有一个问题,就是选择`新建页面`的时候没有任何反应
那就找一下这个点击事件,分析一下
DDMS分析所得点击事件在`com.example.xf.negativeonescreen.pro.O0OOOo00`类中,根据传入参数类型找到调用的方法在`com.example.xf.negativeonescreen.pro.O0OOOo0o`类,又是调用方法,继续跟进
最终到达这个地方,可以看出调用函数判断,不为true则什么都不干,问题可能就出现在这里,跟进判断的函数
发现是native层的函数,看了下调用这个函数有几处,直接改so文件吧
再次载入`libbase.so`文件,发现输出函数并没有我们的这个函数,可能是动态注册,找到`JNI_OnLoad`函数
根据java方法名我们找到`isActivated`,进去,这个函数在这里做各种验证
```
int __fastcall isActivated(JNIEnv *a1, int a2, int a3)
v12 = 1;
v11 = (*a1)->NewStringUTF(a1, "sign");
v10 = 0;
v9 = 0;
v8 = (void *)j_getLocalDeviceId(a1, a2, a3);
if ( j_isEmpty(a1, v8) )
{
v12 = 0;
}
else
{
v9 = (void *)j_getStringPreference(a1, a3, v11);
if ( j_isEmpty(a1, v9) )
{
v12 = 0;
}
else
{
v10 = (void *)j_makeMD5(a1, v8);
if ( j_equals(a1, v10, v9) )
{
v7 = (*a1)->NewStringUTF(a1, "info");
v6 = (void *)j_getStringPreference(a1, a3, v7);
v5 = (void *)j_getDeviceInfo(a1);
if ( !j_equals(a1, v6, v5) )
{
v4 = (*a1)->NewStringUTF(a1, "nos_count");
j_putStringPreference(a1, a3, v4);
v12 = 0;
(*a1)->DeleteLocalRef(a1, v4);
}
(*a1)->DeleteLocalRef(a1, v7);
(*a1)->DeleteLocalRef(a1, v6);
(*a1)->DeleteLocalRef(a1, v5);
}
else
{
v12 = 0;
}
}
}
(*a1)->DeleteLocalRef(a1, v11);
(*a1)->DeleteLocalRef(a1, v8);
(*a1)->DeleteLocalRef(a1, v10);
(*a1)->DeleteLocalRef(a1, v9);
return v12;
```
最后还是返回`bool`型,我们简单的改为上面讲的
```
MOV.W R0, #1
BX LR
```
---
塞回去,打包,测试,可用
17628635215 发表于 2021-8-24 18:18
还有一个问题,我就差最后一步了,你最后的那个返回值为1的代码是怎么做修改的
用keypatch修改成:
mov r0,0x1
bx lr
用16进制修改为:
4FF00100
7047 陈子墨M 发表于 2021-8-11 15:58
可以分享一个成品吗 大佬
我看以前的成品分享都被删了,估计是不让分享成品了,想用的话自己跟着教程走一遍吧。 看完可以点个免费评分吗,多谢{:1_893:} GuXing 发表于 2021-7-21 14:59
看完可以点个免费评分吗,多谢
应该是不要诱导评分{:1_905:} 多出点教程,吾爱破解论坛有你更精彩!{:17_1068:} 这个软件是什么来着??我之前好像用过。 秋神紫羽 发表于 2021-7-21 19:45
应该是不要诱导评分
我这不算诱导吧,评不评全靠自愿,也没说评完怎样怎样{:1_904:} 芽衣 发表于 2021-7-21 21:02
这个软件是什么来着??我之前好像用过。
可以随时调出来一个负一屏的软件,有时候挺方便的 正己 发表于 2021-7-21 20:42
多出点教程,吾爱破解论坛有你更精彩!
搞来搞去感觉也没啥可发的:rggrg GuXing 发表于 2021-7-21 21:43
搞来搞去感觉也没啥可发的
来点协议分析{:17_1061:} 内容精彩,感谢分享。