首页
论坛
课程
招聘
[原创]陌陌跳过apksign验证方法
2012-12-4 04:05 39136

[原创]陌陌跳过apksign验证方法

2012-12-4 04:05
39136
验证的算法已经在下面的帖子里有了,现在就是如何跳过程序验证的问题了.
http://bbs.pediy.com/showthread.php?t=159446

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

(有些文件是找来的:

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

)


工具1.dex2jar  
下载地址(抄来的或者Google):http://laichao.googlecode.com/files/dex2jar-0.0.7-SNAPSHOT.zip

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

工具3.JD-GUI    下载地址:http://laichao.googlecode.com/files/jdgui.zip
(建议用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(),可以在http://bbs.pediy.com/showthread.php?t=159446 查看

因为要修程序,所以要跳过这个验证,但验证是在网上,登录时如果发现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      下载地址:http://code.google.com/p/android-apktool/

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



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


反编译后打打开com.immomo.momo.e所对应的文件e.smali,
(在输出目录的\com.immomo.momo_165626\smali\com\immomo\momo下)搜索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.

--

第五届安全开发者峰会(SDC 2021)议题征集正式开启!

收藏
点赞0
打赏
分享
最新回复 (4)
雪    币: 113
活跃值: 活跃值 (87)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Fido 活跃值 2012-12-4 10:16
2
0
这是那个软件不咯??

看看无妨....
雪    币: 195
活跃值: 活跃值 (106)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
alice 活跃值 2012-12-4 23:19
3
0
嘿嘿,就是传说中的约炮神器,最新估值1亿刀的那陌陌~~
雪    币: 1
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
randomzj 活跃值 2016-3-30 11:05
4
0
您好,您有分析过陌陌的通信协议吗?传输的密文是什么加密
游客
登录 | 注册 方可回帖
返回