发新帖

Android逆向移花接木之添加AlertDialog

[复制链接]
27102 17
前言有时候我们破解一款软件,为了表明是自己修改的作品或者说明一些使用应注意的事项,一般会在程序开启时,自定义添加点东西,比如常见的Splash、Toast,不带按钮的Alertdialog等,今天我们就试试添加自定义的带按钮、按钮带链接的Alertdialog。
对比反编译具有该形式的DEMO,可以发现在主Activity的onCreate()方法中,增加了以下的代码:


  1.     new-instance v0, Landroid/app/AlertDialog$Builder;
  2.     invoke-direct {v0, p0}, Landroid/app/AlertDialog$Builder;-><init>(Landroid/content/Context;)V
  3.     const-string v1, "CSDN博客"
  4.     invoke-virtual {v0, v1}, Landroid/app/AlertDialog$Builder;->setTitle(Ljava/lang/CharSequence;)Landroid/app/AlertDialog$Builder;
  5.     move-result-object v0
  6.     const-string v1, "欢迎访问我的博客"
  7.     invoke-virtual {v0, v1}, Landroid/app/AlertDialog$Builder;->setMessage(Ljava/lang/CharSequence;)Landroid/app/AlertDialog$Builder;
  8.     move-result-object v0
  9.     const-string v1, "我的主页"
  10.     //需要注意的地方,如果原程序有$1会出现冲突
  11.     new-instance v2, Lcom/changba/activity/HomePageFragmentActivity$1;
  12.     invoke-direct {v2, p0}, Lcom/changba/activity/HomePageFragmentActivity$1;-><init>(Lcom/changba/activity/HomePageFragmentActivity;)V
  13.     invoke-virtual {v0, v1, v2}, Landroid/app/AlertDialog$Builder;->setPositiveButton(Ljava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;
  14.     move-result-object v0
  15.     const-string v1, "确定"
  16.     const/4 v2, 0x0
  17.     invoke-virtual {v0, v1, v2}, Landroid/app/AlertDialog$Builder;->setNegativeButton(Ljava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener;)Landroid/app/AlertDialog$Builder;
  18.     move-result-object v0
  19.     invoke-virtual {v0}, Landroid/app/AlertDialog$Builder;->show()Landroid/app/AlertDialog;
复制代码
同时,也会多反编译一个带$1的主Activity的内部类,代码如下面:
  1. //需要注意的地方,如果原程序有$1会出现冲突
  2. .class Lcom/example/testtoast/MainActivity$1;
  3. .super Ljava/lang/Object;
  4. //这个也要注意,看准主Activity的名称
  5. .source "MainActivity.java"

  6. # interfaces
  7. .implements Landroid/content/DialogInterface$OnClickListener;


  8. # annotations
  9. .annotation system Ldalvik/annotation/EnclosingMethod;
  10.     value = Lcom/example/testtoast/MainActivity;->onCreate(Landroid/os/Bundle;)V
  11. .end annotation

  12. .annotation system Ldalvik/annotation/InnerClass;
  13.     accessFlags = 0x0
  14.     name = null
  15. .end annotation


  16. # instance fields
  17. .field final synthetic this$0:Lcom/example/testtoast/MainActivity;


  18. # direct methods
  19. .method constructor <init>(Lcom/example/testtoast/MainActivity;)V
  20.     .locals 0

  21.     .prologue
  22.     .line 1
  23.     //需要注意的地方,如果原程序有$1会出现冲突
  24.     iput-object p1, p0, Lcom/example/testtoast/MainActivity$1;->this$0:Lcom/example/testtoast/MainActivity;

  25.     .line 29
  26.     invoke-direct {p0}, Ljava/lang/Object;-><init>()V

  27.     return-void
  28. .end method


  29. # virtual methods
  30. .method public onClick(Landroid/content/DialogInterface;I)V
  31.     .locals 3
  32.     .param p1, "dialog"    # Landroid/content/DialogInterface;
  33.     .param p2, "which"    # I

  34.     .prologue
  35.     .line 34
  36.     const-string v2, "http://blog.csdn.net/zihao2012"

  37.     invoke-static {v2}, Landroid/net/Uri;->parse(Ljava/lang/String;)Landroid/net/Uri;

  38.     move-result-object v1

  39.     .line 35
  40.     .local v1, "uri":Landroid/net/Uri;
  41.     new-instance v0, Landroid/content/Intent;

  42.     const-string v2, "android.intent.action.VIEW"

  43.     invoke-direct {v0, v2, v1}, Landroid/content/Intent;-><init>(Ljava/lang/String;Landroid/net/Uri;)V

  44.     .line 36
  45.     .local v0, "it":Landroid/content/Intent;
  46.     //需要注意的地方,如果原程序有$1会出现冲突
  47.     iget-object v2, p0, Lcom/example/testtoast/MainActivity$1;->this$0:Lcom/example/testtoast/MainActivity;

  48.     invoke-virtual {v2, v0}, Lcom/example/testtoast/MainActivity;->startActivity(Landroid/content/Intent;)V

  49.     .line 39
  50.     return-void
  51. .end method
复制代码
操作今天我们仍然沿用原来的操作对象SuperChm,反编译之后,定位到主Activity:Lcom/jrzheng/superchm/Activity/MainActivity;浏览一下周边的目录,会发现原程序已经有内部类$1,为了避免冲突,我们就需要将需要添加的内部类,修改为$111,onCreate()中如下图:
http://img.blog.csdn.net/20141009105121840

最近将总类名Lcom/changba/activity/HomePageFragmentActivity全部替换成:Lcom/jrzheng/superchm/Activity/MainActivity。


完成图
http://img.blog.csdn.net/20141009105317515http://img.blog.csdn.net/20141009105101203
小菜不会编程..全程只因Allen大神的DEMO,谢谢~帮了我很多:-D下载地址
链接: http://pan.baidu.com/s/1pJ9I3vt 密码: ohie

【via@淡然出尘




举报 使用道具

回复

精彩评论17

花墨    发表于 2014-11-19 18:11:54 | 显示全部楼层
小白 发表于 2014-11-19 18:08
回头  发个一键画工具  在吾爱发过了

什么一键画?

举报 使用道具

回复 支持 1 反对 0
Mycool    发表于 2014-10-26 19:27:43 | 显示全部楼层
:D就是找到同样功能的app,定位到实现的代码,逆向出汇编代码,添加。好思路。

举报 使用道具

回复 支持 反对
JackIO    发表于 2014-10-28 18:09:42 | 显示全部楼层
很不错,学习啦。

举报 使用道具

回复 支持 反对
小白    发表于 2014-11-19 18:08:03 | 显示全部楼层
回头  发个一键画工具  在吾爱发:loveliness:过了

举报 使用道具

回复 支持 反对
小白    发表于 2014-11-23 09:59:54 | 显示全部楼层

打错了  不是一键化的 算是比较简单添加dialog工具,不用手动复制了添加了

举报 使用道具

回复 支持 反对
sndncel    发表于 2014-12-24 09:11:11 | 显示全部楼层
:lol谢谢分享呀。。。学习了呀。哈哈。

举报 使用道具

回复 支持 反对
boyce    发表于 2015-3-16 14:34:44 | 显示全部楼层
学习了,什么时候试试效果

举报 使用道具

回复 支持 反对
B6B6B6    发表于 2015-3-25 22:25:10 来自手机  | 显示全部楼层
又学习了一点知识!感谢分享!

举报 使用道具

回复 支持 反对
重复单调〃    发表于 2015-7-30 16:04:23 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽

举报 使用道具

回复 支持 反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表