借助已学知识完成样本软件的去除签名校验、去广告与更新、布局优化
1.样本软件
2.jadx-gui
3.MT管理器/NP管理器
4.算法助手
5.开发助手
《安卓逆向这档事》疑难解答-建议征集贴
【吾爱破解安卓逆向入门教程《安卓逆向这档事》三、初识smali,vip终结者】
【【Android逆向】16分钟动画讲解java以及对应的smali代码】
PS:讲得特别好,建议对于smali还不熟悉的朋友可以多看几遍!!!
关键字:initsdk、loadad、initad等
赋值参考第六课52:08
吾爱破解安卓逆向入门教程《安卓逆向这档事》六、校验的N次方-签名校验对抗、PM代理、IO重定向
1.核心破解,免签名安装
2.一键去签名工具
[实战破解]白描-动态代{过}{滤}理Hook签名校验
3.手动分析签名校验
【吾爱破解安卓逆向入门教程《安卓逆向这档事》四、恭喜你获得广告&弹窗静默卡】
1.修改xml中的属性值
2.上帝模式优化布局
[白嫖大法]某影视邀请协议分析
完成剩余布局的优化并截图回复
百度云
阿里云
哔哩哔哩
教程开源地址
PS:解压密码都是52pj,阿里云由于不能分享压缩包,所以下载exe文件,双击自解压
public
void
O(SaiUserInfo saiUserInfo,
boolean
z) {
g0.i(BaseApp.getInstance(), saiUserInfo);
if
(z) {
v.c().q(SaiSPKey.appToken, saiUserInfo.getToken());
}
this
.e.set(saiUserInfo);
this
.h.setValue(saiUserInfo.getPic());
if
(saiUserInfo.getLogin_type() ==
1
) {
this
.g.set(
"点击登录"
);
this
.f.set(Boolean.FALSE);
}
else
{
this
.g.set(saiUserInfo.getNickname());
this
.f.set(Boolean.TRUE);
}
ObservableField observableField =
this
.i;
observableField.set(
"ID:"
+ saiUserInfo.getUser_id());
ObservableField observableField2 =
this
.j;
observableField2.set(SaiAppUtils.d(saiUserInfo.getInvited_count() +
"人"
));
if
(saiUserInfo.getInvited_count() >
0
) {
ObservableField observableField3 =
this
.k;
observableField3.set(SaiAppUtils.d(N(saiUserInfo.getInvited_count()) +
"天 "
));
}
else
{
this
.k.set(SaiAppUtils.d(
"0天"
));
}
if
(saiUserInfo.getFree_time() *
1000
> System.currentTimeMillis()) {
this
.n.set(
0
);
this
.m.set(d.a(Long.valueOf(saiUserInfo.getFree_time() *
1000
)));
this
.l.set(
"剩余免广告:"
);
BaseApp.getInstance().setFreeTime(saiUserInfo.getFree_time() *
1000
);
return
;
}
this
.l.set(
"邀请好友获得终身免广告特权"
);
this
.n.set(
8
);
BaseApp.getInstance().setFreeTime(0L);
}
public
void
O(SaiUserInfo saiUserInfo,
boolean
z) {
g0.i(BaseApp.getInstance(), saiUserInfo);
if
(z) {
v.c().q(SaiSPKey.appToken, saiUserInfo.getToken());
}
this
.e.set(saiUserInfo);
this
.h.setValue(saiUserInfo.getPic());
if
(saiUserInfo.getLogin_type() ==
1
) {
this
.g.set(
"点击登录"
);
this
.f.set(Boolean.FALSE);
}
else
{
this
.g.set(saiUserInfo.getNickname());
this
.f.set(Boolean.TRUE);
}
ObservableField observableField =
this
.i;
observableField.set(
"ID:"
+ saiUserInfo.getUser_id());
ObservableField observableField2 =
this
.j;
observableField2.set(SaiAppUtils.d(saiUserInfo.getInvited_count() +
"人"
));
if
(saiUserInfo.getInvited_count() >
0
) {
ObservableField observableField3 =
this
.k;
observableField3.set(SaiAppUtils.d(N(saiUserInfo.getInvited_count()) +
"天 "
));
}
else
{
this
.k.set(SaiAppUtils.d(
"0天"
));
}
if
(saiUserInfo.getFree_time() *
1000
> System.currentTimeMillis()) {
this
.n.set(
0
);
this
.m.set(d.a(Long.valueOf(saiUserInfo.getFree_time() *
1000
)));
this
.l.set(
"剩余免广告:"
);
BaseApp.getInstance().setFreeTime(saiUserInfo.getFree_time() *
1000
);
return
;
}
this
.l.set(
"邀请好友获得终身免广告特权"
);
this
.n.set(
8
);
BaseApp.getInstance().setFreeTime(0L);
}
public
void
initData() {
super
.initData();
if
(!v.c().b(SaiSPKey.AGREE_PRIVATE,
false
)) {
((SaiSplashViewModel)
this
.viewModel).b(b.s.c.b.a().c(SaiPrivateEvent.
class
).observeOn(AndroidSchedulers.mainThread()).subscribe(
new
Consumer() {
@Override
public
final
void
accept(Object obj) {
SaiSplashActivity.
this
.g((SaiPrivateEvent) obj);
}
}));
a0.a.h(
this
);
return
;
}
try
{
s.a.d();
}
catch
(Exception e2) {
e0.b(
"===========>>> "
+ e2.getMessage());
}
int
g2 = v.c().g(SaiSPKey.INSTANCE.getLaunchCount(),
0
);
if
(g2 !=
0
) {
if
(!v.c().b(
"extend_java_aa"
,
false
)) {
v.c().s(
"extend_java_aa"
,
true
);
g2 =
0
;
}
}
else
{
v.c().s(
"extend_java_aa"
,
true
);
}
if
(g2 ==
0
) {
showLoaddingDialog();
((SaiSplashViewModel)
this
.viewModel).b(b.s.c.b.a().c(SaiAppInitEvent.
class
).observeOn(AndroidSchedulers.mainThread()).subscribe(
new
Consumer() {
@Override
public
final
void
accept(Object obj) {
SaiSplashActivity.
this
.i((SaiAppInitEvent) obj);
}
}));
}
g.a.a(g2);
int
i2 = g2 +
1
;
v.c().m(SaiSPKey.INSTANCE.getLaunchCount(), i2);
c0 c0Var = c0.a;
if
(c0Var.f3990g == -
1
) {
c0Var.f3990g = i2;
}
if
(g2 !=
0
) {
if
(NetworkUtils.c()) {
((SaiSplashViewModel)
this
.viewModel).n();
if
(c0Var.l(
"1"
)) {
showLoaddingDialog();
SaiSplashAdActivity.invoke(
this
);
finish();
}
else
{
n(b.DELAY);
}
}
else
{
n(b.NONET);
}
}
else
{
((SaiSplashViewModel)
this
.viewModel).n();
}
if
(i.c(d.f().toString(), c0Var.f3986c).equals(c0Var.j(R.string.app_cudgel))) {
return
;
}
e0.b(
"===========>>> app kill app_cudgel"
);
System.exit(
0
);
}
public
void
initData() {
super
.initData();
if
(!v.c().b(SaiSPKey.AGREE_PRIVATE,
false
)) {
((SaiSplashViewModel)
this
.viewModel).b(b.s.c.b.a().c(SaiPrivateEvent.
class
).observeOn(AndroidSchedulers.mainThread()).subscribe(
new
Consumer() {
@Override
public
final
void
accept(Object obj) {
SaiSplashActivity.
this
.g((SaiPrivateEvent) obj);
}
}));
a0.a.h(
this
);
return
;
}
try
{
s.a.d();
}
catch
(Exception e2) {
e0.b(
"===========>>> "
+ e2.getMessage());
}
int
g2 = v.c().g(SaiSPKey.INSTANCE.getLaunchCount(),
0
);
if
(g2 !=
0
) {
if
(!v.c().b(
"extend_java_aa"
,
false
)) {
v.c().s(
"extend_java_aa"
,
true
);
g2 =
0
;
}
}
else
{
v.c().s(
"extend_java_aa"
,
true
);
}
if
(g2 ==
0
) {
showLoaddingDialog();
((SaiSplashViewModel)
this
.viewModel).b(b.s.c.b.a().c(SaiAppInitEvent.
class
).observeOn(AndroidSchedulers.mainThread()).subscribe(
new
Consumer() {
@Override
public
final
void
accept(Object obj) {
SaiSplashActivity.
this
.i((SaiAppInitEvent) obj);
}
}));
}
g.a.a(g2);
int
i2 = g2 +
1
;
v.c().m(SaiSPKey.INSTANCE.getLaunchCount(), i2);
c0 c0Var = c0.a;
if
(c0Var.f3990g == -
1
) {
c0Var.f3990g = i2;
}
if
(g2 !=
0
) {
if
(NetworkUtils.c()) {
((SaiSplashViewModel)
this
.viewModel).n();
if
(c0Var.l(
"1"
)) {
showLoaddingDialog();
SaiSplashAdActivity.invoke(
this
);
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课