ENENenne 发表于 2024-11-12 14:17

某英语学习app火龙果解锁PLUS部分功能,有翻译次数限制

本帖最后由 ENENenne 于 2024-11-12 15:15 编辑



真题解锁:arsc搜索“解锁全部试题”





复制exam_lock_membership_hint然后在classes里搜索exam_lock_membership_hint



点画红圈的第一个





跳转可疑代码canAccess


使这个方法直接返回1
在return v1前添加一行const/4 v1, 0x1



这样解锁真题就成功了


但是翻译没几句话就要你充会员了

arsc里搜索“查看翻译和讲解”

然后在classes里搜check_translation_analysis

找到最后一个导航栏长按转java看

这都是提示要升会员的代码所以我往上找

长按点击查看调用处,只有一个结果,点进去,转java看



有可疑代码lb.a0,跳转然后a0方法转java

所以要让它结果返回true
在return v0前添加const/4 v0, 0x1




然后发现了Y和a0方法内容差不多,就是返回值不同

所以改成返回false就行
就是在return v0前添加const/4 v0, 0x0
改完这两个方法一些单词的plus功能就能成功了
但是翻译还是限制数量(一天翻译完10个就不行了)又返回去看



长句翻译应该就是itemViewType == 2时的这条路径





然后看这个流程修改了很多地方都没有成功,求求大佬看一下
这个翻译长句每天只能10次,超过次数就提示“查看翻译和讲解”,每天0点才重新开始
下面是转为java的代码
//
// Decompiled by Jadx (from NP Manager)
//
package com.mobile.shannon.pax.dictionary.sentence;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.camera.camera2.interop.e;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.carlos.voiceline.mylibrary.VoiceLineView;
import com.chad.library.adapter.base.BaseViewHolder;
import com.mobile.shannon.pax.PaxApplication;
import com.mobile.shannon.pax.PaxApplication.a;
import com.mobile.shannon.pax.PaxBaseActivity;
import com.mobile.shannon.pax.R;
import com.mobile.shannon.pax.aigc.r;
import com.mobile.shannon.pax.controllers.ib;
import com.mobile.shannon.pax.controllers.lb;
import com.mobile.shannon.pax.entity.read.ReadMark;
import com.mobile.shannon.pax.entity.user.UserInfo;
import com.mobile.shannon.pax.read.appearance.c;
import com.mobile.shannon.pax.read.readmark.OpenThoughtReplyAdapter;
import com.mobile.shannon.pax.widget.f;
import com.mobile.shannon.pax.widget.getwordtextview.GetWordTextView;
import java.io.File;
import java.util.ArrayList;
import kotlin.jvm.internal.i;
import kotlin.jvm.internal.t;
import kotlin.jvm.internal.x;
import kotlinx.coroutines.a0;
import s6.f1;
import w4.d;
import x0.b;

