陌陌跳过apksign验证方法 | 少将全栈
  • 欢迎访问少将全栈,学会感恩,乐于付出,珍惜缘份,成就彼此、推荐使用最新版火狐浏览器和Chrome浏览器访问本网站。
  • 吐槽,投稿,删稿,交个朋友
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏少将全栈吧

陌陌跳过apksign验证方法

点滴 admin 9年前 (2016-01-05) 10649次浏览 已收录 扫描二维码

这里还是照顾一下新手,把一些过程写一下.

引用:
(有些文件是找来的:<br />

标 题: Android的APK文件反编绎
作 者: 沙加L
时 间: 2011-11-04,22:18:42
链 接: <br”>http://bbs.pediy.com/showthread.php?t=142376</a><br />

)

工具1.dex2jar  
下载地址(抄来的或者Google):<br”>http://laichao.googlecode.com/files/…7-SNAPSHOT.zip</a><br />

工具2 豌豆荚2   这个是用来下来APK的,也可以用来管理手机软件.方便

工具3.JD-GUI    下载地址:<br”>http://laichao.googlecode.com/files/jdgui.zip</a><br />
(建议用0.3.3的,最新的0.3.5的好像不如旧的,有些不能反编译)

用豌豆荚2 下载的 com.immomo.momo_165626.apk 用 dex2jar 转换成 com.immomo.momo_165626_dex2jar.jar

然后用JD-GUI打开

……这里省略查找过程…….

最后找到是在com.immomo.momo.e.J(),可以在&nbsp;查看<br”>http://bbs.pediy.com/showthread.php?t=159446</a>&nbsp;查看<br />

因为要修程序,所以要跳过这个验证,但验证是在网上,登录时如果发现apksign不正确,那是没有办法进行登录的.

方法一 本来想把程序直接改成

代码:
 public static String J()
  {
    return "正确的apksign";
}

但问题apksign通过抓包抓不到,因为是HTTPS协议.放弃~~

方法二 自己写程序,按照算法算出来,再放回去,但说实话,我一个APK程序都没写过,可行,但懒得找下程序来写了~~

方法三,最后突发想法,看代码

代码:
    String str1 = a.getApplicationInfo().publicSourceDir; //获取程序的绝对路径
    Class localClass = Class.forName("android.content.pm.PackageParser");
    Class[] arrayOfClass1 = new Class[4];
    arrayOfClass1[0] = File.class;
    arrayOfClass1[1] = String.class;
......
    arrayOfObject2[0] = new File(str1);//打开文件,放入参数
    arrayOfObject2[1] = null;
    arrayOfObject2[2] = a.getResources().getDisplayMetrics();
    arrayOfObject2[3] = Integer.valueOf(4);
    Object localObject2 = localMethod1.invoke(localObject1, arrayOfObject2);

我想一下如果把路径换成没有修改过的APK,让修过的APK去计算没有修改过的APK.

(验证是否行得通花了我两个小时,过程略..)结果证明,是可以的,所以只要修改str1这个参数.

现在说一下如何修改代码,为了修改代码,得用上工具4

工具4 apktool      下载地址:<br”>http://code.google.com/p/android-apktool/</a><br />

记得参数加 -r ,不反编译资源,不然编译回去时报错一堆!! 本次也只是修改代码而已!!

引用:
<br />

 -r, –no-res
     Do not decode resources.

反编译后打打开com.immomo.momo.e所对应的文件e.smali,
(在输出目录的com.immomo.momo_165626smalicomimmomomomo下)搜索J()

在修改之前,还得打没有没有修过的com.immomo.momo_165626.apk放到手机里,我的是放到
/data/app/com.immomo.momo_165626.apk,注意,是放入不是安装

然后就可以进行对str1这个参数的修改了

代码:
.method public static J()Ljava/lang/String;
    .locals 11
    const/4 v1, 0x0
    const/4 v10, 0x4
    const/4 v9, 0x2
    const/4 v8, 0x1
    const/4 v7, 0x0
    sget-object v0, Lcom/immomo/momo/e;->a:Landroid/content/Context;
    invoke-virtual {v0}, Landroid/content/Context;->getApplicationInfo()Landroid/content/pm/ApplicationInfo;
    move-result-object v0
    iget-object v0, v0, Landroid/content/pm/ApplicationInfo;->publicSourceDir:Ljava/lang/String;
    const-string v2, "android.content.pm.PackageParser"
    invoke-static {v2}, Ljava/lang/Class;->forName(Ljava/lang/String;)Ljava/lang/Class;
    move-result-object v2
    const-string v3, "parsePackage"
    new-array v4, v10, [Ljava/lang/Class;
    const-class v5, Ljava/io/File;
    aput-object v5, v4, v7
    const-class v5, Ljava/lang/String;
    aput-object v5, v4, v8
    const-class v5, Landroid/util/DisplayMetrics;
    aput-object v5, v4, v9
    const/4 v5, 0x3
    sget-object v6, Ljava/lang/Integer;->TYPE:Ljava/lang/Class;
    aput-object v6, v4, v5
    invoke-virtual {v2, v3, v4}, Ljava/lang/Class;->getMethod(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;
    move-result-object v3
    new-array v4, v8, [Ljava/lang/Class;
    const-class v5, Ljava/lang/String;
    aput-object v5, v4, v7
    invoke-virtual {v2, v4}, Ljava/lang/Class;->getConstructor([Ljava/lang/Class;)Ljava/lang/reflect/Constructor;
    move-result-object v4
    new-array v5, v8, [Ljava/lang/Object;
    const-string v6, ""
    aput-object v6, v5, v7
    invoke-virtual {v4, v5}, Ljava/lang/reflect/Constructor;->newInstance([Ljava/lang/Object;)Ljava/lang/Object;
    move-result-object v4
    new-array v5, v10, [Ljava/lang/Object;
    new-instance v6, Ljava/io/File; //就是上面的 new File(str1); 
    
//只要加一面这一句,其他什么都不需要修改了
    const-string v0, "/data/app/com.immomo.momo_165626.apk"  //v6是File,v0是参数,所以在传入前把v0这个参数改掉
    invoke-direct {v6, v0}, Ljava/io/File;-><init>(Ljava/lang/String;)V  //v6是File,v0是参数
    aput-object v6, v5, v7
    aput-object v1, v5, v8

至此,程序验证已经失效,接下来你就可以Do something…….B+)

修改完后再用apktool编译回去

最后也是很多人没有说的,要给APK签名

工具5 APK-sign 
请Google吧,不记得从哪里下载的了

最最后就是安装了,That’s all.

–*转载请注明来自看雪论坛@PEdiy.com

喜欢 (0)
[🍬谢谢你请我吃糖果🍬🍬~]
分享 (0)
关于作者:
少将,关注Web全栈开发、项目管理,持续不断的学习、努力成为一个更棒的开发,做最好的自己,让世界因你不同。