刚才的 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 管理的异步任务, 它可能要校验包签名
com.drakeet.purewriter.arm.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww(Landroid/content/Context;Ljava/lang/CharSequence;I)Lcom/drakeet/purewriter/arm;:18很有可能是 arm 类的构造方法, 一次我看到它调用了
com.drakeet.purewriter.arm.<init>(Landroid/content/Context;Landroid/widget/Toast;)V:0然后它调用了
com.drakeet.purewriter.arm.setView(Landroid/view/View;)V:0setup view
最后
com.drakeet.purewriter.arm.show()V:0接下来就是 stack frame unwind 了
之后 drakeet 再次来检查盗版 XD
## trace thread <25> RxSingleScheduler-1 (running suspended)
-- android.content.pm.PackageInfo.<init>(Landroid/os/Parcel;)V:0
-- this=Landroid/content/pm/PackageInfo; <830055150976>
-- source=Landroid/os/Parcel; <830058319584>
-- android.content.pm.PackageInfo.<init>(Landroid/os/Parcel;Landroid/content/pm/PackageInfo$1;)V:0
-- snip --
-- android.app.ApplicationPackageManager.getPackageInfo(Ljava/lang/String;I)Landroid/content/pm/PackageInfo;:8
-- this=Landroid/app/ApplicationPackageManager; <830059120944>
-- packageName=com.drakeet.purewriter
-- flags=64
-- com.drakeet.purewriter.tn.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww(Landroid/content/Context;Ljava/lang/String;)Landroid/content/pm/Pac
kageInfo;:6
-- com.drakeet.purewriter.tn.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww(Landroid/content/Context;Ljava/lang/String;)Z:1
-- com.drakeet.purewriter.tn.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww(Landroid/content/Context;)Z:4
5 -- com.drakeet.purewriter.tn.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww(Lcom/drakeet/purewriter/Xxxxx;)V:0
-- com.drakeet.purewriter.to.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww()V:2
-- com.drakeet.purewriter.aiw.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww(Lcom/drakeet/purewriter/ago;)V:9
-- this=Lcom/drakeet/purewriter/aiw; <830055104000>
-- com.drakeet.purewriter.agm.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww(Lcom/drakeet/purewriter/ago;)V:9
-- this=Lcom/drakeet/purewriter/aiw; <830055104000>
-- com.drakeet.purewriter.aiy$Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww.run()V:2
-- this=Lcom/drakeet/purewriter/aiy$Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww; <830054169824>
-- com.drakeet.purewriter.alf.Wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww()Ljava/lang/Void;:9
duangsuse::Echo
之后 drakeet 再次来检查盗版 XD ## trace thread <25> RxSingleScheduler-1 (running suspended) -- android.content.pm.PackageInfo.<init>(Landroid/os/Parcel;)V:0 -- this=Landroid/content/pm/PackageInfo; <830055150976> -- source=Landroid/os/Parcel;…
看来不仅有
onCreate() onDestory() 这样的通过 libcore.so 检查并设置标记, 还有定时检查(>> resume
## Process Resumed
>> ## Breakpoint hit in thread <25> RxSingleScheduler-1 (running suspended), process suspended.
-- android.content.pm.PackageInfo.<init>(Landroid/os/Parcel;Landroid/content/pm/PackageInfo$1;)V:0
这一段时间都是这个线程在检查签名,就决定是你了!
>> thread-trace 25
## Setting Hooks
-- Hooked thread <25> RxSingleScheduler-1 (running suspended)