duangsuse::Echo
我以为肯定是 Toast (原谅 duangsuse 的 Android 开发水平和一年前没大长进) 但不是(我在 trap 了 Toast 类, 纯纯写作在反修改弹窗时没掉进去 😄)
(当然没人回答也可以,我也可以再猜其他类或者使用 layout inspect 应用)
检查的确有是使用 Toast 的, 但不确定
> break-list
## Active Hooks
-- Hook <536870918> com.drakeet.purewriter.Ww <class 'andbug.vm.Class'>
-- Hook <536870919> android.content.pm.PackageInfo <class 'andbug.vm.Class'>
>> inspect 536870918
## object <536870918> not found
>> b android.widget.Toast
## Setting Hooks
-- Hooked <536870920> android.widget.Toast <class 'andbug.vm.Class'>
>> ## Breakpoint hit in thread <1> main (running suspended), process suspended.
-- android.widget.Toast.cancel()V:0
-- com.drakeet.purewriter.FolderView.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww(I)V:12
-- com.drakeet.purewriter.FolderView.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww(Landroid/view/MenuItem;)Z:14
-- android.support.v7.widget.Toolbar$1.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww(Landroid/view/MenuItem;)Z:10
-- android.support.v7.widget.ActionMenuView$Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwww.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww(Lcom/drakeet/purewr
iter/es;Landroid/view/MenuItem;)Z:10
-- com.drakeet.purewriter.es.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww(Lcom/drakeet/purewriter/es;Landroid/view/MenuItem;)Z:6
-- com.drakeet.purewriter.eu.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww()Z:18
-- com.drakeet.purewriter.es.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww(Landroid/view/MenuItem;Lcom/drakeet/purewriter/ez;I)Z:12
-- com.drakeet.purewriter.ex.onItemClick(Landroid/widget/AdapterView;Landroid/view/View;IJ)V:27
假设是随机决定是否弹出的话,说不定有这个功能会比较好:
让断点针对特定的类路径 regexp, 如果调用者的类路径 match 就正常中断/打印 call stack
否自动继续,只当没有这个断点
UnicodeDecodeError: 'utf8' codec can't decode byte 0x9e in position 0: invalid start byte刚才的 toast stacktrace:
drakeet 应该使用了这个类美化 Toast
这个类之后使用了
暂且叫它
另外:
我们看看
这是由 RxJava 管理的异步任务, 它可能要校验包签名
>> resume
## Process Resumed
>> ## Breakpoint hit in thread <1> main (running suspended), process suspended.
-- android.widget.Toast.getService()Landroid/app/INotificationManager;:0
-- android.widget.Toast.cancel()V:5
-- com.drakeet.purewriter.FolderView.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww(I)V:12
-- com.drakeet.purewriter.FolderView.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww(Landroid/view/MenuItem;)Z:14
-- com.drakeet.purewriter.arm.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww(Landroid/content/Context;Ljava/lang/CharSequence;I)Lcom/drakeet/p
urewriter/arm;:0
-- com.drakeet.purewriter.wm.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget
/Toast;:32
>> ## Breakpoint hit in thread <1> main (running suspended), process suspended.
-- android.widget.Toast.makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;:0
-- com.drakeet.purewriter.arm.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww(Landroid/content/Context;Ljava/lang/CharSequence;I)Lcom/drakeet/p
urewriter/arm;:0
-- com.drakeet.purewriter.arm.<init>(Landroid/content/Context;Landroid/widget/Toast;)V:0
-- com.drakeet.purewriter.arm.setView(Landroid/view/View;)V:0
-- com.drakeet.purewriter.wm.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget
/Toast;:36
-- com.drakeet.purewriter.wm.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww(Landroid/content/Context;I)Landroid/widget/Toast;:5
drakeet 应该使用了这个类美化 Toast
-- android.widget.Toast.setView(Landroid/view/View;)V:0
-- com.drakeet.purewriter.arm.setView(Landroid/view/View;)V:2
这个类之后使用了
Toast#setView-- com.drakeet.purewriter.arm.show()V:0
// 之后它调用了
-- android.widget.Toast.show()V:0
// Toast#show 调用了
-- android.widget.Toast.getService()Landroid/app/INotificationManager;:0
暂且叫它
BeautifulToast (com.drakeet.purewriter.arm)另外:
>> ## trace thread <25> RxSingleScheduler-1 (running suspended)
resume -- android.content.pm.PackageInfo.<init>(Landroid/os/Parcel;Landroid/content/pm/PackageInfo$1;)V:0
-- this=Landroid/content/pm/PackageInfo; <830068977456>
-- x0=Landroid/os/Parcel; <830063643872>
-- x1=None
-- snip --
-- com.drakeet.purewriter.tn.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww(Landroid/content/Context;Ljava/lang/String;)Landroid/content/pm/Pac
kageInfo;:6
我们看看
RxSingleScheduler-1这是由 RxJava 管理的异步任务, 它可能要校验包签名