上一章电梯:
新手小白抖逆向学习探索(去抖广告)
https://www.52pojie.cn/thread-1954379-1-1.html
(出处: 吾爱破解论坛)
1、apk基础信息
image-20240814092327915.png (43.61 KB, 下载次数: 0)
下载附件
2024-8-14 20:10 上传
2、软件分析
image-20240814111701084.png (250.62 KB, 下载次数: 0)
下载附件
2024-8-14 20:10 上传
在上一集,我已经把开屏广告搞定了,打开后,又是两个弹窗广告加一个系统公告,还必须要手动关闭才可以。这一集就干它
image-20240814192417468.png (116.02 KB, 下载次数: 0)
下载附件
2024-8-14 20:11 上传
image-20240814192505751.png (94.77 KB, 下载次数: 0)
下载附件
2024-8-14 20:11 上传
image-20240814192544189.png (125 KB, 下载次数: 0)
下载附件
2024-8-14 20:11 上传
3、开干!
根据论坛新手指导《安卓逆向那档事》广告浮窗就不是看activity,而是用算法助手日志锁定堆栈。然后把show方法干掉。
image-20240814193220072.png (78.9 KB, 下载次数: 0)
下载附件
2024-8-14 20:11 上传
总共四个弹窗,第一个弹窗是启动窗口,后面三个才是,现在看第一个堆栈
image-20240814193343818.png (132.08 KB, 下载次数: 0)
下载附件
2024-8-14 20:11 上传
第一个弹窗黑丝小姐姐,com.niming.framework.base.a.onStart,使用jadex看下,锁定关键show函数。
image-20240814193655429.png (33.34 KB, 下载次数: 0)
下载附件
2024-8-14 20:11 上传
public int show(m transaction, String tag) {
InterfaceC0335a interfaceC0335a = this.J0;
if (interfaceC0335a != null) {
interfaceC0335a.b();
}
return super.show(transaction, tag);
}
@Override // androidx.viewpager.widget.b.a, androidx.fragment.app.b
public void show(androidx.fragment.app.g manager, String tag) {
InterfaceC0335a interfaceC0335a = this.J0;
if (interfaceC0335a != null) {
interfaceC0335a.b();
}
super.show(manager, tag);
}
嗯,两个,本人java菜鸡,只知道可以两个函数重构,但是这个黑丝小姐姐到底是那个show出来的????
本着宁杀错,不放过原则。计划将show1(上面的那个)
return super.show(transaction, tag);
改为
return 1;//毕竟还是有返回值,给一个象征一下吧
image-20240814195718050.png (120.09 KB, 下载次数: 0)
下载附件
2024-8-14 20:11 上传
下面的直接清空,反正也没有返回值
super.show(manager, tag);
image-20240814195618271.png (106.78 KB, 下载次数: 0)
下载附件
2024-8-14 20:11 上传
保存-编译-签字-打包-安装
经过测试,3个全军覆没,看来用的是一个函数去生成的。
4、回顾
有朋友可能会有疑问,调用堆栈不是com.niming.framework.base.a.onStart里面的onstart函数,那就多看看他在干什么?
public void onStart() {
//调用父类onstart函数
super.onStart();
//生成一个window窗口
Window window = getDialog().getWindow();
if (window != null) {
//设置窗口为全透明
window.setBackgroundDrawable(new ColorDrawable(0));
//提取窗口属性参数
WindowManager.LayoutParams layoutParams = window.getAttributes();
if (Z()) {
//设置动画参数
layoutParams.windowAnimations = R.style.BottomDialogFragmentAnimation;
}
//设置动画宽
layoutParams.width = W(getActivity());
//设置动画高
layoutParams.height = I();
//设置动画遮罩
layoutParams.dimAmount = R();
//设置动画重力
layoutParams.gravity = T();
//生效以上属性
window.setAttributes(layoutParams);
}
}
最开始的时候,我以为我需要修改的程序是这里,但是经过实验,发现清空了这里面的函数,会造成函数出错,我个人认为这里其实不是创建广告,而是创建广告的画布,后面的程序在这个画布上画上小姐姐,这样就知道为什么会报错了,画布都没有了,画的时候肯定报错,也不知道这样理解是否正确。
public Dialog onCreateDialog(Bundle savedInstanceState) {
return super.onCreateDialog(savedInstanceState);
}
@Override // androidx.fragment.app.Fragment
@Nullable
public View onCreateView(LayoutInflater inflater, @nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
Bundle bundle = getArguments();
if (bundle != null) {
Y(bundle);
}
View view = K(inflater, container);
return view;
}
经过我的推断,应该这个程序就是在画布上创建黑丝小姐姐的函数。为什么会有两个,
经过百度:使用 DialogFragment 至少需要实现 onCreateView 或者 onCreateDialog 方法,这俩个是二选一,所以就能理解为什么onCreateDialog函数只是个皮包,并没有重写。
抖*去广告系列结束啦,感谢各位大大的帮助,后面会继续给大家更新小白学习系列。