public final class SentenceMultiFunctionAdapter {
    /* JADX WARNING: Removed duplicated region for block: B:111:0x03ce*/
    /* JADX WARNING: Removed duplicated region for block: B:110:0x03cd*/
    /* JADX WARNING: Removed duplicated region for block: B:144:? A:{SYNTHETIC, RETURN} */
    /* JADX WARNING: Removed duplicated region for block: B:122:0x0408*/
    /* Code decompiled incorrectly, please refer to instructions dump. */
    public final void convert(BaseViewHolder baseViewHolder, Object obj) {
      BaseViewHolder baseViewHolder2 = baseViewHolder;
      w wVar = (w) obj;
      i.f(baseViewHolder2, "helper");
      i.f(wVar, "item");
      int itemViewType = baseViewHolder.getItemViewType();
      int i = 1;
      Object obj2;
      Context context;
      if (itemViewType != 1) {
            CharSequence charSequence = "";
            d dVar;
            TextView textView;
            ViewGroup viewGroup;
            int intValue;
            ImageView imageView;
            if (itemViewType == 2) {
                obj2 = wVar.b;
                dVar = obj2 instanceof d ? (d) obj2 : null;
                if (dVar != null) {
                  TextView textView2;
                  f fVar;
                  t tVar;
                  String str = (String) dVar.c();
                  CharSequence charSequence2 = str == null ? charSequence : str;
                  String str2 = (String) dVar.d();
                  View view = baseViewHolder2.getView(R.id.mCheckBtn);
                  textView = (TextView) baseViewHolder2.getView(R.id.mCheckBtnTv);
                  ViewGroup viewGroup2 = (ViewGroup) baseViewHolder2.getView(R.id.mTranslationLayout);
                  viewGroup = (ViewGroup) baseViewHolder2.getView(R.id.mTranslationLoadingLayout);
                  TextView textView3 = (TextView) baseViewHolder2.getView(R.id.mTranslationTv);
                  ViewGroup viewGroup3 = (ViewGroup) baseViewHolder2.getView(R.id.mAnalysisLayout);
                  TextView textView4 = (TextView) baseViewHolder2.getView(R.id.mAnalysisTv);
                  context = this.mContext;
                  ib.a.getClass();
                  Drawable drawable = ContextCompat.getDrawable(context, ib.i() ? R.drawable.ic_vip_plus_dark : R.drawable.ic_vip_plus_light);
                  i.c(drawable);
                  drawable.setBounds(0, 0, 90, 45);
                  f fVar2 = new f(drawable);
                  lb.a.getClass();
                  if (lb.a0()) {
                        i.e(viewGroup2, "mTranslationLayout");
                        w3.f.s(viewGroup2, true);
                  }
                  if (lb.a0()) {
                        i.e(view, "setupTranslation$lambda$23");
                        w3.f.c(view, true);
                  }
                  view.setOnClickListener(new b(7, this));
                  t tVar2 = new t();
                  t tVar3 = new t();
                  t tVar4 = new t();
                  tVar4.element = true;
                  t tVar5 = tVar4;
                  TextView textView5 = textView4;
                  f fVar3 = fVar2;
                  u uVar = new u(tVar4, textView, this, view, tVar2, tVar3);
                  v vVar = new v(viewGroup2, viewGroup, textView3, fVar3);
                  if ((kotlin.text.i.h1(charSequence2) ^ 1) != 0) {
                        if (lb.a0()) {
                            if (str2 != null) {
                              if (!kotlin.text.i.h1(str2)) {
                                    obj2 = null;
                                    if (obj2 != null) {
                                        vVar.invoke(str2);
                                    }
                              }
                            }
                            obj2 = 1;
                            if (obj2 != null) {
                            }
                        }
                        context = this.mContext;
                        a0 a0Var = context instanceof PaxBaseActivity ? (PaxBaseActivity) context : null;
                        if (a0Var != null) {
                            textView2 = textView5;
                            fVar = fVar3;
                            f1.m0(a0Var, null, new r(this, charSequence2, vVar, uVar, viewGroup, tVar2, null), 3);
                            tVar = new t(viewGroup3, textView2, fVar);
                            if ((kotlin.text.i.h1(charSequence2) ^ 1) == 0) {
                              context = this.mContext;
                              a0 a0Var2 = context instanceof PaxBaseActivity ? (PaxBaseActivity) context : null;
                              if (a0Var2 != null) {
                                    f1.m0(a0Var2, null, new s(charSequence2, tVar5, tVar, uVar, viewGroup3, tVar3, null), 3);
                                    return;
                              }
                              return;
                            }
                            return;
                        }
                  }
                  textView2 = textView5;
                  fVar = fVar3;
                  tVar = new t(viewGroup3, textView2, fVar);
                  if ((kotlin.text.i.h1(charSequence2) ^ 1) == 0) {
                  }
                } else {
                  return;
                }
            } else if (itemViewType == 3) {
                obj2 = wVar.b;
                dVar = obj2 instanceof d ? (d) obj2 : null;
                if (dVar != null) {
                  itemViewType = ((Number) dVar.c()).intValue();
                  intValue = ((Number) dVar.d()).intValue();
                  textView = (TextView) baseViewHolder2.getView(R.id.mThoughtCountTv);
                  TextView textView6 = (TextView) baseViewHolder2.getView(R.id.mQuestionCountTv);
                  i.e(textView, "setupThoughtDivider$lambda$18");
                  w3.f.c(textView, itemViewType <= 0);
                  StringBuilder stringBuilder = new StringBuilder();
                  stringBuilder.append(itemViewType);
                  stringBuilder.append(com.mobile.shannon.pax.util.d.a() ? " thoughts" : "想法");
                  textView.setText(stringBuilder.toString());
                  textView.setOnClickListener(new c(textView, this, textView6, 0));
                  i.e(textView6, "setupThoughtDivider$lambda$20");
                  w3.f.c(textView6, intValue <= 0);
                  StringBuilder stringBuilder2 = new StringBuilder();
                  stringBuilder2.append(intValue);
                  stringBuilder2.append(com.mobile.shannon.pax.util.d.a() ? " questions" : "问题");
                  textView6.setText(stringBuilder2.toString());
                  textView6.setOnClickListener(new c(textView, this, textView6, 1));
                  return;
                }
                return;
            } else if (itemViewType == 4) {
                obj2 = wVar.b;
                ReadMark readMark = obj2 instanceof ReadMark ? (ReadMark) obj2 : null;
                if (readMark != null) {
                  CharSequence valueOf;
                  int i2;
                  x xVar = new x();
                  t tVar6 = new t();
                  imageView = (ImageView) baseViewHolder2.getView(R.id.mUserIconIv);
                  i.e(imageView, "setupThought$lambda$3");
                  w3.f.h(imageView, Integer.valueOf(R.drawable.ic_default_head_icon), readMark.getFigureUrl());
                  imageView.setOnClickListener(new d(this, readMark, 0));
                  TextView textView7 = (TextView) baseViewHolder2.getView(R.id.mUserNameTv);
                  textView7.setText(readMark.getUsername());
                  textView7.setOnClickListener(new d(this, readMark, 1));
                  baseViewHolder2.setText(R.id.mCommentTv, readMark.getMarkContent());
                  intValue = R.id.mLikeCountTv;
                  if (readMark.getLikeCount() > 0) {
                        valueOf = String.valueOf(readMark.getLikeCount());
                  } else {
                        PaxApplication paxApplication = PaxApplication.a;
                        valueOf = a.a().getString(R.string.like);
                        i.e(valueOf, "PaxApplication.sApplicat…string.like\n            )");
                  }
                  baseViewHolder2.setText(intValue, valueOf);
                  imageView = (ImageView) baseViewHolder2.getView(R.id.mLikeIv);
                  imageView.setImageResource(readMark.isLike() ? R.drawable.ic_like_pink : R.drawable.ic_like_gray);
                  imageView.setOnClickListener(new d(readMark, this));
                  intValue = R.id.mTimeTv;
                  Long valueOf2 = Long.valueOf(readMark.getCreateTime());
                  if (valueOf2 != null) {
                        charSequence = androidx.activity.result.a.c(valueOf2.longValue(), (long) 1000, "yyyy-MM-dd HH:mm", "millis2String(timestamp * 1000, pattern)");
                  }
                  baseViewHolder2.setText(intValue, charSequence);
                  textView7 = (TextView) baseViewHolder2.getView(R.id.mReplyTv);
                  PaxApplication paxApplication2 = PaxApplication.a;
                  textView7.setText(a.a().getString(R.string.reply));
                  textView7.setOnClickListener(new r(this, readMark, xVar, 5));
                  textView7 = (TextView) baseViewHolder2.getView(R.id.mDeleteBtn);
                  lb.a.getClass();
                  UserInfo userInfo = lb.e;
                  Object obj3 = (userInfo == null || readMark.getUid() != userInfo.getId()) ? null : 1;
                  String str3 = "setupThought$lambda$11";
                  if (obj3 != null) {
                        i.e(textView7, str3);
                        w3.f.s(textView7, true);
                        textView7.setOnClickListener(new r(this, readMark, baseViewHolder2, 6));
                  } else {
                        i.e(textView7, str3);
                        w3.f.c(textView7, true);
                  }
                  TextView textView8 = (TextView) baseViewHolder2.getView(R.id.mExpandTv);
                  String str4 = "setupThought$lambda$13";
                  if (readMark.getReplyList().size() > 2) {
                        i.e(textView8, str4);
                        w3.f.s(textView8, true);
                        if (tVar6.element) {
                            context = this.mContext;
                            i2 = R.string.collapse_replies;
                        } else {
                            context = this.mContext;
                            i2 = R.string.expand_more_replies;
                        }
                        textView8.setText(context.getString(i2));
                        textView8.setOnClickListener(new e(tVar6, textView8, this, xVar, readMark, 0));
                  } else {
                        i.e(textView8, str4);
                        w3.f.c(textView8, true);
                  }
                  RecyclerView recyclerView = (RecyclerView) baseViewHolder2.getView(R.id.mReplyList);
                  recyclerView.setHasFixedSize(true);
                  recyclerView.setLayoutManager(new LinearLayoutManager(this.mContext));
                  i2 = readMark.getReplyList().size();
                  if (i2 < 0 || i2 >= 3) {
                        i = 0;
                  }
                  OpenThoughtReplyAdapter openThoughtReplyAdapter = new OpenThoughtReplyAdapter(i != 0 ? readMark.getReplyList() : readMark.getReplyList().subList(0, 2));
                  xVar.element = openThoughtReplyAdapter;
                  openThoughtReplyAdapter.a = readMark.getCommentId();
                  openThoughtReplyAdapter.setOnItemLongClickListener(new e(this, openThoughtReplyAdapter, 9));
                  openThoughtReplyAdapter.b = new q(readMark);
                  recyclerView.setAdapter(openThoughtReplyAdapter);
                  return;
                }
                return;
            } else if (itemViewType == 5) {
                ViewGroup viewGroup4 = (ViewGroup) baseViewHolder2.getView(R.id.mRecordBtn);
                ViewGroup viewGroup5 = (ViewGroup) baseViewHolder2.getView(R.id.mPressRecordBtn);
                VoiceLineView voiceLineView = (VoiceLineView) baseViewHolder2.getView(R.id.mVoiceLineView);
                viewGroup = (ViewGroup) baseViewHolder2.getView(R.id.mFollowPlayBtn);
                imageView = (ImageView) baseViewHolder2.getView(R.id.mFollowPlayIv1);
                File file = new File(this.mContext.getCacheDir(), "temp_follow_read_audio.amr");
                j jVar = new j(file, imageView);
                t tVar7 = new t();
                x xVar2 = new x();
                xVar2.element = new g(voiceLineView, tVar7, xVar2);
                viewGroup4.setOnTouchListener(new a(this, viewGroup4, viewGroup5, voiceLineView, xVar2, file, tVar7, viewGroup, jVar));
                viewGroup.setOnClickListener(new b(jVar, 0));
                return;
            } else {
                return;
            }
      }
      PaxBaseActivity paxBaseActivity = null;
      obj2 = wVar.b;
      GetWordTextView getWordTextView = (GetWordTextView) baseViewHolder2.getView(R.id.mSentenceTv);
      getWordTextView.setText(obj2 instanceof String ? (String) obj2 : null);
      ArrayList arrayList = com.mobile.shannon.pax.dictionary.f.a;
      context = this.mContext;
      if (context instanceof PaxBaseActivity) {
            paxBaseActivity = (PaxBaseActivity) context;
      }
      com.mobile.shannon.pax.dictionary.f.b(getWordTextView, paxBaseActivity, null, null, null, null, null, null, null, null, 1020);
      c.b(getWordTextView);
    }
}

alkbx 发表于 2024-11-18 21:38

欢迎新人,教程非常棒棒哒!看了通篇的教程,你说的那个每天只能翻译10次很有可能是服务器验证的,本地过不去也就只能使用10次,能用本地功能已经很不错了

youyou199104 发表于 2024-11-12 15:56

看一看,下载下来学习

AiniWang 发表于 2024-11-12 15:56

欢迎新人,学习了

Tavarua 发表于 2024-11-12 16:20

可以可以,下载学习一下

mx5017 发表于 2024-11-12 16:29

这个软件收费吗

ydb1988 发表于 2024-11-12 16:32

可以可以,下载学习一下

yuyuanju 发表于 2024-11-12 16:35

下载学习,感谢思路,正巧需要这个功能

Zsw0126 发表于 2024-11-12 17:00

来学习学习思路

YHLS 发表于 2024-11-12 17:12

感谢楼主

宁致远 发表于 2024-11-12 17:15

正巧需要这个功能,下载学习一下!!
页: [1] 2 3 4 5
查看完整版本: 某英语学习app火龙果解锁PLUS部分功能,有翻译次数限制